運行在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