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

PolarDB:ウォームバッファプール

最終更新日:Mar 29, 2026

PolarDB for MySQL のプライマリノードが再起動すると、InnoDB バッファープールは空の状態から開始されます。データベースは必要に応じてストレージからページを再読み込みするため、バッファープールが再構成されるまでの間、パフォーマンスが低下します。この再構成には、大量の書き込みワークロードまたは大規模トランザクションを処理する場合、数分かかることがあります。ウォームバッファプールは、バッファープールをデータベースプロセスとは独立した Linux 共有メモリ上に保存することで、この「コールドスタート」期間を解消します。バッファープールは再起動をまたいで保持され、ノードが復帰した直後に即座に利用可能になります。

前提条件

ウォームバッファプールを有効化する前に、以下の点を確認してください。

  • PolarDB クラスターが MySQL 8.0.2(リビジョンバージョン 8.0.2.1.0 以降)で実行されていること。バージョンの確認方法については、「エンジンバージョン」の「エンジンバージョンの照会」セクションをご参照ください。

  • テーブル圧縮機能が無効化されていること。

仕組み

ウォームバッファプールは、InnoDB バッファープールをプロセスメモリではなく Linux 共有メモリ上に保存します。バッファープールが PolarDB プロセスから独立しているため、再起動後も存続します。

warmbp.jpg

主な動作特性は以下のとおりです。

  • 再起動をまたいだ永続性: バッファープールの制御データ、ページメタデータ、およびページデータが共有メモリ上に保存されます。PolarDB 起動時に、新規のバッファープールを割り当てる代わりに、既存の共有メモリ上のバッファープールにアタッチします。

  • クラッシュ回復: ノードがクラッシュした場合、PolarDB は共有メモリ上のバッファープールに不整合がないかを検出し、アタッチ前に修復を行います。

  • 高速なクリーンシャットダウン: 手動による再起動では、PolarDB がシャットダウン前に主要なトランザクション状態を保存します。これにより、シャットダウン時のロールバックおよび起動時の状態復元が不要となり、再起動時間を大幅に短縮できます。

  • O&M 操作: mysqlshm ツールを使用すると、コマンドラインから構成情報を照会したり、共有メモリ上のバッファープールを解放したりできます。

メリット

高速な再起動

ウォームバッファプールにより、プライマリノードの再起動時間が数分から数秒へと短縮されます。特に、プライマリノードのバッファープールが大規模であり、大量の書き込みワークロードや大規模トランザクションを処理する場合に、その効果が顕著です。

再起動後の安定したパフォーマンス

バッファープールが共有メモリ上に保持されるため、再起動後も直近にアクセスされたページが引き続き利用可能です。ウォームアップ期間が不要であり、パフォーマンス低下も発生しません。

以下の図は、Sysbench OLTP 読み取り専用ワークロードを用いて、50 GB のバッファープールで再起動中のスループットを示しています。

image.png
  • ウォームバッファプール未使用時(オレンジ線):再起動直後にスループットが通常時の 2 % まで低下し、約 200 秒かけて回復します。

  • ウォームバッファプール使用時(青線):再起動中もスループットに影響はありません。

ウォームバッファプールの有効化

手動再起動の場合

  1. innodb_buf_shm_keymy.cnf で 0 以外の値に設定し、PolarDB クラスターを起動します。

  2. 機能が有効であることを確認します。

    SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';

    返される値は Allocate from shared memory である必要があります。

  3. innodb_fast_shutdown3 に設定します。

    SET GLOBAL innodb_fast_shutdown = 3;
  4. プライマリノードを再起動します。

  5. 再起動後に、再度ステータスを確認します。

    SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';

    返される値は Attach to clean shutdown shared memory である必要があります。これは、ノードが正常にシャットダウンされたバッファープールにアタッチしたことを意味します。

例外発生による再起動の場合

  1. innodb_buf_shm_keymy.cnf で 0 以外の値に設定し、PolarDB クラスターを起動します。

  2. 機能が有効であることを確認します。

    SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';

    返される値は Allocate from shared memory である必要があります。

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

  4. ノードが再起動するまで待ちます。

  5. 再起動後に、再度ステータスを確認します。

    SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';

    返される値は Attach to abnormal shutdown shared memory である必要があります。これは、PolarDB がクラッシュ状態からの共有メモリ上のバッファープールを検出し、回復したことを意味します。

参考情報

パラメーター

パラメーターレベル説明
innodb_buf_shm_key整数グローバル共有メモリ上のバッファープールの固有識別子です。ウォームバッファプールを有効化するには、0 以外の値を指定します。有効値:0 ~ 2^64−1。デフォルト値:0(無効)。
innodb_buf_shm_base_addr整数グローバル共有バッファープールの仮想メモリアドレスのベースオフセットです。有効値:0x300000000000 ~ 2^64−1。デフォルト値:0x567800000000
innodb_buf_page_desc_free_list_size整数グローバル圧縮ページ記述子のために予約されるページ数です。有効値:8 ~ 128。デフォルト値:16
innodb_buf_free_zip_pages整数グローバル再起動時の圧縮ページの処理方法です。有効値:1(例外による再起動時に圧縮ページを解放)、2(再起動中に圧縮ページを強制的に解放)。デフォルト値:1
innodb_buffer_pool_parallel_scan_threads整数グローバル並列バッファープールスキャンに使用するスレッド数です。有効値:0 ~ 512。デフォルト値:4
innodb_buf_shm_huge_pageブール値グローバル共有メモリの割り当て時にラージページを使用するかどうかを指定します。有効値:ONOFF。デフォルト値:ON
innodb_fast_shutdown整数グローバルInnoDB のシャットダウンモードです。有効値:01233 は PolarDB 固有の値で、2 と同じ動作ですが、未コミットトランザクションのロールバックを行いません。デフォルト値:1

ステータス値

ウォームバッファプールの現在の状態を照会します。

SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';
意味
Using process private memoryウォームバッファプールは無効です。ノードは標準のプロセスプライベートメモリを使用します。
Allocate from shared memoryウォームバッファプールは有効です。バッファープールは共有メモリ上に割り当てられます。
Attach to clean shutdown shared memoryノードは正常にシャットダウンされたバッファープールにアタッチしました。完全な再起動高速化が適用されます。
Attach to abnormal shutdown shared memoryノードはクラッシュを経ても存続したバッファープールにアタッチしました。PolarDB が不整合を検出し、修復済みです。

mysqlshm

mysqlshm は、共有メモリ上のバッファープールを管理するコマンドラインツールです。データベースの再起動なしに、バッファープールの状態を確認したり、解放したりできます。

Usage: mysqlshm -k key [options]
   -h, このヘルプを表示して終了します。
   -k, 共有メモリのキー  [必須]
   -i, 共有メモリの基本情報を表示します。
   -f, 共有メモリを解放します。