是否记录 SQL Server 超时?

Posted

技术标签:

【中文标题】是否记录 SQL Server 超时?【英文标题】:Are SQL Server timeouts logged? 【发布时间】:2010-09-22 15:47:13 【问题描述】:

SQL Server 超时(尤其是 SELECT 查询)是否记录在 ERRORLOG 文件中?

背景是一个客户,其网站偶尔会出现“请求超时”消息,假设超时是由数据库超时引起的。相关的 ERRORLOG 中没有超时错误。

【问题讨论】:

【参考方案1】:

没有。您将需要使用 SQL Profiler。带有 Lock Timeout 事件和 Deadlock Graph 事件的标准跟踪应该可以做到这一点。

Lock:Timeout Event Class

Deadlock Graph Event Class

除了硬件(例如足够的 RAM 和快速驱动器,以及在适当的 RAID 配置上适当放置数据和日志文件)之外,大多数超时都是由于您的工作负载没有足够“好”的索引集引起的。

您是否有定期安排索引维护计划?

【讨论】:

谢谢您,我已经设置了跟踪... 正如我所说,如果让探查器跟踪运行一段时间,可能会导致性能问题。当然取决于您的系统负载。 正确设置的跟踪应大致消耗少于 5% 的 CPU 和资源。这篇文章将向您展示如何:***.com/questions/257906/…【参考方案2】:

SQL Server 超时由客户端启动作为注意事件,并且不会记录在 SQL Server 错误日志中。

您可以使用以下方法监控注意事件:

SQL Server Profiler DMVsys.dm_os_ring_buffers

【讨论】:

【参考方案3】:

您还可以使用在超时和死锁事件时引发的事件通知。触发后,您可以将其写入表格或给自己发送电子邮件。

我在这里展示了一般技术:

Immediate deadlock notifications without changing existing code ?

2008 年 7 月 18 日

这样您就不必运行 Profiler;这会影响性能。

【讨论】:

以上是关于是否记录 SQL Server 超时?的主要内容,如果未能解决你的问题,请参考以下文章

调用 SQL Server 存储过程的 SqlCommand 超时

Access 2010 和 SQL Server 2008 R2 错误 3157 超时

SQL Server 如何查询最后一条记录

SQL Server 2008 中的错误日志记录

SQL Server使用sp_spaceused查看表记录存在不准确的情况

是否可以在 Microsoft SQL Server 上为 SQL 查询设置超时?