文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  在 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 檔案系統和不支援在 tmpfs 上進行非同步 I/O 的 Linux 核心的組合,此選項也可能在啟動期間自動停用。