是否记录 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 超时