標籤:區別 包含 同步 出現 blog 寫入 .com eager www
原文:SQL Server中與IO相關的等待類型:IO_COMPLETION和PAGEIOLATCH_*
一個大的SQL語句操作,執行計畫中包含了一個merge join操作,觀察到SQL長時間處於IO_COMPLETION等待狀態,如果是讀取相關的表的資料,伺服器應該全力為其服務,但是伺服器的物理IO又遠遠沒有達到瓶頸。
這個IO_COMPLETION到底是在做什嗎?是表的資料頁IO請求還在其他動作?如果是,跟PAGEIOLATCH_*是什麼區別?如果不是,又是什麼類型的操作?
IO_COMPLETION 這種等待類型表示資料檔案中的各種同步讀和寫操作,這些操作與表無關,並且從交易記錄中讀取。
在等待I/O操作完成時發生。這種等待類型通常表示非資料頁I/O。資料頁I/O完成等待作為PAGEIOLATCH_*等待出現。
IO_COMPLETION與PAGEIOLATCH_*的最大的區別是就在於IO_COMPLETION是非資料頁的等待,而PAGEIOLATCH_*是資料頁的IO等待
IO_COMPLETION這種等待類型表示資料檔案中的各種同步讀和寫操作,這些操作與表無關,並且從交易記錄中讀取。
包括以下幾種情境:
1.從交易記錄中讀取日誌塊(在導致從磁碟讀取日誌的任何操作期間——例如恢複)
2.在很多操作中,例如恢複、DB啟動、恢複期間從磁碟讀取分配位元影像(例如GAM、SGAM、PFS頁)
3.將中間排序緩衝區寫入磁碟(稱為“Bobs”)
4.在merge join期間,向磁碟寫入或者讀取磁碟中的merge join的結果
5.讀寫eager spools(資料緩衝到磁碟的一種行為)到磁碟
6.從交易記錄中讀取VLF頭資訊。
參考:https://www.sqlskills.com/help/waits/io_completion/
SQL Server中與IO相關的等待類型:IO_COMPLETION和PAGEIOLATCH_*