構成オプション innodb_flush_neighbors
および innodb_lru_scan_depth
を使用すると、InnoDB
バッファープールに対するフラッシュプロセスの特定の側面を微調整できます。これらのオプションは主に、書き込みの多いワークロードに役立ちます。負荷の高い DML アクティビティーでは、それが十分に積極的でないとフラッシュが遅延して、バッファープールで過剰なメモリーが使用される場合があります。または、そのメカニズムが積極的すぎると、フラッシュによるディスク書き込みによって I/O 容量が飽和する場合があります。理想的な設定は、ワークロード、データのアクセスパターン、およびストレージ構成 (たとえば、データが HDD または SSD デバイスのどちらに格納されているか) によって異なります。
ワークロードの負荷が常時高いシステム、またはワークロードが大幅に変動するシステムでは、複数の構成オプション innodb_adaptive_flushing_lwm
、innodb_max_dirty_pages_pct_lwm
、innodb_io_capacity_max
、および innodb_flushing_avg_loops
を使用して InnoDB
テーブルに対するフラッシュ動作を微調整できます。これらのオプションは、innodb_adaptive_flushing
オプションによって使用される計算式に入力されます。
innodb_adaptive_flushing
、innodb_io_capacity
、および innodb_max_dirty_pages_pct
オプションは、次のオプション innodb_adaptive_flushing_lwm
、innodb_io_capacity_max
、および innodb_max_dirty_pages_pct_lwm
によって制限または拡張されます。
InnoDB
適応型フラッシュメカニズムは、すべての場合に適切なわけではありません。これがもっとも大きな利点をもたらすのは、Redo ログがいっぱいになるおそれがある場合です。innodb_adaptive_flushing_lwm
オプションは、Redo ログ容量の「低位境界値」の割合 (%) を指定します。そのしきい値を超えると、InnoDB
は、innodb_adaptive_flushing
オプションで指定されていない場合でも適応型フラッシュを有効にします。フラッシュアクティビティーが大幅に遅延した場合、
InnoDB
は、innodb_io_capacity
で指定されているより積極的にフラッシュできます。innodb_io_capacity_max
は、I/O のスパイクによってサーバーのすべての容量が消費されてしまわないように、このような緊急の状況で使用される I/O 容量の上限を表します。-
InnoDB
は、ダーティーページの割合 (%) がinnodb_max_dirty_pages_pct
の値を超えないように、バッファープールからデータをフラッシュしようとします。innodb_max_dirty_pages_pct
のデフォルト値は 75 です。注記innodb_max_dirty_pages_pct
設定は、フラッシュアクティビティーのターゲットを確立します。フラッシュの頻度には影響を与えません。フラッシュの頻度の管理については、セクション14.13.1.2「InnoDB バッファープールのフラッシュの頻度の構成」を参照してください。innodb_max_dirty_pages_pct_lwm
オプションは、ダーティーページの比率を制御するために事前フラッシュを有効にし、理想的にはダーティーページの割合 (%) がinnodb_max_dirty_pages_pct
に達しないようにするダーティーページの割合 (%) を表す、「低位境界値」の値を指定します。innodb_max_dirty_pages_pct_lwm=0
の値を指定すると、「事前フラッシュ」動作が無効になります。
上で参照されたオプションのほとんどは、書き込み負荷の高いワークロードを長期間にわたって実行しており、ディスクへの書き込みを待機している変更に追い付くためにロード時間の削減がほとんどないサーバーにもっとも適しています。
innodb_flushing_avg_loops
は、InnoDB
が以前に計算されたフラッシュ状態のスナップショットを保持する反復の数を定義します。これは、適応型フラッシュがフォアグラウンドの負荷の変化にどれだけすばやく応答するかを制御します。innodb_flushing_avg_loops
に大きな値を設定すると、InnoDB
が以前に計算されたスナップショットをより長く保持するため、適応型フラッシュはよりゆっくり応答します。大きな値ではまた、フォアグラウンド作業とバックグラウンド作業の間の正のフィードバックも削減されますが、大きな値を設定する場合は、InnoDB
の Redo ログの使用率が 75% (非同期のフラッシュが開始されるハードコードされた制限) に達しないようにすること、および innodb_max_dirty_pages_pct
設定によってダーティーページの数がそのワークロードに適したレベルに維持されるようにすることが重要です。
ワークロードに一貫性があり、innodb_log_file_size
が大きく、かつスパイクが小さいために Redo ログ領域の使用率が 75% に達しないシステムでは、フラッシュをできるだけ滑らかな状態に維持するために大きな innodb_flushing_avg_loops
値を使用するようにしてください。負荷のスパイクが極端なシステム、またはログファイルでは多くの領域が提供されないシステムでは、より小さな innodb_flushing_avg_loops
値を検討してください。この値を小さくすると、フラッシュで負荷を密接に追跡できるため、Redo ログ領域の使用率が 75% に達しないようにするのに役立ちます。