
我有一個查詢花費的時間比平時要長得多,而且我無法判斷它是否被卡住了。
查詢是這樣的:
INSERT XXXXXX WITH (TABLOCK)
SELECT * FROM YYYYYY with (NOLOCK)
WHERE ZZZZZZZZ = 1
這將插入數億行。我有一個關於 ZZZZZZZZ 的索引。
沒有阻塞會話。當我檢查 sys.dm_exec_requests 時,它顯示最後一個等待類型是PAGEIOLATCH_SH 我不確定這意味著什麼,但它與 I/O 有關。
sys.dm_exec_sessions 顯示狀態為 RUNNING,但 sp_who2 將其顯示為 SUSPENDED。
我試圖查看表是否在增長,但是當我調用 sp_spaceused XXXXXX 時,我不斷獲得相同的值。
我還可以做些什麼?
更新:
在答案的幫助下堆疊溢位,我發現有I/O 問題,我的查詢平均每分鐘插入約 600 筆記錄)。
我下一步要做什麼?
在我開始假設我的磁碟壞了之前我能做什麼?
答案1
查詢正在運行,PAGEIOLATCH_SH 在執行大量插入時是典型的,因為它是在磁碟子系統上的等待。該索引實際上會阻礙效能,因為每次向表中插入時索引都會獲得一次插入。
幾百百萬筆記錄很多,需要一些時間,運行了多久?
答案2
如果您使用的是 2005 或 2008,我肯定會執行 SQL MVP Adam Mechanic 開發的 sp_whoisactive 腳本。它基本上是 sp_who/sp_who2 的類固醇,應該為您提供所需的所有資訊。