AnalyticDB for PostgreSQL は、ホットデータとコールドデータの階層型ストレージ機能を提供しており、アクセス頻度の低いデータをコールドストレージに保存してストレージコストを削減できます。特定の関数を使用してホットストレージからコールドストレージにデータを手動で移動することに加えて、AnalyticDB for PostgreSQL V7.0 は、パーティションテーブルに対してホットからコールドへの自動移行ポリシーを提供します。ポリシーを設定すると、データはポリシーに基づいてホットストレージからコールドストレージに自動的に移行されます。このトピックでは、ホットパーティション数(HPN)ポリシーと Time To Live(TTL)ポリシーを使用して、ホットストレージからコールドストレージにデータを自動的に移行する方法について説明します。
サポートされているバージョン
ホットからコールドへの自動移行ポリシーは、V7.0.6.5 以降の AnalyticDB for PostgreSQL V7.0 インスタンスに対してのみ設定できます。
制限事項
ホットからコールドへの自動移行ポリシーは、パーティションテーブルに対して設定できますが、非パーティションテーブルに対しては設定できません。
複数レベルのパーティションテーブルに対して、ホットからコールドへの自動移行ポリシーを設定することはできません。
ハッシュパーティションテーブルに対して、ホットからコールドへの自動移行ポリシーを設定することはできません。
プライマリキーを持つテーブルに対して、ホットからコールドへの自動移行ポリシーを設定することはできません。
複数のパーティションキー列を持つパーティションテーブルに対して、ホットからコールドへの自動移行ポリシーを設定することはできません。
ホットからコールドへの自動移行ポリシーを設定した後、ホットストレージからコールドストレージに移行されたデータをホットストレージに戻すことはできません。
構文と例
ホットからコールドへの自動移行ポリシーの作成と設定
CREATE TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[WITH(tiered_storage_cooldown_policy='XXX')]
PARTITION BY {LIST|RANGE} (PARTITION columns)
[distribution_options]テーブルを作成するときに、HPN:M または TTL:N 形式の tiered_storage_cooldown_policy パラメーターに値を指定して、ホットからコールドへの自動移行ポリシーを設定できます。テーブル作成ステートメントのその他のパラメーターについては、「SQL 構文」をご参照ください。
例
CREATE TABLE tiered_storage_partition1 (a INT, b DATE) WITH(tiered_storage_cooldown_policy='TTL:2') PARTITION BY LIST (b)
(
VALUES ('2024-06-10'),
VALUES ('2024-06-07'),
VALUES ('2024-06-06')
);CREATE TABLE tiered_storage_partition1 (a INT, b DATE) WITH(tiered_storage_cooldown_policy='HPN:3') PARTITION BY LIST (b)
(
VALUES ('2024-06-10'),
VALUES ('2024-06-07'),
VALUES ('2024-06-06')
);ホットからコールドへの自動移行ポリシーの変更
ALTER TABLE tbl_name SET(tiered_storage_cooldown_policy='XXX'); -- 移行ポリシーを変更します。
ALTER TABLE tbl_name SET(tiered_storage_cooldown_policy=''); -- 移行ポリシーを削除します。例
ALTER TABLE test_tbl SET(tiered_storage_cooldown_policy='HPN:5'); スケジューリングポリシー
AnalyticDB for PostgreSQL は、HPN と TTL の 2 つの自動ホット/コールド移行ポリシーをサポートしています。どちらのタイプのポリシーも、リストパーティションと範囲パーティションに適用できます。
HPN ポリシー
HPN ポリシーは、M 個のホットパーティションのみを保持することを指定します。AnalyticDB for PostgreSQL は、パーティションキー値に基づいてパーティションを辞書順にソートします。スケジューリング中、パーティションキー値が最も大きい最初の M 個のパーティションはホットストレージに保持され、他のパーティションは自動的にコールドストレージに移動されます。これらのパーティションの中で、DEFAULT パーティションは最後にコールドストレージに移動され、NULL パーティションは DEFAULT パーティションの前にコールドストレージに移動されます。
HPN ポリシーを設定する場合の storage_policy パラメーターの値の形式: HPN:M。HPN は大文字と小文字が区別されます。M は負でない整数である必要があります。スペースは使用できません。
有効な例:
'HPN:3'
'HPN:0'無効な例:
'HPN:-3'
'hpn:3'
'HPN: 3'
'HPN:3 'TTL ポリシー
TTL ポリシーは、パーティションキーが DATE 型、TIMESTAMP 型、または TIMESTAMP WITH TIMEZONE 型のフィールドであるパーティションテーブルに対してのみ設定できます。指定された保存期間を超えたパーティションは、TTL ポリシーに基づいて自動的にコールドストレージに移動されます。たとえば、現在の日付が 2024-08-10 で、保存期間が 8 日に設定されている場合、パーティションキー値が 2024-08-02 以前のパーティションは自動的にコールドストレージに移動されます。
次の点に注意してください。
範囲パーティションの上限値と現在の日付の差が指定された保存期間よりも大きい場合、パーティションは自動的にコールドストレージに移動されます。
リストパーティションのパーティションキー値と現在の日付の差が指定された保存期間よりも大きい場合、パーティションは自動的にコールドストレージに移動されます。
DEFAULT パーティションと NULL パーティションはコールドストレージに移動されません。
TTL ポリシーを設定する場合の storage_policy パラメーターの値の形式: 'TTL:N [YEAR | MONTH | DAY]'。N は負でない整数である必要があります。余分なスペースは使用できません。YEAR、MONTH、および DAY は時間単位を指定し、大文字と小文字が区別されます。単位を指定しない場合は、デフォルトの単位である DAY が使用されます。
有効な例:
'TTL:3'
'TTL:3 YEAR'
'TTL:3 MONTH'
'TTL:3 DAY'無効な例:
'TTL:-3'
'TTL:3 day'
'TTL:3DAY'
'TTL:3 DAY 'スケジューリングパラメーター
AnalyticDB for PostgreSQL が提供するホットからコールドへの自動移行機能では、同時実行ストレージ階層化タスクの最大数、スケジューラトリガー間隔、スケジューリングウィンドウなどの O&M パラメーターを設定できます。
現在のパラメーター値を表示するには、SHOW ステートメントを実行します。パラメーター値を変更するには、チケットを送信 します。変更されたパラメーターは、次回スケジューラがトリガーされたときに有効になります。AnalyticDB for PostgreSQL インスタンスを再起動する必要はありません。
同時実行ストレージ階層化タスクの最大数
SHOW tiered_storage.adb_tiered_storage_max_worker ステートメントを実行して、バックグラウンドでパーティションをコールドストレージに移動する同時実行ストレージ階層化タスクの最大数をクエリできます。コールドストレージに移動するパーティションが複数あるテーブルの場合、同時実行性が高いほど、より多くのテーブルを同時にコールドストレージに移動でき、データ移行速度が向上します。ただし、同時実行性を高くしても、個々のテーブルのストレージ階層化速度は変わりません。パラメーターの型は INT です。デフォルト値は 5 です。同時実行性を高く設定しすぎると、ストレージ階層化プロセス中に CPU 使用率が過剰になる可能性があります。
スケジューラトリガー間隔
SHOW tiered_storage.adb_tiered_storage_worker_launch_interval ステートメントを実行して、バックグラウンドスケジューラがストレージ階層化タスクを実行するスケジューリング間隔をクエリできます。スケジューラは、特定の間隔でホットストレージからコールドストレージにデータを移行します。パラメーターの型は INT です。デフォルト値は 600 で、スケジューラが 10 分ごとにトリガーされることを指定します。間隔を長く設定しすぎると、全体的なストレージ階層化速度が低下する可能性があり、間隔を短く設定しすぎると、システムリソースが過剰に消費される可能性があります。
スケジューリングウィンドウ
SHOW tiered_storage.adb_worker_time_window_str ステートメントを実行して、バックグラウンドスケジューラがスケジュールされたストレージ階層化タスクを実行できる毎日の期間をクエリできます。パラメーターの型は STRING です。デフォルトではパラメーターは空で、スケジューラが毎日 00:00:00 から 23:59:59 までタスクを実行できることを指定します。このパラメーターは、毎日スケジュールされたストレージ階層化タスクを実行するための開始時刻と終了時刻を指定します。パラメーター値は HH:MM-HH:MM 形式である必要があります。例: 02:00-04:15。無効なパラメーター値は有効になりません。すでにストレージ階層化プロセスにあるスケジュール済みタスクは、スケジューリングウィンドウを超えて実行されても自動的に停止しません。
例
月ごとにパーティション分割され、2 つのホットパーティションを保持する範囲パーティションテーブルを作成します。スケジューラが毎日 02:00 から 04:00 までスケジュールされたストレージ階層化タスクを実行するように設定します。
tiered_storage.adb_worker_time_window_strパラメーターを 02:00-04:00 に設定します。CREATE TABLE tiered_storage_partition4 (a INT, b DATE) WITH(tiered_storage_cooldown_policy='HPN:2') PARTITION BY RANGE(b) ( START ('2023-11-01'::date) END ('2023-12-01'::date), START ('2023-12-01'::date) END ('2024-01-01'::date), START ('2024-01-01'::date) END ('2024-02-01'::date), START ('2024-02-01'::date) END ('2024-03-01'::date) );上記のポリシーに基づいて、パーティションテーブルのパーティションは DATE 型の b フィールドによってソートされます。パーティションキー値が最も大きい最初の 2 つのパーティションはホットストレージに保持され、他のパーティションは自動的にコールドストレージに移動されます。ビジネス要件に基づいて、毎月 1 日の 02:00 より前に新しいパーティションを作成できます。こうすることで、スケジュールされたストレージ階層化タスクが 02:00 に開始されるときに、新しいパーティションがホットパーティションとして識別されます。
日ごとにパーティション分割されたパーティションテーブルを作成し、パーティションキー値または上限値が現在の日付から 90 日以上離れているパーティションをコールドストレージに移動するように設定します。スケジューラが毎日 23:00 から 23:59 までスケジュールされたストレージ階層化タスクを実行するように設定します。
LIST パーティショニング
CREATE TABLE tiered_storage_partition1 (a INT, b DATE) WITH(tiered_storage_cooldown_policy='TTL:90') PARTITION BY LIST (b) ( VALUES ('2024-06-10'), VALUES ('2024-06-09'), VALUES ('2024-06-08'), VALUES ('2024-06-07'), VALUES ('2024-06-06'), ... --サンプル値を実際のパーティションキー値に置き換えます。 VALUES ('2023-11-01') );RANGE パーティショニング
CREATE TABLE tiered_storage_partition3 (a INT, b DATE) WITH(tiered_storage_cooldown_policy='TTL:90') PARTITION BY RANGE(b) ( START ('2023-11-01'::date) END ('2023-12-01'::date), START ('2023-12-01'::date) END ('2024-01-01'::date), START ('2024-01-01'::date) END ('2024-02-01'::date), ... --サンプル値を実際のパーティション範囲値に置き換えます。 START ('2024-05-01'::date) END ('2024-06-01'::date) );
上記のポリシーに基づいて、AnalyticDB for PostgreSQL は、パーティションキー値または上限値が現在の日付から 90 日以上離れているパーティションをコールドデータとして識別し、自動的にコールドストレージに移動します。これにより、ホットデータを 90 日間保持できます。
FAQ
非パーティションテーブルに対してスケジュールされたホット/コールド移行を設定できますか?
はい、pg_cron 拡張機能を使用して、非パーティションテーブルに対してスケジュールされたホット/コールド移行を設定できます。詳細については、「ホットデータとコールドデータの階層型ストレージ」をご参照ください。
パーティションキーとして使用されていないビジネス関連フィールドを含むパーティションテーブルに対して、ホットからコールドへの自動移行ポリシーを設定できますか?
いいえ、パーティションキーを含むホットからコールドへの自動移行ポリシーのみを設定できます。たとえば、パーティションキー値または上限値と現在の日付の差に基づいて、ホットデータの保存期間を設定できます。
コールドデータはどこに保存されますか?
コールドデータは、AnalyticDB for PostgreSQL によって作成された Object Storage Service (OSS) バケットに自動的に保存されます。OSS バケットはリージョン固有であり、ローカル冗長ストレージ (LRS) タイプです。ストレージパスを指定したり、データセキュリティの問題について心配する必要はありません。
ホットストレージからコールドストレージへのデータの自動移行中に他の問題が発生した場合は、チケットを送信するか、AnalyticDB for PostgreSQL DingTalk グループ 11700737 に参加してテクニカルサポートを受けてください。