InnoDB は、ディスク I/O で非同期 I/O を使用します。Windows NT では、オペレーティングシステムが提供するネイティブの非同期 I/O が使用されます。 Unix では、InnoDB に組み込まれた疑似的な非同期 I/O が使用されます。InnoDB は、多数の I/O スレッドを作成して、先読みなどの I/O 操作に対応します。将来のバージョンでは、Windows NT の疑似 aio、および Unix のネイティブ aio(装備されている場合)が追加でサポートされるようになります。
Windows NT では、InnoDB はバッファなしの I/O を使用します。つまり、InnoDB が読み書きするディスクページが、オペレーティングシステムのファイルキャッシュにバッファされません。これによって、メモリの使用帯域幅をある程度節約できます。
3.23.41 より、InnoDB
は二重書き込みと呼ばれる斬新なファイルフラッシュ技法を使用するようになりました。
この技法によって、オペレーティングシステムのクラッシュや停電後のリカバリがより安全になります。また、fsync
操作の必要性を軽減することで、ほとんどの
Unix フレーバでパフォーマンスが向上します。
二重書き込みでは、InnoDB がデータファイルにページを書き込む前に、まず二重書き込みバッファと呼ばれる隣接するテーブルスペースに、それらのページが書き込まれます。書き込みおよび二重書き込みバッファへのフラッシュが完了した後で初めて、InnoDB はデータファイルの適切な場所にページを書き込みます。このページへの書き込みの最中にオペレーティングシステムがクラッシュした場合は、InnoDB が二重書き込みバッファから適切なページのコピーを探し出してリカバリを行います。
3.23.41
よりローデバイスもデータファイルとして使用できるようになりましたが、このテストはまだ完了していません。新しいデータファイルを作成するときに、innodb_data_file_path
で指定したデータファイルサイズの直後に
newraw
キーワードを付加する必要があります。パーティションは、少なくとも指定したサイズと同じ大きさでなければなりません。
InnoDB での 1M は 1,024 x 1,024
バイトですが、通常のディスクの仕様では、1
MB は 1,000,000
バイトを意味することに注意してください。
innodb_data_file_path=/dev/hdd1:5Gnewraw;/dev/hdd2:2Gnewraw
サーバを再起動する前に、キーワードを
raw
に変更する必要があります。そうしないと
InnoDB がパーティションを上書きします。
innodb_data_file_path=/dev/hdd1:5Graw;/dev/hdd2:2Graw
Unix の一部のバージョンでは、ローデバイスを使用することで、バッファなしの I/O を実行できます。
ローデバイスを使用するときは、MySQL
サーバを実行する OS
のアカウントに、それらのパーティション(上記例では/dev/hdd1
)に対して読み書きできる権限があることを確認してください。
InnoDB には、先読み方法として、シーケンシャルな先読みとランダムな先読みの 2 種類があります。シーケンシャルな先読みでは、テーブルスペース内のセグメントへのアクセスパターンがシーケンシャルであることを InnoDB が検知します。 この場合 InnoDB は、一連のデータベースページの読み取りを事前に 1 つにまとめて I/O システムに送信します。ランダムな先読みでは、テーブルスペース内のある領域がバッファプールへ完全に読み取られている最中であることを InnoDB が検知します。この場合、InnoDB は残りの読み取りを I/O システムに送信します。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.