运行在SSMS下面简单的查询来完成:SQL Server 2008中 - 查询需要永远即使工作实际上做
UPDATE tblEntityAddress SET strPostCode = REPLACE(strPostCode,””, '')
数据更新(至少在内存中)在一分钟内完成。我通过执行另一个事务隔离级别未读的查询来验证这一点。但是,更新查询会继续运行另外30分钟。这里有什么问题?这是由延迟写入磁盘造成的吗?
TIA
运行在SSMS下面简单的查询来完成:SQL Server 2008中 - 查询需要永远即使工作实际上做
UPDATE tblEntityAddress SET strPostCode = REPLACE(strPostCode,””, '')
数据更新(至少在内存中)在一分钟内完成。我通过执行另一个事务隔离级别未读的查询来验证这一点。但是,更新查询会继续运行另外30分钟。这里有什么问题?这是由延迟写入磁盘造成的吗?
TIA
最可能的是,你的交易是由影响tblEntityAddress
另一个事务锁定。
运行sp_lock
并查看tblEntityAddress
是否被另一个进程锁定。
在一个单独的窗口SSMS,尝试运行以下:
SELECT status, wait_type
FROM sys.dm_exec_requests
WHERE session_id = <SPID>
与您的UPDATE查询(在底部栏的登录名后括号中的数字)相关联的SPID刚刚更换。
连续运行上面的几次,并注意wait_type是什么。有很多类型的等待 - 看看是什么(让我们知道),它可以突出原因。
更新:从this MS KB article 行情:
IO_COMPLETION
此waittype指示SPID 正在等待I/O请求 完成。当你发现在 sysprocesses系统表这个 的waittype用于SPID,您必须 使用 性能监视器计数器, 探查器跟踪,在 fn_virtualfilestats系统 表值函数,和 SHOWPLAN选项识别磁盘瓶颈分析对应于SPID的查询 计划。您可以通过增加 附加I/O带宽或平衡其他驱动器上的I/O来减少此等待类型。你也可以用 通过索引来减少I/O,寻找 坏的查询计划,并寻找内存 的压力。
已经做到了这一点。接收以下两个等待: IO_Completion PAGEIOLATCH_EX – Brian 2010-05-06 16:23:43
望着日志,我看到这样的错误: SQL服务器遇到2336周的出现需要更长的时间超过15秒...... 很多这些I/O请求的是tempdb中。这可能是由自动增长设置为1 MB引起的?可能是 – Brian 2010-05-06 16:43:47
。 1mb是一个非常低的积分(并且大多数dba的都会因为自动增长而对你大叫)。在数据库上右键单击并转到报告,然后单击“磁盘使用情况报告”。在这个报告中有一个关于自动增长/缩小事件的部分。用这个来看看你是否收到了很多这些事件。 – DForck42 2010-05-07 15:22:28
这已得到纠正(我同意自动增长,不幸的是,较高的不同意见)。问题依然存在。 – Brian 2010-05-10 17:26:06