gpt4 book ai didi

java - 如何在Java中捕获同时执行多个查询的响应时间?

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:27 25 4
gpt4 key购买 nike

我正在开发一个 Java 工具,它必须将包含一组查询(大约 1000 个)的文本文件作为输入,一起执行它们,并打印出每个查询所花费的响应时间。

我认为我们需要为此使用线程。我们该怎么做呢?我们应该先创建一个连接,然后为每个查询启动一个新线程吗?

要求是创建一个文件,其中包含查询以及旁边打印的响应时间。

另外

  1. 计划从主程序获取数据库连接,将其与执行查询的查询一起传递给线程。这是正确的方法吗?
  2. 由于它是一个文本文件,因此将获取数组列表中的所有查询,并将从 while 迭代器循环中调用线程。还有更好的办法吗?
  3. 如何编写响应时间?我应该将所有查询与时间一起存储,最后将其写入文本文件,还是应该在线程执行每个查询后立即写入?

任何帮助将不胜感激。谢谢

编辑:它是为性能团队开发的工具,用于检查数据库并发命中大约 1000 次时查询的响应时间。

最佳答案

你的问题太模糊了。
例如,您有吗? 1000 个 SQL 传递到 SQL 服务器以批量执行?
在这种情况下,你可以这样做:

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 查询添加到队列中,它们由 thread pool 中的线程执行。每个都返回其延迟。
但您还应该提及您正在尝试哪种 SQL DB。也许已经有一个性能工具可以做到这一点

关于java - 如何在Java中捕获同时执行多个查询的响应时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11850090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com