InnoDBバッファープールとは何ですか?
InnoDBバッファープールは、InnoDB、バッファー、キャッシュ、インデックス、さらには行データの多くのメモリ内データ構造を保持するメモリスペースです。 innodb_buffer_pool_sizeは、MySQLによってInnoDBバッファープールに割り当てられるメモリの量を指定するMySQL構成パラメーターです。これは、MySQLホスティング構成で最も重要な設定の1つであり、使用可能なシステムRAMに基づいて構成する必要があります。
この投稿では、InnoDBバッファープールサイズの値を設定する2つのアプローチを紹介し、それらのプラクティスの長所と短所を調べ、独自の方法を提案します。システムRAMのサイズに基づいて最適な値に到達します。
アプローチ1.経験則法
最も一般的に行われている方法は、この値をシステムRAMの70%〜80%に設定することです。ほとんどの場合はうまく機能しますが、この方法はすべての構成で最適であるとは限りません。 192GBのRAMを搭載したシステムの例を見てみましょう。上記の方法に基づいて、バッファプールサイズは約150GBになります。ただし、これは、システムで使用可能な大きなRAMサイズを十分に活用しておらず、約40 GBのメモリを残しているため、実際には最適な数ではありません。利用可能なRAMをより多く利用する必要がある、より大きな構成のシステムに移行すると、この違いはさらに大きくなる可能性があります。
アプローチ2.より微妙なアプローチ
このアプローチは、InnoDBバッファープールの内部とその相互作用についてのより詳細な理解に基づいています。これについては、「高性能MySQL」という本で詳しく説明されています。
InnoDBバッファープールサイズを計算するための次のメソッドを見てみましょう。
- 使用可能なRAMの合計から始めます。
- OSのニーズに適した量を差し引きます。
- すべてのMySQLのニーズ(さまざまなMySQLバッファー、一時テーブル、接続プール、レプリケーション関連のバッファーなど)に適した量を差し引きます。
- 結果を105%で割ります。これは、バッファプール自体を管理するために必要なオーバーヘッドの概算です。
たとえば、InnoDBのみを使用し、合計ログファイルサイズが約4GBの192GBのRAMを搭載したシステムを見てみましょう。上記の本で推奨されているように、OSのニーズの割り当てには「最大2GBまたは合計RAMの5%」のようなルールを使用できます。これは約9.6GBになります。次に、主にログファイルのサイズを考慮して、他のMySQLのニーズにも約4GBを割り当てます。この方法では、InnoDBバッファープールサイズが約170GBになります。これは、使用可能なRAMサイズの約88.5%の使用率です。
上記のOSニーズのメモリ割り当てを計算するために「最大2GBまたは合計RAMの5%」ルールを使用しましたが、同じルールがすべての場合にうまく機能するとは限りません。特に、2GBから32GBの間の中型RAMを搭載したシステムの場合。たとえば、3GBのRAMを搭載したシステムでは、OSのニーズに2GBを割り当てることは、InnoDBバッファプールにあまり残しませんが、RAMの5%を割り当てることは、OSのニーズには少なすぎます。
では、上記のOS割り当てルールを微調整して、さまざまなRAM構成にわたるInnoDBの計算方法を調べてみましょう。
小型RAM(<=1GB)を搭載したシステムの場合
1GB未満のRAMで実行されているシステムの場合、InnoDBバッファープールサイズにはMySQLのデフォルト構成値である128MBを使用することをお勧めします。
中サイズのRAM(1GB – 32GB)を搭載したシステムの場合
RAMサイズが1GB〜32GBのシステムの場合を考えると、次の大まかなヒューリスティックを使用してOSのニーズを計算できます。
256MB + 256 * log2(RAMサイズ(GB))
ここでの合理化は、低RAM構成の場合、OSのニーズに合わせて256MBの基本値から開始し、この割り当てを対数スケールで次のように増やすことです。 RAMの量が増えます。このようにして、OSのニーズにRAMを割り当てるための決定論的な式を考え出すことができます。また、MySQLの他のニーズにも同じ量のメモリを割り当てます。たとえば、3 GBのRAMを搭載したシステムでは、OSのニーズに660 MB、MySQLのその他のニーズにさらに660 MBを公平に割り当てるため、InnoDBバッファープールサイズの値は約1.6GBになります。
大容量RAM(> 32GB)を搭載したシステムの場合
RAMサイズが32GBを超えるシステムの場合、OSのニーズをシステムRAMサイズの5%として計算することに戻り、同じ量のMySQLの他のニーズ。したがって、RAMサイズが192GBのシステムの場合、この方法ではInnoDBバッファープールサイズが約165GBになります。これも、使用するのに最適な値です。
InnoDBバッファープールサイズ計算機
任意のサイズのRAMの最適値を計算します:
InnoDBバッファプールサイズ計算機-任意のシステムRAMサイズに最適な数を計算しますクリックしてツイート
さまざまなRAMサイズのInnoDBバッファープールサイズのプロット
InnoDBバッファープールサイズの計算に関する注意事項
このブログ投稿の考慮事項は、MySQL専用のLinuxシステムに関するものです。 WindowsシステムまたはMySQLとともに複数のアプリケーションを実行するシステムの場合、これらの観察結果は不正確になる可能性があります。これらのツールを参照として使用することもできますが、innodb_buffer_pool_sizeの適切なサイズを取得するには、十分な経験、実験、継続的な監視、および微調整が必要であることに注意することも重要です。