MySQLパフォーマンス標準ルール

ここでは、MySQLパフォーマンス標準コンプライアンス・ルールについて情報を示します。

InnoDBのフラッシュ方法が最適でない場合がある

説明: innodb_flush_methodの値を変えるとInnoDBのパフォーマンスに顕著な影響が出る可能性があります。GNU/LinuxおよびUNIXのいくつかのバージョンでは、fsync()の呼出し(InnoDBではデフォルトでこれが使用される)や別の似た方法によってファイルをディスクにフラッシュする場合は、それが非常に遅くなる可能性があります。データベースの書込みパフォーマンスに満足できない場合は、innodb_flush_methodパラメータをO_DIRECTまたはO_DSYNCに設定してみてください。

重大度: マイナー警告

アドバイス: アプリケーション、オペレーティング・システムおよびストレージ環境に基づいてinnodb_flush_method変数の設定を確認します。それは現在は%flush_method%に設定されています。多くの場合、デフォルト(fdatasync)が最適です。O_DIRECTはI/Oに適している可能性があります(特に、"ローカル・ファイルシステム"内。これにより二重書込みバッファリングも回避されるため)。しかしながら、O_DIRECTはネットワーク接続ストレージ(SAN/NFSなど)には適していません。O_DSYNCにした場合は、デフォルトのfdatasyncよりもオーバーヘッドが増える可能性があり、多くの種類のUnixでそれに関して問題が発生しています。しかしながら、1人以上のユーザーが、NetBSDでO_DSYNCを使用すると非常に大きな違いがあると報告しています。

InnoDBログ・バッファがトランザクション後毎回ディスクにフラッシュされる

説明: デフォルトでは、InnoDBのログ・バッファはトランザクションのコミットごとにログ・ファイルに書き出され、ディスクへのへのフラッシュの操作がそのログ・ファイルに対して実行されます。それにより、強制的にACIDに準拠するようになります。クラッシュ発生時にトランザクションの1秒分を失っても差し支えない場合は、innodb_flush_log_at_trx_commitを0か2に設定することでパフォーマンス向上を実現できます。この値を2に設定した場合は、オペレーティング・システムのクラッシュや停電が発生したときのみ、トランザクションの最後1秒分が消去される可能性があります。これは、必要に応じて1秒分のデータの損失をソース・サーバーからリカバリできる、レプリカ・サーバーで非常に役立つ可能性があります。

重大度: マイナー警告

アドバイス: MySQL構成ファイル(my.cnf)内でinnodb_flush_log_at_trx_commit=2を設定し、MySQLサーバーを再起動します。警告: ACID準拠のためには値1にする必要があります。この値を2に設定した場合は、オペレーティング・システムのクラッシュや停電が発生すると、トランザクションの最後1秒分が消去される可能性があります。しかしながら、これはアプリケーションや環境にとって重要ではない場合があります。ただし、それは特に、これがレプリカ・サーバーであり、1秒分のデータの損失をソース・サーバーからリカバリできる場合です。