すべてのプロダクト
Search
ドキュメントセンター

PolarDB:暖かいバッファプール

最終更新日:May 28, 2024

このトピックでは、PolarDBのWarm Buffer Pool機能について説明します。これには、メカニズム、利点、および使用上の注意事項が含まれます。

背景情報

PolarDB for MySQLは、ウォームバッファプール機能を提供します。 例外によりプライマリノードが手動で再起動または再起動された場合、バッファプールに保持されているデータを使用して再起動を高速化し、一貫したパフォーマンスを確保できます。

前提条件

  • PolarDBクラスターはMySQL 8.0.2を実行し、リビジョンバージョンは8.0.2.1.0以降です。 クラスターのバージョン番号を表示する方法については、エンジンバージョンの「エンジンバージョンの照会」セクションを参照してください。

  • テーブル圧縮機能が有効になっていません。

仕組み

PolarDB for MySQLのWarmerバッファプール機能は、Linuxの共有メモリを使用します。 物理ホストのInnoDBバッファプールは、PolarDBプロセスから分離されているため、プライマリノードをすばやく再起動できます。

次の図は、フィーチャーのアーキテクチャを示しています。

warmbp.jpg

  • バッファプールおよびページの制御情報、ならびにページ内のデータは、共有メモリから割り当てられたメモリに格納される。 それらはPolarDBプロセスから独立しています。

  • 独立したバッファプールがすでに存在する場合は、PolarDBをアタッチできます。

  • PolarDBは、ノードのクラッシュ後に一貫性のないバッファプールを修正し、一貫性を持たせることができます。

  • プライマリノードを手動で再起動すると、PolarDBはトランザクションの主な情報を保存できます。 このように、シャットダウン時のロールバックと起動時の復元の両方がスキップされるため、再起動を大幅に高速化できます。

  • mysqlshmは、PolarDB for MySQLが提供するバッファプール管理ツールです。 これを使用して、構成のクエリやバッファプールの解放など、バッファプールでO&M操作を実行できます。

メリット

クラスターのプライマリノードが再起動されると、Warmer Buffer Pool機能によってプロセスが高速化され、一貫したパフォーマンスが保証されます。

  • 高速化: ウォーマーバッファプールは、例外によりプライマリノードを手動で再起動または再起動するときに必要な時間を大幅に短縮します。この効果は、プライマリノードが大きなバッファプールを使用し、多数の書き込み操作と大きなトランザクションを処理する場合に特に顕著です。 これらのシナリオでは、プライマリノードの再起動に数分かかる場合があります。 暖かいバッファプールはそれを数秒までスピードアップすることができます。

  • 一貫したパフォーマンス: ウォーマーバッファプールは、最近使用されたデータがバッファプールとノードメモリの間で前後に移動されないため、再起動中にバッファプールをウォーミングアップする必要がなくなります。 このようにして、再起動後にパフォーマンスの低下が発生しません。

    例:

    次の図は、Warmer buffer poolを有効にした場合としない場合の再起動時の50 GBバッファプールのスループットを示しています。 テストには、sysbench OLTP読み取り専用ワークロードが使用されます。

    結果分析: image.png

    • ウォームバッファプールが有効になっていない場合 (オレンジ色の線で示されている) 、スループットは再起動直後の通常レベルの2% にすぎません。 約200秒後に徐々に正常に戻ります。

    • Warm Buffer Poolが有効になっている場合 (青い線で示す) 、再起動中にスループットが低下することはありません。

使用状況ノート

パラメーターの説明

パラメーター

タイプ

レベル

説明

innodb_buf_shm_key

整数

グローバル

PolarDBプロセスの一意の識別子。

  • 有効値: 0〜2 64 -1。

  • デフォルト値: 0。 Warm Buffer Poolが無効になっていることを示します。

innodb_buf_shm_base_addr

整数

グローバル

共有バッファプールの仮想メモリアドレスのベースオフセット。 共有メモリは、アドレスに基づいてPolarDBの仮想メモリ空間にマッピングされます。

  • 有効な値: 0x300000000000から2 64 -1。

  • デフォルト値: 0x567800000000。

innodb_buf_page_desc_free_list_サイズ

整数

グローバル

圧縮ページの記述子を割り当てるために予約されたページ数。

  • 有効値: 8 ~ 128

  • デフォルト値: 16。

innodb_buf_free_zip_pages

整数

グローバル

圧縮ページを処理するメソッド。

  • 有効な値: 1および2。

    • 1: 例外によりノードが再起動したときに圧縮ページを解放します。

    • 2: 再起動中に圧縮ページを強制的に解放します。

  • デフォルト値: 1。

innodb_buffer_pool_parallel_scan_スレッド

整数

グローバル

並列スキャンのスレッド数。

  • 有効な値: 0 ~ 512

  • デフォルト値: 4。

innodb_buf_shm_huge_ページ

Bool

グローバル

システムが共有メモリを割り当てるときにラージページを有効にするかどうかを指定します。

  • デフォルト値: ONおよびOFF。

  • デフォルト値: ON。

innodb_fast_shutdown

整数

グローバル

InnoDBシャットダウンモード。

  • 有効な値: 0、1、2、および3。 値が大きいほど、シャットダウンに必要な時間が短くなります。 値3は、PolarDB for MySQLによって追加されます。 パラメーターを3に設定すると、コミットされていないトランザクションをロールバックせずに、値2を使用した場合と同じシャットダウンプロセスになります。

  • デフォルト値: 1。

ステータスパラメーター

次の表に、Warm Buffer Pool機能のステータスを示すinnodb_shared_buffer_pool_statusパラメーターの有効な値を示します。

説明

プロセス専用メモリの使用

ウォームバッファプール機能は無効になっています。 プライベートメモリが使用されます。

共有メモリからの割り当て

PolarDBは、共有メモリから割り当てられたメモリを使用します。

クリーンシャットダウン共有メモリへのアタッチ

PolarDBは、クリアされてシャットダウンされるバッファプールに接続されます。

異常なシャットダウン共有メモリへのアタッチ

PolarDBは、クラッシュしたバッファプールに接続されています。

mysqlshm

PolarDB for MySQLは、Warm Buffer Pool機能を管理するためのmysqlshmツールを提供します。

使用法: mysqlshm -kキー [オプション]
   -h、このヘルプを表示して終了します。
   -k、共有メモリキー [必須]
   -i、共有メモリの基本情報をPrinf
   -f、共有メモリ
を解放する

手順

手動再起動

  1. my.cn fのinndb_buf_shm_keyパラメーターをゼロ以外の値に設定します。 次に、PolarDBクラスターを起動します。

    クラスターの起動後、innodb_shared_buffer_pool_statusパラメーターを確認します。 値は、[共有メモリから割り当て] である必要があります。

  2. innodb_fast_shutdownパラメーターを3に設定します。

  3. プライマリノードを再起動します。

  4. 再起動後、innodb_shared_buffer_pool_statusパラメーターを確認します。 値は、[クリーンシャットダウン共有メモリにアタッチ] である必要があります。

例外による再起動

  1. my.cn fのinndb_buf_shm_keyパラメーターをゼロ以外の値に設定します。 次に、PolarDBクラスターを起動します。

  2. クラスターの起動後、innodb_shared_buffer_pool_statusパラメーターを確認します。 値は、[共有メモリから割り当て] である必要があります。

  1. mysqldプロセスを終了して、ノードクラッシュをシミュレートします。

  2. ノードが再起動するのを待ちます。

    プライマリノードの再起動後、innodb_shared_buffer_pool_statusパラメーターを確認します。 値は、[異常シャットダウン共有メモリにアタッチ] である必要があります。