SQL Server停止处理20秒

时间:2009-12-15 21:52:32

标签: sql sql-server-2005 transactions cpu

我无法想出这个。在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。

8 个答案:

答案 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秒有点多......