版本限制
核心版本為v7.0.6.5及以上的AnalyticDB PostgreSQL 7.0版執行個體。
文法和樣本
建立和設定自動冷熱遷移策略
CREATE TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[WITH(tiered_storage_cooldown_policy='XXX')]
PARTITION BY {LIST|RANGE} (PARTITION columns)
[distribution_options]
建立表時指定冷熱遷移策略通過指定tiered_storage_cooldown_policy='HPN:M'或tiered_storage_cooldown_policy='TTL:N'來實現。建表語句的其他參數介紹請參見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(Hot Partition Number)和固定保留時間TTL(Time To Live)。兩種策略均適用於RANGE分區和LIST分區。
固定熱分區數HPN
HPN策略指的是僅保留M個熱分區。即將分區鍵按照字典順序排序,調度時保留分區索引值最大的M個分區在熱存中,其餘分區自動轉為冷存。DEFAULT分區,最後轉冷。NULL分區在DEFAULT分區前轉冷。
HPN策略格式要求:嚴格按照'HPN:M'格式。其中HPN大小寫敏感,M為非負整數,不允許額外添加空格。
合法樣本:
非法樣本:
'HPN:-3'
'hpn:3'
'HPN: 3'
'HPN:3 '
固定保留時間TTL
TTL策略僅支援分區鍵為時間日期類型欄位(DATE/TIMESTAMP/TIMESTAMP WITH TIMEZONE)的分區表。轉冷的規則為超過固定保留時間的分區會自動轉冷。例如今天為2024-08-10,設定固定保留時間為8天,則2024-08-02以及該時間之前的分區均被自動轉冷。
具體為:
TTL策略格式要求:嚴格按照'TTL:N [YEAR | MONTH | DAY]'格式。其中N非負整數,不允許額外添加空格。[YEAR | MONTH | 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冷熱資料自動遷移功能支援設定最大並行調度器數量、調度器觸發間隔、調度器運行視窗等營運參數,以管理後台調度器的遷移行為。
您可以通過SHOW命令查看現有參數取值,如有修改參數取值需求請提交工單。修改參數無需重啟,並在下次觸發調度時生效。
最大並行調度器數量
您可以執行SHOW tiered_storage.adb_tiered_storage_max_worker
查看後台執行轉冷任務的最大並行數。對於多個分區數量進行轉冷的表,並行度越大,同時轉冷的表數目越多,轉冷速度越快;但是增大並行度並不能改變單個表的轉冷速度。該參數類型為INT,預設值為5。設定過大的並行度可能導致轉冷進程消耗過多的CPU資源。
調度器觸發間隔
您可以執行SHOW tiered_storage.adb_tiered_storage_worker_launch_interval
查看後台調度器執行轉冷任務的調度時間間隔。調度器在完成一次冷熱調度後,需要滿足調度間隔才會進行下一次調度。該參數類型為INT,預設值為600(單位:s),即每十分鐘觸發一次。設定過大的觸發間隔可能導致總體轉冷速度變慢,設定過小的觸發間隔可能耗費過多的系統資源。
調度器運行視窗
您可以執行SHOW tiered_storage.adb_worker_time_window_str
查看後台調度器每日允許執行調度任務的時間段。該參數類型為STRING,預設值為空白,代表每日00:00:00~23:59:59的時間視窗都可運行。參數格式要求為"HH:MM-HH:MM",比如"02:00-04:15",代表每日執行調度任務的開始時間和結束時間,非法的參數不會生效。已經處於調度轉冷中的調度任務不會因為超出時間窗而自動停止運行。
使用樣本
設定按月分區的分區表固定保留2個月的熱資料,其餘分區為冷資料。在淩晨兩點到四點進行自動調度。設定參數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)
);
在上述策略下,分區表按日期欄位b排序,分區值最大的2個區保留為熱分區,其他分區會自動轉冷。在業務上可以在每月1日02:00之前產生新的分區,這樣在02:00開始調度時會將新的分區確認為熱分區。
設定按日分區的分區表固定保留90天的資料作為熱資料,超過90天的分區轉為冷資料,在23:00到23:59進行自動調度。
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')
);
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)
);
在上述策略下,資料庫每日會把分區取值或者分區上界時間到目前時間超過90天的分區認定為冷資料,會自動遷移到冷資料,達到保留90天熱資料的目的。
常見問題
能否將非分區表的資料定時遷移到冷存?
將非分區表定時遷移到冷存請使用pg_cron實現。請參見資料存放區冷熱分層。
如果業務需要的轉冷條件與分區表的分區鍵無關,如何支援自動遷移?
在現有的自動冷熱遷移功能中,僅支援設定與分區鍵相關的自動轉冷策略,比如按照分區鍵取值或者分區上界設定轉冷時間。
冷存資料存放區在哪?
冷存資料將自動儲存在AnalyticDB for PostgreSQL建立的OSS Bucket(有地區屬性且儲存類型為本地備援儲存體)中,無需您手動指定儲存路徑,無需擔心資料安全問題。
冷熱資料自動遷移使用過程中,如果遇到其他問題,請提交工單或者進入AnalyticDB for PostgreSQL官網支援群(群號:11700737)提交問題。