如果不使用太多资源,这个查询可能需要这么多时间?

时间:2011-11-22 16:57:19

标签: sql-server sql-server-2008

我运行了SQL Server Profiler跟踪(批处理完成时的持续时间),发现了一个非常长时间运行的查询。这些是前五个运行时间最长的查询的利用率统计信息:

Count   Duration    CPU     Reads   Writes
1       1237757030  608     47979   10
14695   358668961   355928  4818709 315
3501    48323496    43705   625474  17 
75883   46373094    45250   8526977 127
34      35394031    10200   2461621 0

第一个运行时间比第二个运行时间长近3倍,即使第二个具有比第一个更大的累计CPU时间和读取次数。这怎么可能,或者我怎样才能更多地了解这里发生的事情?

1 个答案:

答案 0 :(得分:4)

通常这是由某种资源争用引起的。换句话说,在等待释放锁(阻塞),从磁盘读取数据,等待线程完成其工作等时,您的查询处于空闲状态。

这是一个很深的主题,但我建议首先查看你的等待统计数据。

要了解累积等待统计数据,请查看sys.dm_os_wait_stats。来自BOL:

  

“查询执行期间的特定类型的等待时间可以指示   查询中的瓶颈或停滞点。同样,高等待   服务器范围内的等待或等待计数可能表示瓶颈或热   交互中的点在服务器实例中查询交互。“

您还可以运行查询并尝试识别阻止问题。这是一篇关于这个主题的好文章。

http://www.simple-talk.com/sql/sql-tools/how-to-identify-blocking-problems-with-sql-profiler/

这些是一些值得关注的领域,但老实说,有很多变量,除了可以访问您的服务器之外,除了提供您可以看到的猜测和建议之外,任何事情都非常困难。