AnalyticDB for MySQL では、ホットデータを SSD に、コールドデータを Object Storage Service (OSS) にそれぞれ格納することで、重要なクエリに対して高速なパフォーマンスを実現しつつ、ストレージコストを抑えることができます。
階層型ストレージは、日付または時刻でパーティション分割されたテーブルにのみ適用されます。クラスターはマイナーバージョン 3.1.3.3 以降である必要があり、かつ以下のいずれかのエディションである必要があります:Enterprise Edition、Basic Edition、Data Lakehouse Edition、または Data Warehouse Edition Elastic mode。マイナーバージョンを確認または更新するには、AnalyticDB for MySQL コンソール にログインし、クラスター情報 ページの 設定情報 セクションをご確認ください。
ストレージポリシーの選択
AnalyticDB for MySQL では、次の 3 種類のストレージポリシーを提供しています。ワークロードに適したポリシーを以下の表から選択してください。
| ストレージポリシー | データの保存先 | 推奨用途 | コスト |
|---|---|---|---|
| ホットストレージ | すべてのデータを SSD に格納 | 頻繁にクエリされ、レイテンシ要件が厳しいテーブル | 最高 |
| コールドストレージ | すべてのデータを OSS(ゾーン冗長ストレージ、ZRS)に格納 | アーカイブ用で、ほとんどアクセスされないデータ | 最低 |
| 混合ストレージ | ホットパーティションを SSD に、コールドパーティションを OSS に格納 | 最新のデータがアクティブで古いデータがほとんどクエリされない大規模な時系列パーティションテーブル | 中程度 |
ポリシーの選択:
-
クエリレイテンシが重大であり、データの大部分を定期的にアクセスする場合は、ホットストレージ を使用します。
-
アーカイブ目的で、ほぼクエリしないデータには、コールドストレージ を使用します。
-
ログテーブル、注文履歴、モニタリングデータなどの時系列ワークロードには、混合ストレージ を使用します。これは、大規模なパーティションテーブルにおいて最も一般的な選択肢です。
混合ストレージの仕組み
混合ストレージを選択すると、ホットパーティション数(N)を指定します。AnalyticDB for MySQL は、すべてのパーティションをパーティションキー値の降順でソートし、上位 N 個のパーティションを SSD 上のホットパーティションとして、残りを OSS 上のコールドパーティションとして格納します。
パーティションが追加された場合やホットパーティション数が変更された場合、システムは自動的に再ソートおよびデータ移行を行い、正しい分布を維持します。詳細については、「パーティション数変更の影響」をご参照ください。
ストレージポリシーの設定
テーブル作成時
CREATE TABLE 文の storage_policy パラメーターを使用してポリシーを指定します。
CREATE TABLE your_table (
...
)
PARTITION BY ...
PROPERTIES (
"storage_policy" = "MIXED", -- HOT、COLD、または MIXED
"hot_partition_count" = "5" -- storage_policy = MIXED の場合に必須
);
既存テーブルの場合
ストレージポリシーを変更するには、ALTER TABLE を使用します。この文を実行後、移行の進捗状況を追跡できます。「ストレージポリシー変更の進捗状況の照会」をご参照ください。
-- 5 個のホットパーティションを持つ混合ストレージに切り替え
ALTER TABLE your_table
SET PROPERTIES (
"storage_policy" = "MIXED",
"hot_partition_count" = "5"
);
構文の完全なリファレンスについては、「CREATE TABLE」および「ALTER TABLE」をご参照ください。
ストレージポリシーを設定または変更した後、ホットストレージとコールドストレージ間のデータ移行には、BUILD ジョブの完了が必要です。BUILD ジョブが完了した後、コールドデータおよびホットデータのサイズが更新されます。ポリシー設定後にデータ変更が発生しない場合、システムは自動的に BUILD をトリガーしません。その場合は、手動で BUILD TABLE を実行してデータ移行をトリガーする必要があります。
課金
ホットデータとコールドデータの階層型ストレージを有効化すると、コールドデータストレージにはホットデータストレージとは個別に請求される従量課金料金が発生します。料金の詳細については、「料金」をご参照ください。
ストレージプラン を使用してストレージコストをオフセットできます。
パーティション数変更の影響
新しいパーティションが挿入された場合
すべてのパーティションが再ソートされ、正確に N 個のホットパーティションが維持されます。キー値が最小のパーティションがホットからコールドに格下げされます。
例: hot_partition_count が 5 です。新しいパーティション 20241226(最大のキー値)が挿入されました。BUILD ジョブ実行後、システムは 20241226 をホットに昇格させ、20241221(以前の最小ホットパーティション)をコールドに移動します。
ホットパーティション数を変更した場合
-
N から M(M > N)に増加:
M - N個のコールドパーティション(キー値が最大のもの)がホットに昇格します。 -
N から M(M < N)に減少:
N - M個のホットパーティション(キー値が最小のもの)がコールドに格下げされます。
例 — 5 から 6 に増加: パーティション 20241220(最大のコールドパーティションキー)がコールドからホットに移動します。
例 — 5 から 4 に減少: パーティション 20241221(最小のホットパーティションキー)がホットからコールドに移動します。
ストレージポリシーの照会
すべてのテーブルを照会
SELECT * FROM information_schema.table_usage;
特定のテーブルを照会
SELECT * FROM information_schema.table_usage
WHERE table_schema = '<schema_name>' AND table_name = '<table_name>';
レスポンスパラメーター
| パラメーター | 説明 |
|---|---|
table_schema |
データベース名 |
table_name |
テーブル名 |
storage_policy |
ストレージポリシー:HOT、COLD、または MIXED |
hot_partition_count |
ホットパーティション数(シャードを UNION した後の値。設定値を超える場合があります。下記の注意事項をご参照ください) |
cold_partition_count |
コールドパーティション数 |
rt_total_size |
リアルタイムデータの合計サイズ(rt_data_size + rt_index_size)。単位:バイト |
rt_data_size |
リアルタイムデータのサイズ。単位:バイト |
rt_index_size |
リアルタイムデータ内のプライマリキーおよびインデックスデータのサイズ。単位:バイト |
hot_total_size |
ホットパーティション内のデータ合計サイズ(hot_data_size + hot_index_size)。単位:バイト |
hot_data_size |
ホットパーティション内のデータサイズ。単位:バイト |
hot_index_size |
ホットパーティション内のプライマリキーおよびインデックスデータのサイズ。単位:バイト |
cold_total_size |
コールドパーティション内のデータ合計サイズ(cold_data_size + cold_index_size)。単位:バイト |
cold_data_size |
コールドパーティション内のデータサイズ。単位:バイト |
cold_index_size |
コールドパーティション内のプライマリキーおよびインデックスデータのサイズ。単位:バイト |
使用上の注意:
-
すべてのサイズ値(
rt_*、hot_*、cold_*)は、INSERT、UPDATE、DELETE、および BUILD 操作の実行に伴って変化します。 -
データ書き込み後に
hot_total_sizeとcold_total_sizeの両方が 0 の場合、データはリアルタイムで同期されます。rt_total_sizeは現在のサイズを反映します。リアルタイムデータを既存データに変換するには、BUILD 文を実行してください。その後、hot_total_sizeとcold_total_sizeに値が設定されます。 -
設定された
hot_partition_countは、シャードごとのホットパーティション数を示します。照会されるhot_partition_countは、すべてのシャードを跨いだ UNION であり、シャード間でパーティションの分布が異なる場合、設定値より大きくなる可能性があります。
例 — 照会された `hot_partition_count` と設定値の比較:
テーブル A には 2 つのシャードがあり、hot_partition_count は 2 に設定されています。
-
シャード 1:P4、P5 がホット。P1、P2、P3 がコールド。
-
シャード 2:P3、P4 がホット。P1、P2 がコールド。
照会される値は UNION:{P4, P5} ∪ {P3, P4} = {P3, P4, P5} となるため、hot_partition_count は 3 を返します。
ストレージポリシー変更の進捗状況の照会
ALTER TABLE を実行してストレージポリシーを変更した後は、information_schema.storage_policy_modify_progress から移行の進捗状況を追跡できます。
すべてのテーブルを照会
SELECT * FROM information_schema.storage_policy_modify_progress;
特定のテーブルを照会
SELECT * FROM information_schema.storage_policy_modify_progress
WHERE table_schema = '<schema_name>' AND table_name = '<table_name>';
レスポンスパラメーター
| パラメーター | 説明 |
|---|---|
table_schema |
データベース名 |
table_name |
テーブル名 |
task_id |
ストレージポリシー変更ジョブの ID |
source_storage_policy |
変更前のストレージポリシー:HOT、COLD、または MIXED |
source_hot_partition_count |
変更前のホットパーティション数 |
dest_storage_policy |
変更後のストレージポリシー:HOT、COLD、または MIXED |
dest_hot_partition_count |
変更後のホットパーティション数 |
hot_to_cold_partition_count |
ホットからコールドに移動されたパーティション数 |
cold_to_hot_partition_count |
コールドからホットに移動されたパーティション数 |
hot_to_cold_data_size |
ホットからコールドに移動されたデータサイズ。単位:バイト |
cold_to_hot_data_size |
コールドからホットに移動されたデータサイズ。単位:バイト |
hot_data_size_before_change |
変更前のホットデータサイズ。単位:バイト |
cold_data_size_before_change |
変更前のコールドデータサイズ。単位:バイト |
hot_data_size_after_change |
変更後のホットデータサイズ。単位:バイト |
cold_data_size_after_change |
変更後のコールドデータサイズ。単位:バイト |
start_time |
ストレージポリシー変更が行われる時間範囲の開始時刻 |
update_time |
ストレージポリシー変更が行われる時間範囲の終了時刻 |
progress |
変更の進捗状況。単位:% |
status |
変更ステータス:INIT(未開始)、RUNNING(実行中)、または FINISH(完了) |