2010-05-06 41 views
2

运行在SSMS下面简单的查询来完成:SQL Server 2008中 - 查询需要永远即使工作实际上做

UPDATE tblEntityAddress SET strPostCode = REPLACE(strPostCode,””, '')

数据更新(至少在内存中)在一分钟内完成。我通过执行另一个事务隔离级别未读的查询来验证这一点。但是,更新查询会继续运行另外30分钟。这里有什么问题?这是由延迟写入磁盘造成的吗?

TIA

+0

望着日志,我看到这样的错误: SQL服务器遇到2336周的出现需要更长的时间超过15秒...... 很多这些I/O请求的是tempdb中。这可能是由自动增长设置为1 MB引起的?可能是 – Brian 2010-05-06 16:43:47

+0

。 1mb是一个非常低的积分(并且大多数dba的都会因为自动增长而对你大叫)。在数据库上右键单击并转到报告,然后单击“磁盘使用情况报告”。在这个报告中有一个关于自动增长/缩小事件的部分。用这个来看看你是否收到了很多这些事件。 – DForck42 2010-05-07 15:22:28

+0

这已得到纠正(我同意自动增长,不幸的是,较高的不同意见)。问题依然存在。 – Brian 2010-05-10 17:26:06

回答

2

最可能的是,你的交易是由影响tblEntityAddress另一个事务锁定。

运行sp_lock并查看tblEntityAddress是否被另一个进程锁定。

+0

从更新中只创建了锁 – Brian 2010-05-06 16:20:07

+0

看到我对这个问题的评论,上面的 – Brian 2010-05-06 16:44:11

+0

@Brian:看来你确实对磁盘子系统有问题。看到这里:http://stackoverflow.com/questions/620626/what-is-pageiolatch-sh-wait-type-in​​-sql-server – Quassnoi 2010-05-06 16:48:09

2

在一个单独的窗口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,寻找 坏的查询计划,并寻找内存 的压力。

+0

已经做到了这一点。接收以下两个等待: IO_Completion PAGEIOLATCH_EX – Brian 2010-05-06 16:23:43

0

要考虑的另一件事是缓慢运行的触发器。

+0

不涉及任何触发器。 – Brian 2010-05-06 17:24:23