MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  Linux での非同期 I/O の使用

15.8.6 Linux での非同期 I/O の使用

InnoDB は、Linux で非同期 I/O サブシステム (ネイティブ AIO) を使用して、データファイルページの先読みおよび書込みリクエストを実行します。 この動作は、Linux システムにのみ適用され、デフォルトで有効になっている innodb_use_native_aio 構成オプションによって制御されます。 他の Unix に似たシステムでは、InnoDB は同期 I/O のみを使用します。 従来、InnoDB では、Windows システムで非同期 I/O のみが使用されていました。 Linux で非同期 I/O サブシステムを使用するには、libaio ライブラリが必要です。

同期 I/O,クエリースレッドは I/O リクエストをキューに入れ、InnoDB バックグラウンドスレッドはキューに入れられたリクエストを一度に 1 つずつ取得し、それぞれに対して同期 I/O コールを発行します。 I/O リクエストが完了し、I/O コールが返されると、リクエストを処理している InnoDB バックグラウンドスレッドは I/O 完了ルーチンをコールし、次のリクエストを処理するために戻ります。 パラレルに処理できるリクエストの数は n で、nInnoDB バックグラウンドスレッドの数です。 InnoDB バックグラウンドスレッドの数は、innodb_read_io_threads および innodb_write_io_threads によって制御されます。 セクション15.8.5「InnoDB バックグラウンド I/O スレッドの数の構成」を参照してください。

ネイティブ AIO では、クエリースレッドは I/O リクエストをオペレーティングシステムに直接ディスパッチするため、バックグラウンドスレッドの数によって課される制限は削除されます。 InnoDB バックグラウンドスレッドは、I/O イベントが完了したリクエストを通知するのを待機します。 リクエストが完了すると、バックグラウンドスレッドは I/O 完了ルーチンを呼び出し、I/O イベントの待機を再開します。

ネイティブ AIO の利点は、多くの保留中の読取り/書込みを SHOW ENGINE INNODB STATUS\G 出力に表示する I/O-bound システムのスケーラビリティです。 ネイティブ AIO を使用する場合の並列処理の増加は、I/O スケジューラのタイプまたはディスクアレイコントローラのプロパティーが I/O のパフォーマンスに大きく影響することを意味します。

大量の I/O-bound システムに対するネイティブ AIO の潜在的なデメリットは、オペレーティングシステムに一度にディスパッチされる I/O 書込みリクエストの数を制御できないことです。 パラレル処理のためにオペレーティングシステムにディスパッチされた I/O 書込みリクエストが多すぎると、I/O アクティビティおよびシステム機能の量に応じて、I/O 読取り文が発生する場合があります。

OS の非同期 I/O サブシステムに問題があるために InnoDB を起動できない場合は、innodb_use_native_aio=0 を使用してサーバーを起動できます。 このオプションは、tmpfs で非同期 I/O をサポートしていない tmpdir の場所、tmpfs ファイルシステム、Linux カーネルの組合せなどの潜在的な問題が InnoDB によって検出された場合にも、起動時に自動的に無効になることがあります。


関連キーワード:  InnoDB, テーブル, 構成, 圧縮, リクエスト, スペース, ロック, インデックス, INFORMATION, SCHEMA