軽量の予測可能な負荷のあるサーバーと、常時ほぼいっぱいの容量で実行していたり、高アクティビティーの急増が発生したりするサーバーとでは、もっとも適切に機能する設定が異なります。
InnoDB
ストレージエンジンは、多くの最適化を自動的に実行するため、多くのパフォーマンスチューニングタスクには、データベースが適切に実行していることを確認するためのモニタリングと、パフォーマンスの低下時の構成オプションの変更が含まれます。 詳細な InnoDB
のパフォーマンスモニタリングについては、セクション15.16「InnoDB の MySQL パフォーマンススキーマとの統合」を参照してください。
実行できる主な構成ステップは次のようになります。
InnoDB
が変更されたデータをバッファするデータ変更操作のタイプを制御して、小さいディスク書込みの頻度を回避します。 変更バッファリングの構成を参照してください。 デフォルトでは、すべてのタイプのデータ変更操作をバッファするため、バッファリングの量を減らす必要がある場合にのみ、この設定を変更します。innodb_adaptive_hash_index
オプションを使用して、アダプティブハッシュインデックス機能をオンまたはオフにします。 詳しくはセクション15.5.3「適応型ハッシュインデックス」をご覧ください。 異常なアクティビティーの間にこの設定を変更し、その後、その元の設定にリストアできます。コンテキストスイッチングがボトルネックである場合に、
InnoDB
が処理する同時スレッドの数に制限を設定します。 セクション15.8.4「InnoDB のスレッド並列性の構成」を参照してください。InnoDB
がその先読み操作で実行するプリフェッチの量を制御します。 システムに未使用の I/O 容量がある場合、先読みによってクエリーのパフォーマンスが向上することがあります。 先読みが多すぎると、負荷の大きいシステムで、パフォーマンスが周期的に低下する可能性があります。 セクション15.8.3.4「InnoDB バッファープールのプリフェッチ (先読み) の構成」を参照してください。デフォルト値で十分に活用されていないハイエンド I/O サブシステムがある場合、読み取りまたは書き込み操作のバックグラウンドスレッドの数を増やします。 セクション15.8.5「InnoDB バックグラウンド I/O スレッドの数の構成」を参照してください。
バックグラウンドで
InnoDB
が実行する I/O の量を制御します。 セクション15.8.7「InnoDB I/O Capacity の構成」を参照してください。 パフォーマンスが定期的に低下する場合は、この設定をスケールバックできます。InnoDB
が特定の種類のバックグラウンドの書き込みを実行するタイミングを判断するアルゴリズムを制御します。 セクション15.8.3.5「バッファープールのフラッシュの構成」を参照してください。 このアルゴリズムは一部のタイプのワークロードでは機能しますが、他のワークロードでは機能しないため、パフォーマンスが定期的に低下することがある場合は、この機能を無効にできます。コンテキストスイッチングの遅延を最小にするため、マルチコアプロセッサとそれらのキャッシュメモリー構成を利用します。 セクション15.8.8「スピンロックのポーリングの構成」を参照してください。
テーブルスキャンなどの一度だけの操作が、
InnoDB
バッファーキャッシュに格納された頻繁にアクセスされるデータを妨げることを防ぎます。 セクション15.8.3.3「バッファープールをスキャンに耐えられるようにする」を参照してください。信頼性とクラッシュリカバリに適切なサイズにログファイルを調整します。
InnoDB
ログファイルは、多くの場合にクラッシュ後の長い起動時間を避けるため、小さく維持されてきました。 MySQL 5.5 で導入された最適化によって、クラッシュリカバリプロセスの特定のステップが高速化します。 特に、Redo ログのスキャンと Redo ログの適用は、メモリー管理のアルゴリズムの改善のため、高速化します。 長い起動時間を避けるため、ログファイルを人為的に小さく維持していた場合、ログファイルサイズを拡大し、Redo ログレコードのリサイクルのために発生する I/O を削減することを考慮できるようになりました。InnoDB
バッファープールのインスタンスのサイズと数を構成します。特に数ギガバイトのバッファープールのあるシステムに重要です。 セクション15.8.3.2「複数のバッファープールインスタンスの構成」を参照してください。同時トランザクションの最大数を増やします。これはきわめてビジーなデータベースのスケーラビリティーを劇的に向上します。 セクション15.6.6「undo ログ」を参照してください。
パージ操作 (ガベージコレクションの一種) をバックグラウンドスレッドに移動します。 セクション15.8.9「パージ構成」を参照してください。 この設定の結果を効率的に測定するには、ほかの I/O 関連およびスレッド関連の構成設定を先にチューニングします。
ビジーなサーバーで SQL 操作が列を成し、「渋滞」が発生しないように、
InnoDB
が同時スレッド間で実行するスイッチングの量を削減します。innodb_thread_concurrency
オプションの値を設定します (強力な最新のシステムで最大約 32)。innodb_concurrency_tickets
オプションの値を増やします (通常は 5000 など)。 このオプションの組合せにより、InnoDB
が一度に処理するスレッド数の上限が設定され、スワップアウトする前に各スレッドがかなりの作業を実行できるため、待機中のスレッド数は少なくなり、過剰なコンテキスト切替えなしで操作を完了できます。