文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  在 Linux 上使用非同步 I/O

17.8.6 在 Linux 上使用非同步 I/O

InnoDB 在 Linux 上使用非同步 I/O 子系統 (原生 AIO) 來執行資料檔案頁面的預讀和寫入請求。此行為由 innodb_use_native_aio 設定選項控制,此選項僅適用於 Linux 系統,並且預設啟用。在其他類 Unix 系統上,InnoDB 僅使用同步 I/O。過去,InnoDB 僅在 Windows 系統上使用非同步 I/O。在 Linux 上使用非同步 I/O 子系統需要 libaio 函式庫。

透過同步 I/O,查詢執行緒將 I/O 請求排隊,而 InnoDB 背景執行緒一次擷取一個排隊的請求,並為每個請求發出同步 I/O 呼叫。當 I/O 請求完成且 I/O 呼叫傳回時,處理請求的 InnoDB 背景執行緒會呼叫 I/O 完成常式,並返回處理下一個請求。可以平行處理的請求數量是 n,其中 nInnoDB 背景執行緒的數量。InnoDB 背景執行緒的數量由 innodb_read_io_threadsinnodb_write_io_threads 控制。請參閱 第 17.8.5 節,〈設定背景 InnoDB I/O 執行緒的數量〉

透過原生 AIO,查詢執行緒會直接將 I/O 請求分派到作業系統,從而消除背景執行緒數量所施加的限制。InnoDB 背景執行緒會等待 I/O 事件以表示已完成的請求。當請求完成時,背景執行緒會呼叫 I/O 完成常式,並繼續等待 I/O 事件。

原生 AIO 的優勢是針對大量 I/O 繫結的系統的可擴展性,這些系統通常在 SHOW ENGINE INNODB STATUS 輸出中顯示許多擱置的讀取和寫入。使用原生 AIO 時平行處理的增加表示 I/O 排程器的類型或磁碟陣列控制器的屬性對 I/O 效能有更大的影響。

對於大量 I/O 繫結的系統,原生 AIO 的一個潛在缺點是無法控制一次分派到作業系統的 I/O 寫入請求的數量。根據 I/O 活動和系統功能,在某些情況下,分派到作業系統以進行平行處理的 I/O 寫入請求太多可能會導致 I/O 讀取匱乏。

如果作業系統中非同步 I/O 子系統的問題阻止 InnoDB 啟動,您可以使用 innodb_use_native_aio=0 啟動伺服器。如果 InnoDB 偵測到潛在問題(例如 tmpdir 位置、tmpfs 檔案系統和 Linux 核心的組合不支援 tmpfs 上的非同步 I/O),此選項也可能會在啟動期間自動停用。