[英]How to go capture the response time of executing multiple queries simultaneously in Java?
我正在开发Java工具,该工具必须将包含一组查询(大约1000个)的文本文件作为输入,一起执行它们,并打印出每个查询所花费的响应时间。
我认为我们需要为此使用线程。 我们如何去做? 我们应该先创建一个连接,然后为每个查询启动一个新线程吗?
要求是创建一个包含查询以及响应时间的文件。
另外
任何帮助将不胜感激。 谢谢
编辑:这是为性能团队开发的工具,用于在数据库中大约有1000个并发命中时检查查询的响应时间。
您的问题太含糊。
例如,您是否有将1000个SQL传递给SQL Server以便批量执行?
在这种情况下,您可以执行以下操作:
long start = System.currentTimeMillis();
execute SQL script
System.out.println("took:"+System.currentTimeMillis() - start);
如果您有一系列的sql查询要作为与应用程序分开的操作运行,并且想要测量平均时间,则可以使用执行程序来提交任务,为每个任务添加时间(与上述类似),最后分割按完成的查询数量。
更新:
您可以为此使用线程池。
示例(省略的异常处理):
Collection<Callable<Long>> sqlTasks = new ArrayList<Callable<Long>>();
sqlTasks.add(new Callable<Long>(){
@Override
public Long call() throws Exception {
long start = System.currentTimeMillis();
// DO SQL QUERY HERE
//return delay
return System.currentTimeMillis() - start;
}
});
//ADD MORE TO THE QUEUE
ExecutorService threadPool = Executors.newCachedThreadPool();
List<Future<Long>> results = threadPool.invokeAll(sqlTasks);
long totalDelay = 0;
for(Future<Long> delay:results){
System.out.println("Delay for task"+delay.get());
totalDelay += delay.get();
}
System.out.println("Average Delay per task"+totalDelay / sqlTasks.size());
您将SQL查询添加到队列中,它们由线程池中的线程执行,并且每个查询都返回其延迟。
但是,您还应该提及要尝试的SQL DB。 也许已经有一个性能工具
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.