Hol*_*per 9 sql-server-2008 sql-server
为什么sp_reset_connection通过 SQL Server Profiler 查看系统存储过程的执行时间会超过几毫秒?
我使用 SQL Server Profiler 从生产系统中获取了一个简单的跟踪,然后使用 SqlNexus 对其进行了分析。SqlNexus 表明 sp_reset_connection 的累积持续时间最长——占整个跟踪的 33%。观察到的持续时间范围为 0-7 秒(12 到 6,833,270 微秒),但平均为 0.956 秒。
我知道当池连接被重用时会调用 sp_reset_connection。我已经看到一个建议,这可能是由于无关的痕迹而发生的,但情况似乎并非如此。
我已经阅读了调用 sproc 时服务器正在做什么,但我不相信在这种情况下,任何这些都会有问题——代码不会留下需要清理的开放事务或巨大的临时表。
我还查看了https://serverfault.com/questions/199974/sp-reset-connection-taking-a-long-time-to-run但这没有帮助。
编辑(2013-12-23): 在所有情况下,读写都是0,CPU几乎总是0(只有两个非零CPU实例,都是16ms)。
终于有时间写一个更详细的答案。
通常有三个主要原因,一个简单的程序sp_reset_connection需要很长时间才能运行。
广告 1)如果您正在等待 CPU 资源,这应该显示为信号等待。请参阅我对您有关如何诊断是否是问题的问题的评论
广告 2)如果您正在等待锁定,最好通过比较sys.dm_os_wait_stats. 请参阅有关如何执行此操作的文章:
如果您看到 LCK_[Something] 的等待时间很长,请查询sys.dm_tran_locks以跟踪哪些对象被锁定。在您的情况下,我希望看到某种形式的 SCH-[Something]> 锁阻止您。
广告 3)诊断网络问题的最简单方法是首先在步骤 2 中查找 OLEDB 和 ASYNC_NETWORK_IO 等待(如果您等待网络很长时间,其中一个会出现)。如果这些等待时间很长,请使用xperf -on latencynetmon 或 wireshark 等网络监控程序来检查您的延迟。如果网络看起来很慢,这也可能是由于调用应用程序服务器对正在回收的连接的响应速度不够快所致。
| 归档时间: |
|
| 查看次数: |
9564 次 |
| 最近记录: |