コンセンサスは約75%のRAMがバッファー・プール専用にする必要があると思われることを知っています。しかし、私はバッファプールインスタンスの最適な数にもっと興味があります。設定を決定するときに考慮すべき点は何ですか?
たとえば、75GBのバッファプールがあるとします。 75のバッファープールインスタンスをそれぞれ1GBで割り当てる必要がありますか?それぞれ5GBで15個ですか?または、それぞれ7.5 GBで10個ですか?
単一のバッファー・プールから始めて、ロックが表示されるかどうかに基づいて増やす必要がありますか?
インスタンスの最大数は何に基づくべきですか-利用可能なコア?
ありがとう-あなたの応答は大歓迎です。
私が通常使用する経験則は、Linux環境の特別なプログラムに基づいています
numactl --hardware
これを実行すると、次の出力が得られます
sh-4.1# numactl --hardware
available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3
node 0 size: 49151 MB
node 0 free: 241 MB
node 1 cpus: 4 5 6 7
node 1 size: 32768 MB
node 1 free: 39 MB
node 2 cpus: 8 9 10 11
node 2 size: 49152 MB
node 2 free: 49 MB
node 3 cpus: 12 13 14 15
node 3 size: 32752 MB
node 3 free: 32 MB
node distances:
node 0 1 2 3
0: 10 16 16 16
1: 16 10 16 16
2: 16 16 10 16
3: 16 16 16 10
これにより、DBサーバー上にあるCPUとコアの数がすぐにわかります。
一般に、 innodb_buffer_pool_instances を物理CPUの数またはコアの数に設定します。特に、 innodb_buffer_pool_instances を4または16に設定しました。
InnoDBバッファープールをインストールされているRAMの50%より大きくすると、mysqldによってOSがスワップを開始します...悪い!!!!大きなバッファープールが必要な場合は、 innodb_buffer_pool_instances のチューニングがさらに重要になります。
innodb_buffer_pool_instances が最初に導入された直後に、私はすぐにそれを試しました。 192 GBのDBサーバー、デュアルヘキサコア、162 GBのバッファープールを備えたクライアントがありました。私は単に2に設定し、すべてがうまくいきました。これに関する2011年2月12日の私の古い投稿を参照してください: MySQLを重いInnoDBワークロードに合わせてどのように調整しますか?
innodb_buffer_pool_size
とinnodb_buffer_pool_instances
を組み合わせて使用する必要があります
innodb_buffer_pool_instances
構成オプションは、1(デフォルト)より大きく64(最大)までの値に設定する必要があります。このオプションは、innodb_buffer_pool_size
を1ギガバイト以上のサイズに設定した場合にのみ有効になります。指定した合計サイズは、すべてのバッファプールに分割されます。最高の効率を得るには、innodb_buffer_pool_instances
とinnodb_buffer_pool_size
の組み合わせを指定して、各バッファープールインスタンスが少なくとも1ギガバイトになるようにします。