本文介紹如何開啟冷資料階層式存放區功能,以及開啟功能後的使用方式。
使用限制
僅PolarDB PostgreSQL版 14且核心小版本為14.10.21.0及以上支援冷資料階層式存放區功能。
開啟冷資料階層式存放區功能後,無法關閉該功能,只能刪除冷資料。如果沒有儲存資料,開啟該功能本身不會產生費用。
開啟熱備的PolarDB PostgreSQL版叢集不支援開啟冷資料階層式存放區功能。
說明如以上情境您需要開啟冷資料階層式存放區功能,請聯絡我們處理。
開啟冷資料階層式存放區功能後,如果您的PolarDB PostgreSQL版叢集已經開啟熱備,不支援更換主可用性區域。
說明如以上情境您存在更換主可用性區域需求,請聯絡我們處理。
暫不支援的DDL:
暫不支援在OSS資料表空間中建立資料庫:
CREATE DATABASE dbname TABLESPACE OSS;
暫不支援將已有資料庫一次性轉入OSS資料表空間:
ALTER DATABASE dbname SET TABLESPACE OSS;
開啟方式
單擊目的地組群ID,進入叢集基本資料頁。
在左側導覽列選擇配置與管理 > 冷資料階層式存放區,進入PolarDB冷資料階層式存放區頁面。
單擊一鍵開啟,進入資料歸檔列表頁面。
在頁面上可以查看執行個體基本資料和資料歸檔列表,在資料歸檔列表一欄,可以分別查看整表歸檔列表和分區表歸檔列表。
如果當前還沒有存入任何冷資料,資料歸檔列表會呈現空白狀態。
開啟之後,資料預設儲存在內建的雲端硬碟高速儲存介質上,需要通過簡單的處理才能將資料冷存,即轉存入OSS。具體操作步驟請參考資料冷存的幾種模式。
資料冷存的幾種模式
資料冷存是指將資料表/索引/物化視圖轉存入OSS,轉存後不再佔用或者極少量佔用資料庫雲端硬碟儲存空間,從而大大降低資料庫的儲存成本。資料冷存後,所有的增刪改查SQL都透明,無需做任何修改。
普通表/索引/物化視圖冷存
將已有資料表/索引/物化視圖冷存。
ALTER TABLE tblname SET TABLESPACE OSS; ALTER INDEX idxname SET TABLESPACE OSS; ALTER Materialized View mvname SET TABLESPACE OSS;
說明在對錶執行
ALTER TABLE tblname SET TABLESPACE OSS
時,預設只會將表本身的資料轉存至OSS,表上建立的索引需要單獨再執行ALTER INDEX
才能將索引資料也轉存至OSS。直接在OSS儲存中建立資料表/索引/物化視圖。
方式一:CREATE時指定TABLESPACE OSS。
CREATE TABLE tblname (...) TABLESPACE OSS; CREATE TABLE tblname(...) TABLESPACE OSS as SELECT ...; CREATE INDEX idxname ON tblname(columnname) TABLESPACE OSS; CREAE INDEX idxname ON tblename USING GiST(columnname) TABLESPACE OSS; CREATE MATERIALIZED VIEW table_name TABLESPACE OSS AS query [ WITH [ NO ] DATA ];
方式二:設定預設資料表空間為OSS資料表空間。
SET default_tablespace = 'oss'; CREATE TABLE tblname (...) ; CREATE INDEX idxname ON tblname(columnname); CREAE INDEX idxname ON tblename USING GiST(columnname); CREATE MATERIALIZED VIEW table_name AS query [ WITH [ NO ] DATA ];
說明這種方式設定預設資料表空間為OSS後,所有的建立表、索引、物化視圖操作都會直接將對象建立在OSS儲存上。如果不需要建立冷存對象時,需要將預設資料表空間進行重設:
RESET default_tablespace;
LOB欄位獨立冷存
LOB欄位是指PolarDB PostgreSQL版中的blob、text、json、jsonb、array類型以及時空類型欄位,這些類型往往單個對象較大,佔用的儲存空間較多,但更新頻率不高。為了支援這類情境的降本需求,PolarDB PostgreSQL版冷資料階層式存放區功能支援將大對象欄位單獨進行冷存,其餘欄位的儲存保持不變。LOB欄位支援SQL一鍵冷存,具體使用方式如下:
--建立帶有大對象欄位的表
CREATE TABLE test_large_object(id serial, val text);
--將大對象欄位獨立冷存
ALTER TABLE test_large_object alter column val set (storage_type='oss');
--寫入大對象資料,此時寫入的text欄位內容儲存在OSS上
INSERT INTO test_large_object(val) VALUES((SELECT string_agg(random()::text, ':') FROM generate_series(1, 10000)));
需要提前設定大對象欄位的儲存為OSS,之後寫入的資料才會存入OSS。
分區表冷存
分區表是一種比較常見的冷存對象,在冷存功能使用上有一些特殊的方式。
全部分區表冷存。
方式一:依次將已經存在的分區子錶轉為冷存。
--prt1為分區表(父表) --prt1_p1為prt1的子表 --prt2_p2為prt1的另一張子表 --對所有的子表執行alter操作 ALTER TABLE prt1_p1 SET TABLESPACE OSS; ALTER TABLE prt1_p2 SET TABLESPACE OSS;
方式二:將分區表主表直接建立在OSS tablespace上。
CREATE TABLE prt1 (a int, b int) PARTITION BY RANGE(a) TABLESPACE OSS; --分區子表預設都繼承了父親tablespace屬性,直接將表建立在oss tablespace上 CREATE TABLE prt1_p1 PARTITION OF prt1 FOR VALUES FROM (0) TO (250); CREATE TABLE prt1_p2 PARTITION OF prt1 FOR VALUES FROM (250) TO (500);
方式三:設定預設資料表空間為OSS資料表空間後再建立分區表。
SET default_tablespace = 'oss'; CREATE TABLE prt1 (a int, b int) PARTITION BY RANGE(a); CREATE TABLE prt1_p1 PARTITION OF prt1 FOR VALUES FROM (0) TO (250); CREATE TABLE prt1_p2 PARTITION OF prt1 FOR VALUES FROM (250) TO (500);
部分分區子表冷存:
當只需要將已到期(低頻訪問)的分區子錶轉為冷資料時,可以直接對子表進行更換資料表空間操作。未到期(高頻訪問)的分區子表無需任何改變,仍儲存在資料庫雲端硬碟中,這樣既不影響分區表的訪問效能,又降低了儲存成本。
--prt1為分區表(父表) --prt1_p1為prt1的未到期子表 --prt2_p2為prt1的已到期子表 --對已到期子表執行alter操作 ALTER TABLE prt1_p2 SET TABLESPACE OSS;
資料冷熱分層
冷資料物化緩衝
您可以通過修改polar_smgrcache_size參數來設定冷資料物化緩衝的大小。
登入PolarDB控制台。
單擊目的地組群ID,進入叢集基本資料頁。
在左側導覽列選擇配置與管理 > 參數配置,找到polar_smgrcache_size參數,單擊修改參數。
參考以下樣本設定polar_smgrcache_size參數。
設定值
緩衝大小
0
0(緩衝被關閉)
1
1 GB
2
2 GB
128
128 GB(當前支援的最大值)
單擊左上方的提交修改,在彈出的儲存改動對話方塊中,單擊確定。修改該參數後,叢集會重啟。
PolarDB PostgreSQL版在開啟冷資料階層式存放區功能時,預設會在雲端硬碟上開闢很小量的物化緩衝空間,用於儲存中繼資料及一些IO合并。如果要追求更高的效能,可根據資料量及使用情境在控制台將物化緩衝做調整,調整後重啟資料庫立即生效。
開啟並使用了冷資料階層式存放區功能後,如果將polar_smgrcache_size參數調整為0,則會關閉緩衝功能,這可能會導致崩潰恢複變得非常慢,且重啟期間無法重新開啟該參數。如果出現這種情況,可以聯絡我們申請重新開啟緩衝功能,加速崩潰恢複。
開啟冷資料物化緩衝後,您可以通過如下方式查詢快取使用方式:
-- 建立擴充
CREATE extension polar_monitor;
-- 查詢物化緩衝基本使用方式
SELECT * FROM polar_smgrcaches;
-- 欄位說明:
-- smgrcache:緩衝id
-- relfilenode:該緩衝對應的表檔案
-- relchunknumber:該緩衝在表檔案中的位置
-- nblocks:該緩衝的大小
-- dirty:是否為髒
-- usagecount:使用計數
-- pinning_backends:引用計數
-- 強制將物化緩衝刷到OSS中
SELECT polar_flush_smgrcache();
-- 強制淘汰物化緩衝
SELECT polar_evict_smgrcache();
冷資料的訪問
冷資料增刪改查
冷存資料(即已經儲存在OSS資料表空間中的對象)做增刪改查的SQL都是透明的,無需進行任何改動。
冷資料恢複
資料轉存至OSS時會進行壓縮處理,如果要將已經儲存在OSS中的資料恢複至雲端硬碟儲存,需確保雲端硬碟上有足夠的儲存空間,通常要比OSS上的儲存空間增大約1.4~4倍。
冷資料清除
刪除冷存表/索引/物化視圖的SQL也是透明的,無需進行任何改動。
DELETE FROM tblname WHERE ...;
TRUNCATE TABLE tblname;
DROP TABLE tblname;
...