云原生數據倉庫 AnalyticDB PostgreSQL 版數據冷熱分層存儲功能支持將不常訪問的數據放到冷存介質以降低存儲成本。除通過轉冷函數手動將數據從熱存遷移到冷存外,AnalyticDB PostgreSQL 7.0版數據存儲冷熱分層支持對分區表設置自動冷熱遷移策略,并按照設置的冷熱遷移策略自動地將數據從熱存遷移到冷存。本文介紹如何通過固定熱分區數HPN和固定保留時間TTL兩種策略實現數據從熱存到冷存的自動遷移。
版本限制
內核版本為v7.0.6.5及以上的AnalyticDB PostgreSQL 7.0版實例。
使用約束
僅支持對分區表進行自動冷熱遷移,暫不支持對非分區表進行自動冷熱遷移。
暫不支持對多級分區進行自動冷熱遷移。
暫不支持對Hash分區進行自動冷熱遷移。
暫不支持對帶主鍵的表自動冷熱遷移。
暫不支持多個分區鍵的分區表進行自動冷熱遷移。
已轉冷的分區,不會因為自動冷熱遷移策略的變更而重新轉熱。
調度策略
云原生數據倉庫 AnalyticDB 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:0'
非法示例:
'HPN:-3'
'hpn:3'
'HPN: 3'
'HPN:3 '
固定保留時間TTL
TTL策略僅支持分區鍵為時間日期類型字段(DATE/TIMESTAMP/TIMESTAMP WITH TIMEZONE)的分區表。轉冷的規則為超過固定保留時間的分區會自動轉冷。例如今天為2024-08-10,設定固定保留時間為8天,則2024-08-02以及該時間之前的分區均被自動轉冷。
具體為:
對于RANGE分區,分區上界(range_end)與當前日期的間隔超過固定保留時間,分區將自動轉冷。
對于LIST分區,分區值與當前日期的間隔超過固定保留時間,分區將自動轉冷。
DEFAULT/NULL分區不會轉冷。
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 '
語法和示例
創建和設置自動冷熱遷移策略
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 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進行自動調度。
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) );
在上述策略下,數據庫每日會把分區取值或者分區上界時間到當前時間超過90天的分區認定為冷數據,會自動遷移到冷數據,達到保留90天熱數據的目的。
常見問題
能否將非分區表的數據定時遷移到冷存?
將非分區表定時遷移到冷存請使用pg_cron實現。請參見數據存儲冷熱分層。
如果業務需要的轉冷條件與分區表的分區鍵無關,如何支持自動遷移?
在現有的自動冷熱遷移功能中,僅支持設置與分區鍵相關的自動轉冷策略,比如按照分區鍵取值或者分區上界設置轉冷時間。
冷熱數據自動遷移使用過程中,如果遇到其他問題,請提交工單或者進入云原生數據倉庫 AnalyticDB PostgreSQL 版官網支持群(群號:11700737)提交問題。