诊断存储的Proc争用

时间:2014-08-29 05:43:44

标签: sql sql-server sql-server-2008 sql-server-2012

我们的产品有一些复杂的存储过程,它们利用(MSSQL2008r2 / 2012)CTE和/或临时表/表变量来计算菜单或级联权限结构,以便使用该系统。

我们已经注意到,通过SQL分析器,有些时候程序可能需要比正常情况多几个数量级的返回。我们想知道最佳行动原因是为了收集信息以确定什么是阻止/竞争。一个很好的例子是一个存储过程,如果我在查询分析器中手动运行它,需要222ms才能对实时数据库运行,但我们已经看到了9000ms和5000ms的时间。

如果没有详细讨论实际的sp,那么在Profiler中查看查询的持续时间很长时,如何开始识别哪些资源被阻止?

我已经看到了您可以运行哪些查询来诊断当前问题的建议,但在这种情况下,当我们不在场时发生争用可能会发生。理想情况下,SQL事件探查器跟踪似乎是理想的起点?我是否需要两个单独的探查器迹线,并在持续时间跟踪中看到较长的持续时间时比较两者?

1 个答案:

答案 0 :(得分:1)

作为追踪的替代方案,您是否考虑过延长事件? http://msdn.microsoft.com/en-gb/library/bb630282(v=sql.110).aspx

我阅读扩展事件的输出比跟踪输出更成功,有很多例子可以帮助你创建一个。

我个人用它来查找阻止:

https://www.sqlskills.com/blogs/jonathan/an-xevent-a-day-21-of-31-the-future-tracking-blocking-in-denali/