ビジネスデータの継続的な増加に伴い、アクセス頻度の低いウォームデータやコールドデータを含むすべてのデータを標準の InnoDB テーブルに保存すると、ストレージコストが着実に増加します。一方、このようなデータを外部ストレージにアーカイブすると、オンラインでの読み取り、書き込み、分析アクセスが犠牲になります。PolarDB for MySQL は、X-Engine に基づくデータ階層化を提供します。テーブル全体またはテーブル内の特定のパーティションを高圧縮の 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.34.1 以降。
事前準備
データのアーカイブを開始する前に、以下の準備を完了してください。
X-Engine の有効化:テーブルまたはパーティションのストレージエンジンオプションとして利用できるようにします。
パーティションテーブルをハイブリッドパーティションテーブルとしてアーカイブするには、以下の条件を満たす必要があります:
-
MySQL 8.0.2 で、マイナーバージョンが 8.0.2.2.34.1 以降の場合。設定で
loose_allow_create_hybrid_partitionパラメーターをONにする必要があります。 -
MySQL 8.0.2 で、マイナーバージョンが 8.0.2.2.34.1 より前の場合。後のマイナーバージョンにアップグレードしてください。
-
標準テーブルのアーカイブ
非パーティション化テーブル全体のデータとストレージエンジンを 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、ディスク領域などの主要なメトリックを注意深く監視してください。