Sql-Server
ASYNC_IO_COMPLETION 和 IO_COMPLETION 等待類型有什麼區別?
有人可以解釋這兩種等待類型之間的主要區別是什麼嗎?
我認為你應該首先了解 Sync IO 和 Async IO 之間的區別。有關這兩個 I/O 的基本性質的資訊可以在Bob Dorr 的 I/O 展示部落格中找到,請參閱 Async 與 Sync IO 部分。
非常簡單的意思是非同步IO是在提出I/O請求後,程序或呼叫程式碼不會等待I/O操作完成而是忙於其他任務,稍後它可以來檢查是否I/O 請求是否已完成。同樣,對於同步 IO,呼叫程式碼將等待確認 I/O 請求已完成。引自 Bob Dorr 的部落格
在 Windows 中,I/O API 允許同步和非同步請求。同步請求是對 API 的呼叫,例如 WriteFile,在操作完成之前不會將控制權返回給呼叫程式碼。非同步將請求交給作業系統和相關的驅動程序,並將控制權返回給呼叫程式碼。呼叫程式碼可以自由地執行其他邏輯,然後再回來查看 I/O 是否/何時完成。
SQL Server 主要使用非同步 I/O 模式。這允許 SQL Server 寫入或讀取頁面,然後繼續有效地使用 CPU 和其他資源。以大型排序操作為例。SQL Server 可以使用其預讀邏輯來發布(非同步請求)許多頁面,然後開始處理請求返回的第一頁。這允許 SQL Server 使用 CPU 資源對頁面上的行進行排序,而 I/O 子系統同時在其他頁面中獲取(讀取)。最大化 I/O 頻寬並更有效地使用 CPU 等其他資源。
現在這裡的等待時間表示等待 Async/Sync IO 請求完成所花費的時間。