【发布时间】:2010-02-22 21:50:44
【问题描述】:
从几天前开始,支持我们网站的 SQL 服务器 (Microsoft SQL Server 2005) 开始偶尔超时。它大约每隔一两个小时就会在看似随机的时间发生。通常需要大约 10 分钟,在此期间我们会看到数百个超时请求。在正常情况下,我们的大部分查询时间都不到 50 毫秒。需要很长时间的查询是一个例外。
我实际上已经浪费了一天的时间来试图找出至少没有任何实际进展的东西。通常,服务器负载约为 10-20%,当发生超时时,我们看不到任何 CPU 负载增加。此外,在超时期间没有什么特别的事情发生;没有过分热心的网络爬虫,没有繁重的后台任务,没有增加的网络流量,没有增加的连接数等。简单地说,一切看起来都像往常一样。
没有取得任何进展,我们决定重新启动它(并安装最新的 SP),这似乎已经解决了问题。已经过去了六个多小时,没有任何意外。此外,CPU 负载下降了 10% 以下。
SQL 服务器似乎超时“恶化”。也许,某些内部结构(某些缓存或统计信息)变形并导致偶尔出现问题。我没有其他解释。
我在监视服务器时唯一注意到的一件事(幸运的是,有一次在发生超时时在场),我看到几个长时间运行的查询在 CXPACKET 上等待。但我了解到,这很可能只是其他问题的结果。我写了一个脚本监控 SQL 请求,所以希望下次发生这种情况时,我会得到更多信息。
有没有人有过类似的经历?我不是 SQL Server 专家。欢迎提出任何建议。
【问题讨论】:
-
我刚刚投票决定将此移至 serverfault - 优秀的 DBA 或服务器管理员应该能够帮助解决此问题。也就是说 - 您是否查看过服务器上运行的事务(任何打开的序列化事务?)您是否使用 sp_lock 和 sp_who 查看锁和进程,看看它是否是一个锁定问题?当问题再次发生时,您是否让分析器在系统上运行以提供更多信息?
-
我写的脚本主要监控 sys.dm_exec_requests 和 sys.dm_exec_sessions 并寻找阻塞请求。但是,只是在我们重新启动服务器之后,它似乎不会再次发生。之前尝试过使用Activity Monitor,但是太慢了,太麻烦了。