如何检索先前查询的查询执行时间

Posted

技术标签:

【中文标题】如何检索先前查询的查询执行时间【英文标题】:How to retrieve query execution times for previous query 【发布时间】:2014-02-25 21:19:19 【问题描述】:

我正在尝试诊断客户端站点上缓慢的应用程序性能。

客户端计算机上的日志文件告诉我从应用程序端测量的每个查询的执行时间。看来,对远程数据库的许多基本简单查询都需要花费大量时间才能完成。例如,

SELECT CONVERT(varchar, GETDATE(), 121)

根据应用程序的计时,此查询重复执行超过 5 秒。几乎同样简单的其他查询(将一个记录集插入一个表)需要一分钟多的时间才能完成。在我的测试系统(带有客户端数据库的副本)上,我没有遇到任何这些问题。

我怀疑网络速度很慢,但从 Crystal Reports 运行报告后问题可靠地消失了。然后在 1-2 小时后应用程序再次变慢。

为了进一步隔离问题,我想在服务器端检索/记录执行时间。我试图弄清楚这样做的最佳方法是什么。我可以使用一个变量来获取单个查询的执行时间,但我无法修改我的应用程序中的每个查询。

sys.dm_exec_query_stats 看起来很有希望检索以前查询的执行时间,但它报告的 last_elapsed_time 毫秒值似乎太高了。

谁能帮我弄清楚如何为我的查询获取时间?

【问题讨论】:

【参考方案1】:

这是一种方式

set statistics time on
SELECT CONVERT(varchar, GETDATE(), 121)
set statistics time off

它会将查询花费的时间报告为

SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

【讨论】:

不幸的是,我需要为应用程序运行的查询获取这些统计信息,而不是我从 ssms 手动执行的查询。 好吧,您可以从您的客户端应用程序中获得相同的消息。例如:***.com/questions/765142/… 和 ***.com/questions/5008826/…

以上是关于如何检索先前查询的查询执行时间的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL - 如何在查询多个突变期间检索先前突变的 id

在存储过程中执行时选择查询不检索记录

如何使用从两个表中的选择查询问题检索行

如何在java中执行复合sql查询?

如何在 Firebase 中执行连接查询? [复制]

Sybase 运行从先前查询生成的 SQL