Start of a benchmark
parent
21fe1b4439
commit
95905042b5
@ -0,0 +1,140 @@
|
|||||||
|
package com.zaxxer.hikari.performance;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
import java.util.concurrent.CyclicBarrier;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import com.zaxxer.hikari.HikariConfig;
|
||||||
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
|
||||||
|
public class Benchmarks
|
||||||
|
{
|
||||||
|
private static final int THREADS = Integer.getInteger("threads", 100);
|
||||||
|
|
||||||
|
private DataSource ds;
|
||||||
|
|
||||||
|
public static void main(String... args)
|
||||||
|
{
|
||||||
|
if (args.length == 0)
|
||||||
|
{
|
||||||
|
System.err.println("Start with one of: hikari, bone, c3p0, dbcp");
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Benchmarks benchmarks = new Benchmarks();
|
||||||
|
if (args[0].equals("hikari"))
|
||||||
|
{
|
||||||
|
benchmarks.ds = benchmarks.setupHikari();
|
||||||
|
}
|
||||||
|
|
||||||
|
benchmarks.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private DataSource setupHikari()
|
||||||
|
{
|
||||||
|
HikariConfig config = new HikariConfig();
|
||||||
|
config.setMinimumPoolSize(1);
|
||||||
|
config.setMaximumPoolSize(100);
|
||||||
|
config.setConnectionTimeoutMs(5000);
|
||||||
|
config.setConnectionTestQuery("VALUES 1");
|
||||||
|
config.setDataSourceClassName("com.zaxxer.hikari.mocks.MockDataSource");
|
||||||
|
config.setProxyFactoryClassName(System.getProperty("testProxy", "auto"));
|
||||||
|
config.setProxyFactoryClassName(System.getProperty("testProxy", "com.zaxxer.hikari.CglibProxyFactory"));
|
||||||
|
|
||||||
|
HikariDataSource ds = new HikariDataSource();
|
||||||
|
ds.setConfiguration(config);
|
||||||
|
return ds;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void start()
|
||||||
|
{
|
||||||
|
CyclicBarrier barrier = new CyclicBarrier(THREADS);
|
||||||
|
CountDownLatch latch = new CountDownLatch(THREADS);
|
||||||
|
|
||||||
|
Runner[] runners = new Runner[THREADS];
|
||||||
|
for (int i = 0; i < THREADS; i++)
|
||||||
|
{
|
||||||
|
runners[i] = new Runner(barrier, latch);
|
||||||
|
Thread t = new Thread(runners[i]);
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
latch.await();
|
||||||
|
}
|
||||||
|
catch (InterruptedException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
long min = Integer.MAX_VALUE, max = 0;
|
||||||
|
for (Runner runner : runners)
|
||||||
|
{
|
||||||
|
long elapsed = runner.getElapsed();
|
||||||
|
min = Math.min(min, elapsed);
|
||||||
|
max = Math.max(max, elapsed);
|
||||||
|
}
|
||||||
|
long avg = min + ((max - min) / 2);
|
||||||
|
System.out.printf("min=%d, max=%d, avg=%d\n", min, max, avg);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Runner implements Runnable
|
||||||
|
{
|
||||||
|
private CyclicBarrier barrier;
|
||||||
|
private CountDownLatch latch;
|
||||||
|
private long start;
|
||||||
|
private long finish;
|
||||||
|
|
||||||
|
public Runner(CyclicBarrier barrier, CountDownLatch latch)
|
||||||
|
{
|
||||||
|
this.barrier = barrier;
|
||||||
|
this.latch = latch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
barrier.await();
|
||||||
|
|
||||||
|
start = System.currentTimeMillis();
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
Connection connection = ds.getConnection();
|
||||||
|
for (int j = 0; j < 20; j++)
|
||||||
|
{
|
||||||
|
PreparedStatement statement = connection.prepareStatement("SELECT * FROM test WHERE foo=?");
|
||||||
|
for (int k = 0; k < 30; k++)
|
||||||
|
{
|
||||||
|
statement.setInt(1, i);
|
||||||
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
resultSet.next();
|
||||||
|
resultSet.close();
|
||||||
|
}
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
finish = System.currentTimeMillis();
|
||||||
|
latch.countDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getElapsed()
|
||||||
|
{
|
||||||
|
return finish - start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue