MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
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
で、n
は InnoDB
バックグラウンドスレッドの数です。 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
によって検出された場合にも、起動時に自動的に無効になることがあります。