全部產品
Search
文件中心

PolarDB:冷資料階層式存放區的開啟和使用

更新時間:Nov 12, 2024

本文介紹如何開啟冷資料階層式存放區功能,以及開啟功能後的使用方式。

使用限制

  • 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;

開啟方式

  1. 購買隨用隨付叢集購買訂用帳戶叢集,登入PolarDB控制台

  2. 單擊目的地組群ID,進入叢集基本資料頁。

  3. 在左側導覽列選擇配置與管理 > 冷資料階層式存放區,進入PolarDB冷資料階層式存放區頁面。

  4. 單擊一鍵開啟,進入資料歸檔列表頁面。

    image (1).png

  5. 在頁面上可以查看執行個體基本資料資料歸檔列表,在資料歸檔列表一欄,可以分別查看整表歸檔列表分區表歸檔列表

說明
  • 如果當前還沒有存入任何冷資料,資料歸檔列表會呈現空白狀態。

  • 開啟之後,資料預設儲存在內建的雲端硬碟高速儲存介質上,需要通過簡單的處理才能將資料冷存,即轉存入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參數來設定冷資料物化緩衝的大小。

  1. 登入PolarDB控制台

  2. 單擊目的地組群ID,進入叢集基本資料頁。

  3. 在左側導覽列選擇配置與管理 > 參數配置,找到polar_smgrcache_size參數,單擊修改參數

  4. 參考以下樣本設定polar_smgrcache_size參數。

    設定值

    緩衝大小

    0

    0(緩衝被關閉)

    1

    1 GB

    2

    2 GB

    128

    128 GB(當前支援的最大值)

  5. 單擊左上方的提交修改,在彈出的儲存改動對話方塊中,單擊確定。修改該參數後,叢集會重啟。

說明
  • 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;
...