关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
上个月关门了。
改进这个问题
我想对我的数据库进行基准测试,为此我编写了java代码来运行查询,因此我的代码执行以下操作:
在那里 N
查询数,每个查询将执行1000次,最大并发数为 C
. 我使用consolereporter-dropwizard度量来度量查询执行时间,下面是我的主要方法类:
int concurrency = 5;
int queries = 10;
int loopTimes = 1000/concurrency ;
ExecutorService executorService = Executors.newFixedThreadPool(concurrency);
for(int index=0;index<queries;index++){
CountDownLatch latch = new CountDownLatch(concurrency);
for(int j=0;j<concurrency;j++) {
TimeUnit.SECONDS.sleep(1);
executorService.submit(new QueryRunner(index,loopTimes,latch));
}
latch.await();
System.out.println("Query Complete : "+i);
}
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.DAYS);
ConsoleReporter.forRegistry(metricRegistry).build().report();
下面是我的主要运行方法
@Override
public void run() {
try (Connection connection = DriverManager.getConnection(connectionUrl)) {
int count =0;
while(count!=loop) {
count++;
try (PreparedStatement ps = connection.prepareStatement(SQL.queries.get(index))) {
final Timer timer = metricRegistry.timer(name("query-", Integer.toString(index)));
ResultSet rs = null;
final Timer.Context context = timer.time();
try{
rs = ps.executeQuery();
}finally {
context.stop();
}
if (rs!=null && rs.next()) {
successCounter.inc();
} else {
failedCounter.inc();
}
Thread.sleep((long)(3000*Math.random()));
}
}
try {
latch.countDown();
} catch (Exception e) {
e.printStackTrace();
}
} catch (SQLException | InterruptedException e) {
e.printStackTrace();
}
每次运行代码时,对于相同的查询集,我都会得到不同的结果,因此我想检查代码中是否存在任何bug。
我还想得到一些改进基准脚本的建议。
暂无答案!
目前还没有任何答案,快来回答吧!