Skip to main content
Enterprise applications
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

innodb_flush_log_at_trx_commit

共同作成者

データに変更があっても、変更はすぐにはストレージに書き込まれません。

代わりに、データはログバッファに記録されます。これは、InnoDBがログファイルに記録されるバッファ変更に割り当てるメモリの一部です。InnoDBは、トランザクションがコミットされたとき、バッファがいっぱいになったとき、または1秒に1回のイベントが発生したときに、バッファをログファイルにフラッシュします。このプロセスを制御する構成変数は、Innodb_flush_log_at_trx_commitです。値オプションには次のものがあります。

  • 設定時 `innodb_flush_log_trx_at_commit=0`では、(InnoDBバッファプール内の)変更されたデータがログファイル(ib_logfile)に書き込まれ、ログファイルが1秒ごとにフラッシュされます(ストレージへの書き込み)。ただし、トランザクションがコミットされても何も実行されません。停電またはシステムクラッシュが発生した場合、フラッシュされていないデータはログファイルまたはドライブに書き込まれないため、リカバリできません。

  • 設定時 `innodb_flush_log_trx_commit=1`InnoDBはログバッファをトランザクションログに書き込み、トランザクションごとに永続的なストレージにフラッシュします。たとえば、すべてのトランザクションコミットについて、InnoDBはログに書き込み、その後ストレージに書き込みます。ストレージの速度が遅いと、パフォーマンスが低下します。たとえば、1秒あたりのInnoDBトランザクション数が減少します。

  • 設定時 `innodb_flush_log_trx_commit=2`InnoDBはコミットのたびにログバッファをログファイルに書き込みますが、ストレージにデータを書き込むことはありません。InnoDBは、1秒に1回データをフラッシュします。停電やシステムクラッシュが発生した場合でも、オプション2のデータはログファイルに保存され、リカバリ可能です。

パフォーマンスが主な目標である場合は、値を2に設定します。InnoDBは、トランザクションコミットごとではなく、1秒に1回ドライブに書き込みを行うため、パフォーマンスが大幅に向上します。停電やクラッシュが発生した場合は、トランザクションログからデータをリカバリできます。

データの安全性が主な目的である場合は、トランザクションコミットごとにInnoDBがドライブにフラッシュされるように、値を1に設定します。ただし、パフォーマンスに影響する可能性があります。

ヒント * NetAppでは、パフォーマンスを向上させるために、innodb_flush_log_trx_commit値を2に設定することを推奨しています。