2017-10-18 89 views
0

我在SQL Server 2008 R2中有一個非常複雜的存儲過程,它將大量數據插入到數據庫的多個表中。SQL Server存儲過程一直在等待「等待命令」

此過程的副本在其他幾臺服務器上運行良好。我通常在服務器代理中使用一個作業來運行該過程,但是當我在我的開發服務器上執行此操作時,作業失敗,在日誌中顯示代碼片段,但其他內容很少。

當我在作業之外執行存儲過程時,活動監視器顯示處理爲任務狀態:「暫停」,命令:「等待命令」和waittype在「IO_Completion」,「PAGEIOLatch_SH」和空白之間交替。

This page表明可能有內存分配的問題,但磁盤上仍有9gb寫入數據和日誌(數量不多,但應該足夠了)。

有沒有人知道等待類型IO_Completion在執行存儲過程的上下文中意味着什麼?

+0

您已詢問X,Y問題。如果你發佈了proc和錯誤,你將有更好的機會得到你的* actual *問題的答案。 – scsimon

+1

[PAGEIOLATCH_SH](https://www.sqlskills.com/help/waits/pageiolatch_sh/)通常是等待數據頁從磁盤或內存中讀取的系統。 [IO_COMPLETION](https://www.sqlskills.com/help/waits/io_completion/)通常是等待從磁盤或內存中讀取非數據頁面的系統。這不一定表明問題是IO,但是,因爲*大部分* SQL Server操作都是IO綁定的。如果你真的想挖掘它,你可以從這裏開始(https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/),但它可能是一隻紅鯡魚。 –

+1

不知道你的開發系統的配置,真的很難說這個問題是什麼。這聽起來像是你已經將日誌和數據文件都放在同一個磁盤上了,如果你還沒有預先生成文件,這不會對大插入有幫助。如果你的開發系統沒有太多的內存,這可能是內存耗盡的問題。它也可能是tempdb爭用,因爲這是SQL Server在需要臨時空間時使用的。 –

回答

0

當我取消正在運行的存儲過程時,它確實打印了一個容易解決的錯誤。看起來,內存不足導致服務器無法正確返回錯誤,導致它陷入「等待命令」等待狀態。