web-dev-qa-db-ja.com

MySQL InnoDBバッファープールインスタンスの最適数

サーバーの特性

  • 合計システムRAM:8GB(MySQL + MySQL以外のものを実行、つまりMySQL専用ではない)
  • CPUコアの数:6
  • データベースに約2GBのデータがあります
  • InnoDBバッファープールサイズを4GBに設定しています

どちらが良いですか:

  • Innodbバッファープールインスタンスが1に設定されていますか?
  • Innodbバッファープールインスタンスが2(各2GB)に設定されていますか?
  • Innodbバッファープールインスタンスが4(各1GB)に設定されていますか?
  • Innodbバッファープールインスタンスを8(デフォルト設定)に設定

したがって、バッファプールインスタンスと、全体として「このような大きなInnoDBバッファプールサイズがあると、インスタンスを使用するか、OSスワップが発生する」となる理由を判断する方法がわかりません。

13
Adergaard

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の答えは最高の原則を持っています 。私の答えは、過去の経験(良い面と悪い面)に基づいてヒップから撮影することです。

7
RolandoMySQLDBA

バッファー・プール・ミューテックスの競合を回避するために、バッファー・プール・インスタンスの数を増やす必要があります。

バッファプールサイズが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未満のバッファー・プールでは起こりそうにありません。

6
akuzminsky

ご使用のOSに「swappiness」を設定している場合は、1に設定してください。問題は過度に攻撃的なOOMである可能性があります。

2
Rick James

これを、同時に実行するMySQLスレッドの最大数と一致するように設定することをお勧めします。コア数を使用しています。

また、innodb_read_io_threadsinnodb_write_io_threadsをこの数値と一致するように設定しました。

innodb_buffer_pool_instancesが低すぎると、スレッドがセマフォ待機でスタックする可能性があります。これにより、システムがビジーである必要があるにもかかわらず、CPUとI/Oの両方がアイドル状態のように見え、アプリケーションのレイテンシが低下します。

0
Mark