バッファープールが数 G バイトの範囲にあるシステムでは、バッファープールを個別のインスタンスに分割すると、キャッシュされたページに対して異なるスレッドが読み取りおよび書き込みを行うときの競合が減るため、並列性が向上する場合があります。この機能は通常、バッファープールのサイズが数 G バイトの範囲にあるシステムを対象にしています。複数のバッファープールインスタンスは innodb_buffer_pool_instances
構成オプションを使用して構成され、また innodb_buffer_pool_size
値を調整することもできます。
InnoDB バッファープールが大きい場合は、メモリーから取得することによって多くのデータ要求を満足できます。複数のスレッドが一度にバッファープールにアクセスしようとした場合は、ボトルネックが発生する可能性があります。この競合を最小限に抑えるために、複数のバッファープールを有効にすることができます。バッファープールに格納されるか、またはバッファープールから読み取られる各ページは、ハッシュ関数を使用して、いずれかのバッファープールにランダムに割り当てられます。各バッファープールは、独自の空きリスト、フラッシュリスト、LRU、およびバッファープールに接続されたその他のすべてのデータ構造を管理し、独自のバッファープール相互排他ロックによって保護されます。
複数のバッファープールインスタンスを有効にするには、innodb_buffer_pool_instances
構成オプションを 1 (デフォルト) より大きく 64 (最大) までの値に設定します。このオプションは、innodb_buffer_pool_size
を 1G バイト以上のサイズに設定した場合にのみ有効になります。指定した合計サイズは、すべてのバッファープール間で分割されます。最高の効率を得るには、innodb_buffer_pool_instances
と innodb_buffer_pool_size
の組み合わせを、各バッファープールインスタンスが少なくとも 1G バイトになるように指定します。
InnoDB バッファープールの詳細は、セクション8.9.1「InnoDB バッファープール」を参照してください。