どちらが良いですか:
したがって、バッファプールインスタンスと、全体として「このような大きなInnoDBバッファプールサイズがあると、インスタンスを使用するか、OSスワップが発生する」となる理由を判断する方法がわかりません。
MySQL 5.5に戻ると、これと同じことを考えていました。
私がそれらの年月を通して学んだことは次のとおりでした:バッファープールがインストールされている半分より大きかった場合RAM and innodb_buffer_pool_instances は1(5.5のデフォルト)でした。スワッピングの脅威は常に差し迫っていました。
これについては前に説明しました: バッファプールインスタンスのサイズと数に関する経験則はありますか? 。その投稿では、162GBのバッファープールを持つサーバー上に192GB RAMがあったクライアントの例を述べました。 innodb_buffer_pool_instances は1でした、スワッピングが発生しました。 innodb_buffer_pool_instances を2に設定すると、問題が解決しましたより良い。
あなたの場合、バッファプールはちょうど半分なので、値1で十分です。チャンスはありません。 2に設定します。
MySQL 5.6のデフォルトは8であるため、もう考える必要はありません。
私はこれを言います: akuzminskyの答えは最高の原則を持っています 。私の答えは、過去の経験(良い面と悪い面)に基づいてヒップから撮影することです。
バッファー・プール・ミューテックスの競合を回避するために、バッファー・プール・インスタンスの数を増やす必要があります。
バッファプールサイズが8GBの場合、バッファプールのミューテックスの競合が発生することはないと思います。
UPDATE 0:
元の質問では合計メモリは8GBでしたが、答えで8Gbバッファプールについて言及しました。確かに、バッファー・プールは8GB未満でなければなりません。 4GBは良いスタートのように思えますが、スワッピングが発生しないことを確認してください。
更新1:
// Yasufumiのスライド から(最近のMySQLバージョンでは、出力が若干異なる場合があります)
バッファープールミューテックスに競合があるかどうかを判断するには、ピーク時に数十個のSHOW ENGINE INNODB STATUS
サンプルを収集します。
次に、Shellスニペットを使用して集計します。
#!/bin/sh
cat $1.innodb | grep "Mutex at " | cut -d"," -f1 | sort | uniq -c > /tmp/tmp1.txt
cat $1.innodb | grep "lock on " | cut -d"-"
-f2- | sort | uniq -c > /tmp/tmp2.txt
cat /tmp/tmp1.txt /tmp/tmp2.txt | sort -n > $1.contention rm /tmp/tmp1.txt /tmp/tmp2.txt
次のような出力が得られます。
.....
4 lock on RW-latch at 0x7fb86b2c9138 created in file dict/dict0dict.c line 1356
6 lock on RW-latch at 0x7fb86b2c4138 created in file dict/dict0dict.c line 1356
12 lock on RW-latch at 0x7fb86b2d9538 created in file dict/dict0dict.c line 1356
20 lock on RW-latch at 0x7fb86b2db138 created in file dict/dict0dict.c line 1356
22 Mutex at 0x7fb86b28f0e0 created file btr/btr0sea.c line 139
30 lock on RW-latch at 0x7fb86b2ba938 created in file dict/dict0dict.c line 1356
36 lock on RW-latch at 0x7fb86b2bad38 created in file dict/dict0dict.c line 1356
71 Mutex at 0x7fb86b28ecb8 created file buf/buf0buf.c line 597
164 lock on RW-latch at 0x7fb86b28f0b8 created in file btr/btr0sea.c line 139
バッファプールミューテックス待機の数が多い場合は、複数のバッファプールインスタンスを検討する必要があります。競合は、〜48G未満のバッファー・プールでは起こりそうにありません。
ご使用のOSに「swappiness」を設定している場合は、1に設定してください。問題は過度に攻撃的なOOMである可能性があります。
これを、同時に実行するMySQLスレッドの最大数と一致するように設定することをお勧めします。コア数を使用しています。
また、innodb_read_io_threads
とinnodb_write_io_threads
をこの数値と一致するように設定しました。
innodb_buffer_pool_instances
が低すぎると、スレッドがセマフォ待機でスタックする可能性があります。これにより、システムがビジーである必要があるにもかかわらず、CPUとI/Oの両方がアイドル状態のように見え、アプリケーションのレイテンシが低下します。