このトピックでは、PolarDBのWarm Buffer Pool機能について説明します。これには、メカニズム、利点、および使用上の注意事項が含まれます。
背景情報
PolarDB for MySQLは、ウォームバッファプール機能を提供します。 例外によりプライマリノードが手動で再起動または再起動された場合、バッファプールに保持されているデータを使用して再起動を高速化し、一貫したパフォーマンスを確保できます。
前提条件
PolarDBクラスターはMySQL 8.0.2を実行し、リビジョンバージョンは8.0.2.1.0以降です。 クラスターのバージョン番号を表示する方法については、エンジンバージョンの「エンジンバージョンの照会」セクションを参照してください。
テーブル圧縮機能が有効になっていません。
仕組み
PolarDB for MySQLのWarmerバッファプール機能は、Linuxの共有メモリを使用します。 物理ホストのInnoDBバッファプールは、PolarDBプロセスから分離されているため、プライマリノードをすばやく再起動できます。
次の図は、フィーチャーのアーキテクチャを示しています。
バッファプールおよびページの制御情報、ならびにページ内のデータは、共有メモリから割り当てられたメモリに格納される。 それらはPolarDBプロセスから独立しています。
独立したバッファプールがすでに存在する場合は、PolarDBをアタッチできます。
PolarDBは、ノードのクラッシュ後に一貫性のないバッファプールを修正し、一貫性を持たせることができます。
プライマリノードを手動で再起動すると、PolarDBはトランザクションの主な情報を保存できます。 このように、シャットダウン時のロールバックと起動時の復元の両方がスキップされるため、再起動を大幅に高速化できます。
mysqlshmは、PolarDB for MySQLが提供するバッファプール管理ツールです。 これを使用して、構成のクエリやバッファプールの解放など、バッファプールでO&M操作を実行できます。
メリット
クラスターのプライマリノードが再起動されると、Warmer Buffer Pool機能によってプロセスが高速化され、一貫したパフォーマンスが保証されます。
高速化: ウォーマーバッファプールは、例外によりプライマリノードを手動で再起動または再起動するときに必要な時間を大幅に短縮します。この効果は、プライマリノードが大きなバッファプールを使用し、多数の書き込み操作と大きなトランザクションを処理する場合に特に顕著です。 これらのシナリオでは、プライマリノードの再起動に数分かかる場合があります。 暖かいバッファプールはそれを数秒までスピードアップすることができます。
一貫したパフォーマンス: ウォーマーバッファプールは、最近使用されたデータがバッファプールとノードメモリの間で前後に移動されないため、再起動中にバッファプールをウォーミングアップする必要がなくなります。 このようにして、再起動後にパフォーマンスの低下が発生しません。
例:
次の図は、Warmer buffer poolを有効にした場合としない場合の再起動時の50 GBバッファプールのスループットを示しています。 テストには、sysbench OLTP読み取り専用ワークロードが使用されます。
結果分析:
ウォームバッファプールが有効になっていない場合 (オレンジ色の線で示されている) 、スループットは再起動直後の通常レベルの2% にすぎません。 約200秒後に徐々に正常に戻ります。
Warm Buffer Poolが有効になっている場合 (青い線で示す) 、再起動中にスループットが低下することはありません。
使用状況ノート
パラメーターの説明
パラメーター | タイプ | レベル | 説明 |
innodb_buf_shm_key | 整数 | グローバル | 各PolarDBプロセスの一意の識別子。
|
innodb_buf_shm_base_addr | 整数 | グローバル | 共有バッファプールの仮想メモリアドレスのベースオフセット。 共有メモリは、アドレスに基づいてPolarDBの仮想メモリ空間にマッピングされます。
|
innodb_buf_page_desc_free_list_サイズ | 整数 | グローバル | 圧縮ページの記述子を割り当てるために予約されたページ数。
|
innodb_buf_free_zip_pages | 整数 | グローバル | 圧縮ページを処理するメソッド。
|
innodb_buffer_pool_parallel_scan_スレッド | 整数 | グローバル | 並列スキャンのスレッド数。
|
innodb_buf_shm_huge_ページ | Bool | グローバル | システムが共有メモリを割り当てるときにラージページを有効にするかどうかを指定します。
|
innodb_fast_shutdown | 整数 | グローバル | InnoDBシャットダウンモード。
|
ステータスパラメーター
次の表に、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、共有メモリ
を解放する手順
手動再起動
my.cn fのinndb_buf_shm_keyパラメーターをゼロ以外の値に設定します。 次に、PolarDBクラスターを起動します。
クラスターの起動後、innodb_shared_buffer_pool_statusパラメーターを確認します。 値は、[共有メモリから割り当て] である必要があります。
innodb_fast_shutdownパラメーターを3に設定します。
プライマリノードを再起動します。
再起動後、innodb_shared_buffer_pool_statusパラメーターを確認します。 値は、[クリーンシャットダウン共有メモリにアタッチ] である必要があります。
例外による再起動
my.cn fのinndb_buf_shm_keyパラメーターをゼロ以外の値に設定します。 次に、PolarDBクラスターを起動します。
クラスターの起動後、innodb_shared_buffer_pool_statusパラメーターを確認します。 値は、[共有メモリから割り当て] である必要があります。
mysqldプロセスを終了して、ノードクラッシュをシミュレートします。
ノードが再起動するのを待ちます。
プライマリノードの再起動後、innodb_shared_buffer_pool_statusパラメーターを確認します。 値は、[異常シャットダウン共有メモリにアタッチ] である必要があります。