我运行了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时间和读取次数。这怎么可能,或者我怎样才能更多地了解这里发生的事情?
答案 0 :(得分:4)
通常这是由某种资源争用引起的。换句话说,在等待释放锁(阻塞),从磁盘读取数据,等待线程完成其工作等时,您的查询处于空闲状态。
这是一个很深的主题,但我建议首先查看你的等待统计数据。
要了解累积等待统计数据,请查看sys.dm_os_wait_stats。来自BOL:
“查询执行期间的特定类型的等待时间可以指示 查询中的瓶颈或停滞点。同样,高等待 服务器范围内的等待或等待计数可能表示瓶颈或热 交互中的点在服务器实例中查询交互。“
您还可以运行查询并尝试识别阻止问题。这是一篇关于这个主题的好文章。
http://www.simple-talk.com/sql/sql-tools/how-to-identify-blocking-problems-with-sql-profiler/
这些是一些值得关注的领域,但老实说,有很多变量,除了可以访问您的服务器之外,除了提供您可以看到的猜测和建议之外,任何事情都非常困难。