2010-05-06 39 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