SQL Server 2008 SP3
如何追踪这些超时错误?
这些错误显示在专门用于 IIS 中的错误报告的 Intranet 仪表板上。我怀疑 Web 应用程序中的默认超时时间为 30 秒,如果查询时间超过 30 秒,则会引发异常。由于这些 SQL 服务器上有许多查询时间超过 30 秒,因此我不能只根据持续时间在探查器中进行过滤。
为受此仪表板监控的网站提供服务的是两台 IIS 服务器,它们从七个 SQL Server 实例中检索数据。
我可以使用“用户错误消息事件”和“OLEDB 错误事件”来跟踪 SQL Server Profiler 中的这些错误吗?
Aaron Bertrand 的评论让我走上了正轨
使用 tsql_duration 配置文件模板创建了服务器端跟踪
添加了用户错误消息事件
添加了以下过滤器
错误 <> 0
错误 <> 1
严重性 <> 10
这避免了捕获USE DATABASE命令
探查器捕获的错误消息是 2 - Abort 并且事件类是 10 RPC:Completed。
您可以利用事件探查器中的注意事件来捕获 T-SQL 语句。当我测试它时,它不一定具体说明注意事件是什么,所以我猜它遵循事件序列的事实,您可以估计那些有问题的查询。我没有机会用代码和所有东西对其进行全面测试。
然而,我确实遇到了一个可用于查找超时查询的扩展事件的确切示例,此示例使用 SQL Server 2008。它来自 Jonathan Kehayias:每天的 XEvent (9 of 31) – Targets Week – pair_matching
超时错误是客户端的,错误来自与数据库连接一起使用的提供者(或客户端)。SQL Server 不一定会跟踪或提供任何直观的方法来跟踪这些。
使用跟踪,SQL Server 端的超时基本上是有开始但没有完成的查询。我遇到了一个非常好的视频,其中介绍了 Sean McCown使用 Profiler 查找查询超时的示例。现在这不是确凿的证据,因为肖恩在视频中指出,还有其他可能导致交易没有结束的事情。
步骤概要:
SP:Starting
正如(44) 和(43)视频中的示例,SP:Completed
一旦您将跟踪数据放入表中:我希望使用扩展事件可能更容易做到这一点,但从未尝试将此方法转移到扩展事件。我不确定 SQL Server 2008 的扩展事件版本是否像 2012 及更高版本一样开放了对客户端级别错误的访问。以上只是一种仍然有效的快速而肮脏的方法。
你也在检查阻塞吗?
阻塞肯定会导致超时,并且可以很容易地跟踪。与块无关的超时还有其他问题。30 秒超时是常见的客户端设置,但可以通过命令对象控制。如果将其设置为 0,则连接不会超时。
要使用事件通知和服务代理设置阻塞监控,请阅读 Tony Rogerson 的帖子:
http://sqlblogcasts.com/blogs/tonyrogerson/archive/2007/04/06/event-notifications-monitoring-blocked-processes-and-other-events-end-to-end-how-to-set-it- up-and-make-it-work.aspx
在他的示例中,他监视 10 秒或更长时间的块(并且对于每个周期增量,20、30、40 秒等)我每 25 秒监视一次,这使我可以接近超时查看正在运行的内容. 阻塞进程和阻塞进程都将显示在块的 XML 描述中。
将信息保存在表格中还可以提供您可以随时间查看的历史记录。