ビジネスデータが増加するにつれて、標準の InnoDB テーブルに、アクセス頻度が低いウォームデータおよびコールドデータを含むすべてのデータを格納すると、ストレージコストが増大します。一方で、これらのデータを外部ストレージへアーカイブすると、オンラインでの読み取り・書き込み・分析機能が失われます。PolarDB for MySQL では、X-Engine を活用したデータ階層化(Data Tiering)機能を提供しています。テーブル全体または特定のパーティションを、高圧縮率を実現する X-Engine に変換することで、同一テーブル内に InnoDB(ホットデータ)と X-Engine(ウォーム/コールドデータ)を混在させたハイブリッドストレージが可能になります。これにより、オンラインアクセス性能を維持したままストレージコストを削減できます。X-Engine に格納されたデータは、引き続き DML 書き込みおよびオンライン DDL スキーマ変更をサポートします。
仕組み
PolarDB for MySQL では、単一のパーティションテーブル内の異なるパーティションに対して、それぞれ異なるストレージエンジンを指定できます。その動作は以下のとおりです:
データ階層化:アクセス頻度が高い「ホット」データのパーティションは、読み取り・書き込み性能を最適化するために InnoDB で保持します。一方、アクセス頻度が低い「ウォーム」または「コールド」データのパーティションは X-Engine へ移行します。
スマートルーティング:テーブルに対するクエリ実行時、PolarDB はクエリ条件に基づき、自動的に該当するパーティションおよびそのストレージエンジンへリクエストをルーティングします。この処理はアプリケーション層に対して完全に透明です。
高いデータ圧縮率:X-Engine は高度な圧縮アルゴリズムおよびオプションの 列のストア 形式を採用し、極めて高いデータ圧縮率を実現します。これにより、物理ディスク領域の使用量が大幅に削減され、コスト低減につながります。
適用範囲
本機能を利用する前に、ご利用の PolarDB for MySQL クラスターが以下のバージョン要件を満たしていることをご確認ください。
標準テーブルのアーカイブの場合:
MySQL 8.0.1、リビジョン 8.0.1.1.31 以降。
MySQL 8.0.2、リビジョン 8.0.2.2.12 以降。
パーティションテーブルのアーカイブの場合:MySQL 8.0.2、リビジョン 8.0.2.2.12 以降。
X-Engine 列指向テーブル へのアーカイブの場合:MySQL 8.0.2、リビジョン 8.0.2.2.33 以降。
事前準備
データのアーカイブを実行する前に、以下の手順を完了してください。
高圧縮エンジン(X-Engine)の有効化:これにより、テーブルまたはパーティションに対して X-Engine をストレージエンジンとして選択できるようになります。
ハイブリッドパーティショニングの有効化:マイナーエンジンバージョンが 8.0.2.2.33 より前のクラスターの場合、クォータセンター にアクセスします。クォータ ID
polardb_mysql_hybrid_partitionのクォータを検索し、対応する 操作 列の [要求] をクリックして、本機能を有効化します。
標準テーブルのアーカイブ
InnoDB から X-Engine へ、非パーティションテーブル全体(データおよびストレージエンジンを含む)を変換します。
構文
ALTER TABLE table_name ENGINE=engine_name[ TABLE_FORMAT=COLUMN];パラメーター説明
パラメーター | パラメーター説明 |
table_name | X-Engine へアーカイブするテーブルの名前。 |
engine_name | ストレージエンジンの名前。
|
TABLE_FORMAT | X-Engine のデータストレージフォーマット(任意)。
|
例
標準テーブル
t1を X-Engine 行指向テーブルへアーカイブします:ALTER TABLE t1 ENGINE=XEngine;標準テーブル
t1を X-Engine 列指向テーブルへアーカイブします:ALTER TABLE t1 ENGINE=XEngine TABLE_FORMAT=COLUMN;標準テーブル
t1を InnoDB エンジンへ復元します:ALTER TABLE t1 ENGINE=InnoDB;
パーティションテーブルのアーカイブ
特定パーティションのアーカイブ
パーティションテーブル内の特定のパーティション(通常、古いコールドデータを格納するパーティション)を X-Engine へアーカイブします。これにより、ホットデータとコールドデータの階層化が実現され、ハイブリッドパーティションテーブルが構成されます。
構文
ALTER TABLE table_name CHANGE PARTITION part_name ENGINE = XEngine[ TABLE_FORMAT=COLUMN];パラメーター説明
パラメーター | パラメーター説明 |
table_name | X-Engine へアーカイブするテーブルの名前。 |
part_name | X-Engine へアーカイブするパーティションの名前。 |
TABLE_FORMAT | X-Engine のデータストレージフォーマット(任意)。
|
例
パーティションテーブル
t1のパーティションp1を X-Engine ローストア形式へアーカイブします:ALTER TABLE t1 CHANGE PARTITION p1 ENGINE = XEngine;パーティションテーブル
t1のパーティションp1を X-Engine 列指向テーブルへアーカイブします:ALTER TABLE t1 CHANGE PARTITION p1 ENGINE = XEngine TABLE_FORMAT=COLUMN;
InnoDB エンジンへの復元
構文
ALTER TABLE table_name REORGANIZE PARTITION part_name INTO (partition_definition);パラメーター説明
パラメーター | パラメーター説明 |
table_name | ハイブリッドパーティションテーブルの名前。 |
part_name | InnoDB エンジンへ復元するパーティションの名前。 |
partition_definition | 復元対象パーティションの元の 説明 パーティション定義内の ENGINE 句は任意です。省略した場合、デフォルトのストレージエンジン(テーブル全体のエンジンと同じく InnoDB)が適用されます。明示的に |
例
X-Engine でアーカイブ済みのパーティションテーブル t1 のパーティション p1 のデータを、InnoDB エンジンへ復元します。
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO(PARTITION p1 VALUES LESS THAN(100));本番環境に適用
ベストプラクティス:コストとクエリ性能のバランスを取るため、アクセス頻度が低いウォームデータまたはコールドデータのみを X-Engine へアーカイブしてください。ログやイベントトラッキングデータなど、書き込み負荷が高く圧縮率も期待できるデータには、X-Engine の列のストア形式(
TABLE_FORMAT=COLUMN)をご利用ください。リスク緩和:データ移行(
ALTER TABLE)はリソースを多く消費する処理です。オンラインで実行可能ですが、本番ワークロードのパフォーマンスに影響を与えないよう、非ピーク時間帯に実行してください。モニタリングおよびアラート設定:アーカイブ実行中は、
SHOW FULL PROCESSLIST;コマンドを用いて、データ定義言語(DDL)の進行状況を追跡してください。また、コンソール上で CPU 使用率、IOPS(1 秒あたりの入出力操作数)、ディスク領域などの主要メトリックをモニターしてください。