InnoDB でのマスタースレッドは、さまざまなタスクをバックグラウンドで実行するスレッドです。これらのタスクは、そのほとんどがダーティーページのバッファープールからのフラッシュや、変更の挿入バッファーから適切なセカンダリインデックスへの書き込みなどの I/O 関連のタスクです。マスタースレッドは、これらのタスクを、サーバーの通常の動作に悪影響を与えない方法で実行しようとします。つまり、使用可能な空き I/O 帯域幅を推定し、自身のアクティビティーをチューニングしてこの空き容量を利用しようとします。従来より、InnoDB は、サーバーの合計 I/O 容量として 100 IOPs (1 秒あたりの入力/出力操作数) のハードコードされた値を使用してきました。
パラメータ innodb_io_capacity
は、InnoDB で使用できる全体的な I/O 容量を示します。このパラメータはほぼ、システムが 1 秒あたりに実行できる I/O 操作の数に設定するようにしてください。この値は、システム構成によって異なります。innodb_io_capacity
が設定されている場合、マスタースレッドは設定済みの値に基づいて、バックグラウンドタスクに使用できる I/O 帯域幅を推定します。この値を 100
に設定すると、従来の動作に戻ります。
innodb_io_capacity
の値は、100 以上の任意の数値に設定できます。デフォルト値は 200
であり、標準的な最新の I/O デバイスのパフォーマンスが MySQL の初期のころより向上していることを反映しています。通常、消費者レベルのストレージデバイス (最大 7200 RPM のハードドライブなど) には、以前のデフォルトである 100 近辺の値が適しています。より高速なハードドライブ、RAID 構成、および SSD は、値を大きくするとメリットがあります。
innodb_io_capacity
設定は、すべてのバッファープールインスタンスに対する合計の制限です。ダーティーページがフラッシュされるとき、innodb_io_capacity
制限は、バッファープールインスタンス間で均等に分割されます。詳細は、innodb_io_capacity
システム変数の説明を参照してください。
このパラメータの値は MySQL オプションファイル (my.cnf
または my.ini
) で設定するか、あるいは SET GLOBAL
コマンド (これには SUPER
権限が必要です) で動的に変更できます。
以前、InnoDB
マスタースレッドは、必要なパージ操作もすべて実行していました。MySQL 5.6.5 以降では、これらの I/O 操作はほかのバックグラウンドスレッドに移行され、そのスレッドの数は innodb_purge_threads
構成オプションによって制御されます。
InnoDB の I/O パフォーマンスの詳細は、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。