我无法想出这个。在SQL Server上,我有一个每秒运行几十次的进程(数据被发送到服务器)。该过程运行良好,处理请求需要50ms到200ms。然后,大约(但偶尔)每1.5分钟一次,所有请求突然需要15000ms到22000ms(15到22秒)。与此同时,服务器上的CPU使用率急剧下降。有时(大约70%的时间)平均磁盘队列长度在cpu下降和请求减慢之前出现峰值。
我正在观看perfmon上的CPU,它通常会在20%到70%之间跳跃,平均CPU约为50%。当事情停止时,它会下降到0%,并有20%的尖峰,持续约20秒。
同时我正在观看SQL活动监视器。通常列出1到4个EXECUTE事务,但是当发生这种情况时,EXECUTE事务开始上升到20或30个事务。交易即将进入,但不是流程。
我检查了块,但从未看到任何块:
Select A.*
From master.dbo.sysprocesses as A with (nolock)
Where A.blocked <> 0
请注意,我正在“快照隔离”
中运行我有系统记录错误日志的死锁条件,没有报告。
我检查了SQL代理程序以查找正在运行的其他进程,没有在这些事件发生时进行调度。
我观看SQL Profiler以了解其他活动,没有任何内容。我还观看了文件增长事件,它没有报告任何内容。
即使请求花费20000毫秒,SQL事件探查器报告读取2000以及CPU低于50.流程本身似乎不消耗资源。然而,注销事件报告高读取和CPU(我不确定这是否完全相关)。
在这些事件发生时我的事件日志中也没有任何内容。
有什么想法吗?还有其他地方可以看吗?
在Window 2003 32bit上运行SQL Server 2005 Standard。
答案 0 :(得分:2)
您是否检查过驱动器是否有错误?听起来好像有些事情正在发生。如果是RAID阵列,请检查阵列的运行状况。
答案 1 :(得分:1)
问题是自动检查点。当SQL Server运行自动检查点时,其他事务会延迟,这可能与检查点中涉及的磁盘i / o有关。
显示waittype WRITELOG(等待时间0)的dm_exec_requests表示请求已提交事务并正在等待日志加固(写入磁盘) --Remus Rusanu
为了验证这一点,我打开了检查点日志记录,并在几个事件中记录了一个perfmon会话。然后我将日志与perfmon进行比较,看看事件总是与我的一个数据库中的检查点相关。
DBCC TRACEON(3502,-1) - 检查检查点记录
DBCC TRACEOFF(3502,-1) - 关闭检查点记录
EXEC xp_readerrorlog - 读取日志
SELECT DB_Name([dbid])as [Database Name] - 验证日志中提到的数据库ID
该特定数据库有一个生成大量插入和删除的进程。解决方案是重写该过程以减少记录的数据量。另一种选择是添加硬件。
感谢所有贡献者。
答案 2 :(得分:0)
您使用的是全文搜索吗?
我认为可能会偶尔会有一些索引重建。
也许尝试自动完全重建索引,或者更改为非聚簇索引?
答案 3 :(得分:0)
我会在你的perfmon中添加几个计数器,就像每秒读取和写入一样。从这里你可以看到它是否是一个I / O问题。另请查看此MSDN entry on SQL performance。它真的给了一些很好的想法,至少要检查一下。
答案 4 :(得分:0)
对于长时间运行的请求,sys.dm_exec_requests
的wait_type,wait_resource和wait_time是什么(定期采样)?这些请求是否产生子任务(sys.dm_os_tasks
)?那些任务在做什么?
答案 5 :(得分:0)
你检查过你的记忆消耗量吗? Windows Server 2003 R2有时基本上会在高负载下重新启动所有内存分配。发生这种情况时,SQL Server被强制降低到最小内存量(4MB左右),然后慢慢地将内存重新分配给服务器,直到它恢复到相对正常的水平。我们已经看到在跨SAN复制非常大的文件时会发生这种情况。我听说如果事务日志非常大并且服务器的使用率很高,则可以通过事务日志备份过程触发这一过程。
答案 6 :(得分:0)
这不是慢代码,因为延迟不会增加CPU时间。听起来好像服务器正在进行一次没有成功的阻塞调用,然后最终超时。你已经排除了僵局。如果是硬盘驱动器问题,您可能会在事件日志中看到一些内容。
尝试安装网络嗅探器,例如Wireshark,看看暂停开始时是否有任何有趣的事情发生。
答案 7 :(得分:0)
一个选项:统计更新。如果你经常写作,你可能会达到重新计算的门槛。
查看本文"Index Statistics on MSDN"和选项“AUTO_UPDATE_STATISTICS_ASYNC
”
虽然每90秒有点多......