日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

數據存儲冷熱分層

更新時間:

云原生數據倉庫AnalyticDB PostgreSQL版支持冷熱分層存儲,可以將訪問頻次低的熱表轉換為冷表存儲到OSS中,以降低存儲成本。本文介紹數據存儲冷熱分層的使用限制和使用方法。

說明

本文中將存儲在本地磁盤的數據表稱為熱表,將存儲在遠端OSS的數據表稱為冷表。

版本約束

  • 當實例為存儲彈性模式6.0版時,小版本需為v6.3.11.1及以上。

  • 當實例為存儲彈性模式7.0版時,小版本需為v7.0.3.0及以上。

說明

使用約束

AnalyticDB PostgreSQL 6.0版AnalyticDB PostgreSQL 7.0版實例的數據存儲冷熱分層使用約束略有差異,請根據實例版本查看對應的約束。

6.0版實例

  • 支持將單個熱表轉為冷表。

  • 支持將分區表的部分子分區轉為冷分區,暫不支持將整個分區表父表轉為冷表。

  • 熱表或者熱分區轉冷會建立臨時表存放臨時數據,轉冷結束會自動清除。請確保各個segment節點上磁盤剩余空間大于當前正在轉冷的熱表空間之和。

  • 熱表轉為冷表后,原表上關聯的主鍵、索引、序列、rule、注釋等會自動被刪除,且無法找回。

  • 暫不支持將冷表或者冷分區直接轉熱,可以通過CREATE TABLE AS SELECT的方式將冷數據存儲至本地磁盤。

  • 冷表或者冷分區的數據處于只讀狀態,不支持修改(寫入、刪除、更新),或者任何DDL操作(ALTER COLUMN、DROP COLUMN等)。冷表支持刪除(DROP TABLE)。

  • 冷表的底層存儲格式類似于AOCS表,自帶壓縮,所占空間會與原表大致相等。

  • 冷表不支持索引。

7.0版實例

  • 支持將單個熱表轉為冷表。

  • 支持將分區表的部分子分區轉為冷分區,暫不支持將整個分區表父表轉為冷表。

  • 熱表轉為冷表后,原表上關聯的主鍵、索引、序列、rule、注釋等會自動被刪除,且無法找回。

  • 暫不支持將冷表或者冷分區直接轉熱,可以通過CREATE TABLE AS SELECT的方式將冷數據存儲至本地磁盤。

  • 冷表或者冷分區的數據允許讀取和追加寫入,不支持修改(刪除和更新),或者任何DDL操作(ALTER COLUMN、DROP COLUMN等)。冷表支持刪除(DROP TABLE)。

  • 對于帶主鍵或者唯一索引的分區表,其子表暫不支持轉為冷表。帶有普通類型的索引的分區表則不受限制,其子表可以轉化為冷表。

  • 冷表在OSS所占空間會與原表大致相等或略小。

  • 冷表不支持索引。

冷存儲計費

熱表轉為冷表后數據存儲在遠端OSS,會產生存儲費用,計費規則如下:

  • 冷存儲采取按量付費方式。

  • 每5分鐘采集更新冷存使用量,小時級出賬。

  • 價格和OSS的標準存儲價格一致,請參見OSS產品定價

    以中國內地地域為例,OSS定價為0.12元/GB/月,每小時的定價則為0.000166666666667元/GB,實際價格以賬單頁面為準。

您可在賬單詳情 > 明細賬單中查看冷存儲的計費賬單詳情。

使用方法

重要
  • 遷移到冷表的過程中會有建立臨時表并寫入數據,以及將數據上傳至OSS的過程,會存在一定的本地I/O和網絡I/O,可能對實例中已經運行的查詢產生一定的性能影響,使用時請注意對業務的影響。

  • 熱表轉為冷表后其占用的本地磁盤空間會被釋放。

  • AnalyticDB PostgreSQL 6.0版實例,系統會在設定的轉冷時間點開始調度,轉冷過程中調度和排隊會有一定耗時,AnalyticDB PostgreSQL 7.0版實例無需調度,在執行轉冷語句后立即轉冷。具體需要的轉冷時間與實例規格、同時上傳的表數量和表的數據量有關。詳情請參見性能數據

AnalyticDB PostgreSQL 6.0版AnalyticDB PostgreSQL 7.0版實例的數據存儲冷熱分層使用方法不同,請根據實例版本選擇對應的語法操作。

6.0版實例

普通表整表轉冷

語法

ALTER TABLE <tableName> SET ttl interval '<scheduling_interval>' move to storage_cold;

示例

創建一個普通表tiered_storage_heap并插入數據。

CREATE TABLE tiered_storage_heap (a int, b int);
INSERT INTO tiered_storage_heap SELECT random() * 1000,1 FROM generate_series(1,1000);
  • 示例一:指定三天后(3days)將普通表tiered_storage_heap轉冷。例如,2023年07月17日09:00:00執行ALTER TABLE操作,那么三天后(2023年07月20日09:00:00)會將tiered_storage_heap整表轉冷。

    ALTER TABLE tiered_storage_heap SET ttl interval '3days' move to storage_cold;
  • 示例二:指定任意時間點(2023年07月28日 16:53:58)將普通表tiered_storage_heap轉冷。

    ALTER TABLE tiered_storage_heap SET ttl '2023-07-28 16:53:58'::Timestamp move to storage_cold;
  • 示例三:將轉冷時間點設為過去的時間點,可以立刻對表進行轉冷。

    • 指定轉冷時間點為三天前(-3days)。執行如下命令,對表立刻轉冷。

      ALTER TABLE tiered_storage_heap SET ttl interval '-3days' move to storage_cold;
    • 指定過去的具體時間點。若當前時間為2023年07月17日16:53:58,您可以執行如下命令,對表立刻轉冷。

      ALTER TABLE tiered_storage_heap SET ttl '2022-07-16 16:53:58'::Timestamp move to storage_cold;

分區表按子分區轉冷

語法

ALTER TABLE <分區子表名> SET ttl interval '<scheduling_interval>' move to storage_cold;

您可以使用psql執行\d+查看具體分區表的子表名。

示例

創建一個分區表tiered_storage_partition_hdfs

CREATE TABLE tiered_storage_partition_hdfs(a int,b int) distributed by (a) partition by range(a) (start(1) end(20) every(10));
說明

本示例會生成2個分區子表tiered_storage_partition_hdfs_1_prt_1tiered_storage_partition_hdfs_1_prt_2

向分區子表tiered_storage_partition_hdfs_1_prt_1中插入數據。

INSERT INTO tiered_storage_partition_hdfs_1_prt_1 values(1, 1), (2, 2), (3, 3), (4, 4);

指定三天后將分區子表tiered_storage_partition_hdfs_1_prt_1轉冷。例如,2023年07月17日09:00:00執行ALTER TABLE操作,那么三天后(2023年07月20日09:00:00)會將tiered_storage_partition_hdfs_1_prt_1子分區整表轉冷,其他分區均不會有任何遷移操作。

ALTER TABLE tiered_storage_partition_hdfs_1_prt_1 SET ttl interval '3days' move to storage_cold;

查詢指定表的冷熱狀態

您可以選擇任意一種方式查詢表的冷熱狀態。冷表返回cold,熱表返回hot。

  • 方式一:

    SELECT pg_tiered_storage_relation_status('<table_name>'::regclass::oid::bigint);
  • 方式二:

    SELECT pg_tiered_storage_relation_status(<表的oid>::bigint);

    通過SELECT oid FROM pg_class where relname='<table_name>';查詢表的oid。

7.0版實例

普通表整表轉冷

語法

SELECT pg_tiered_storage_move_table_to_storage_cold('<schema_name>', '<table_name>');

示例

public的Schema中創建一個普通表tiered_storage_heap_oss并插入數據。

CREATE TABLE tiered_storage_heap_oss (a int, b int) DISTRIBUTED BY(a) ;
INSERT INTO  tiered_storage_heap_oss SELECT random() * 1000,1 FROM generate_series(1,100);
  • 示例一:整表立即轉冷。

    執行以下語句,將普通表整表立即轉冷。

    SELECT pg_tiered_storage_move_table_to_storage_cold('public', 'tiered_storage_heap_oss');
  • 示例二:使用pg_cron設置整表定時轉冷。

    假設執行用戶為etl_user,將數據庫etl中的普通表tiered_storage_heap_oss,設置在次日凌晨1點將普通表轉冷。連接到postgres數據庫,執行以下語句。

    SELECT cron.schedule('etl_table_transfer_to_cold', '0 1 * * *', 'SELECT pg_tiered_storage_move_table_to_storage_cold('public', 'tiered_storage_heap_oss');', 'etl', 'etl_user');

    次日凌晨1點后檢查轉冷成功后,可執行以下語句,刪除該定時任務。

    SELECT cron.unschedule(<定時任務ID>);
    說明

    定時任務ID為創建任務時自動生成的,可以通過查看cron.job表的jobid字段查看。

分區表按子分區轉冷

語法

SELECT pg_tiered_storage_move_table_to_storage_cold('<schema_name>', '<分區子表名>');

您可以使用psql執行\d+查看具體分區表的子表名。

示例

  • 示例一:對分區子表立即轉冷。

    public的Schema中創建一個分區表tiered_storage_partition_oss

    CREATE TABLE tiered_storage_partition_oss(a int,b int) DISTRIBUTED BY (a) PARTITION BY range(a) (start(1) end(20) every(10));
    說明

    本示例會生成2個分區子表tiered_storage_partition_oss_1_prt_1tiered_storage_partition_oss_1_prt_2

    向分區子表tiered_storage_partition_oss_1_prt_1中插入數據。

    INSERT INTO  tiered_storage_partition_oss_1_prt_1 VALUES(1, 1), (2, 2), (3, 3), (4, 4);

    將分區子表立即轉冷。

    SELECT pg_tiered_storage_move_table_to_storage_cold('public', 'tiered_storage_partition_oss_1_prt_1');
  • 示例二:使用pg_cron設置按天分區的分區子表定時轉冷。

    在數據庫etl中創建按天分區的daily_log_details分區表。

    CREATE TABLE daily_log_details (id INT, log_message text, created_date character varying(64))
    PARTITION BY LIST (created_date)
    (
       PARTITION p20230601 VALUES ('20230601'),
       PARTITION p20230602 VALUES ('20230602'),
       PARTITION p20230603 VALUES ('20230603'),
       PARTITION p20230604 VALUES ('20230604'),
       PARTITION p20230605 VALUES ('20230605'),
       PARTITION p20230606 VALUES ('20230606'),
       PARTITION p20230607 VALUES ('20230607'),
       PARTITION p20230608 VALUES ('20230608'),
       PARTITION p20230609 VALUES ('20230609'),
       PARTITION p20230610 VALUES ('20230610'),
       PARTITION p20230611 VALUES ('20230611'),
       DEFAULT PARTITION others
    );

    設置將10天前的分區子表轉冷,執行用戶為etl_user,轉冷執行時間為3點。按照如下步驟操作。

    1. 在數據庫etl中創建清理函數。

      CREATE OR REPLACE FUNCTION pg_tiered_storage_move_partition_daily_table_to_cold_storage(schemaname text, tablename text) RETURNS void
      AS $$
      DECLARE
          fetch_overdue_partition_sql text;
          cold_storage_sql text;
          target record;
      BEGIN
          fetch_overdue_partition_sql := 'WITH targetpartitions AS
          (SELECT * FROM pg_partitions 
          WHERE tablename = $1
          AND schemaname = $2 
          AND partitionlevel = 1
          AND partitionisdefault = FALSE)
          SELECT partitiontablename FROM targetpartitions WHERE 
          to_date(substring(targetpartitions.partitionname FROM 2), ''YYYYMMDD'') <= current_date - INTERVAL ''10 days''';
          
          -- fetch overdue partitions
          FOR target IN EXECUTE fetch_overdue_partition_sql USING tablename, schemaname LOOP 
             cold_storage_sql := 'SELECT pg_tiered_storage_move_table_to_storage_cold($1::text, $2::text)';
             raise notice 'sql %', cold_storage_sql;
             EXECUTE cold_storage_sql USING schemaname, target.partitiontablename;
          END LOOP;
      END;
      $$
      LANGUAGE plpgsql;
    2. 連接到postgres數據庫執行轉冷語句。

      SELECT cron.schedule('etl_daily_transfer_to_cold', '0 3 * * *', 'SELECT pg_tiered_storage_move_partition_daily_table_to_cold_storage(''public'', ''daily_log_details'');', 'etl', 'etl_user');
  • 示例三:使用pg_cron設置按月分區的分區子表定時轉冷。

    在數據庫etl中創建按月分區的month_log_details分區表。

    CREATE TABLE month_log_details (id INT, log_message text, created_date character varying(64))
    PARTITION BY LIST (created_date)
    (
       PARTITION p202306 VALUES ('202306'),
       PARTITION p202307 VALUES ('202307'),
       PARTITION p202308 VALUES ('202308'),
       PARTITION p202309 VALUES ('202309'),
       PARTITION p202310 VALUES ('202310'),
       DEFAULT PARTITION others
    );

    設置將3個月前的分區子表轉冷,執行用戶為etl_user,轉冷執行時間為5點。按照如下步驟操作。

    1. 在數據庫etl中創建清理函數。

      CREATE OR REPLACE FUNCTION pg_tiered_storage_move_partition_table_to_cold_storage(schemaname text, tablename text) RETURNS void
      AS $$
      DECLARE
          fetch_overdue_partition_sql text;
          cold_storage_sql text;
          target record;
      BEGIN
          fetch_overdue_partition_sql := 'WITH targetpartitions AS
          (SELECT * FROM pg_partitions 
          WHERE tablename = $1
          AND schemaname = $2 
          AND partitionlevel = 1
          AND partitionisdefault = FALSE)
          SELECT partitiontablename FROM targetpartitions WHERE 
          to_date(substring(targetpartitions.partitionname FROM 2), ''YYYYMM'') <= current_date - INTERVAL ''3 months''';
          
          -- fetch overdue partitions
          FOR target IN EXECUTE fetch_overdue_partition_sql USING tablename, schemaname LOOP 
             cold_storage_sql := 'SELECT pg_tiered_storage_move_table_to_storage_cold($1::text, $2::text)';
             raise notice 'sql %', cold_storage_sql;
             EXECUTE cold_storage_sql USING schemaname, target.partitiontablename;
          END LOOP;
      END;
      $$
      LANGUAGE plpgsql;
    2. 連接到postgres數據庫執行轉冷語句。

      SELECT cron.schedule('etl_month_transfer_to_cold', '0 5 1 * *', 'SELECT pg_tiered_storage_move_partition_table_to_cold_storage(''public'', ''month_log_details'');', 'etl', 'etl_user');

查詢指定表的冷熱狀態

執行以下語句,查詢表的冷熱狀態。冷表返回cold,熱表返回hot。

SELECT pg_tiered_storage_table_status('<schema_name>', '<table_name>|<分區子表名>')

查看冷熱數據存儲量

登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺,在基本信息頁面的實例運行狀態卡片中查看熱存儲總量冷存儲總量

備份恢復

AnalyticDB PostgreSQL版冷熱分層存儲支持備份恢復,具體恢復規則如下。

6.0版實例

當具備完整備份時,可以恢復到任意時間點的狀態,恢復時間點的冷熱狀態與備份時刻一致。

7.0版實例

當具備完整備份時,可以恢復到指定時間點的狀態。恢復時間點的冷熱狀態與備份時刻一致。AnalyticDB PostgreSQL 7.0版存在如下限制:

  • 如果數據表轉冷后無數據寫入,可以恢復到任意時間點的狀態。

  • 如果數據表轉冷后有數據寫入,可以恢復到轉冷前任何備份點的狀態,如果恢復到冷存狀態,暫時只能恢復到冷表最后一次寫入對應的狀態。

為了支持備份恢復,被DROP后的數據表對應的OSS空間不會立刻釋放,會額外延長保存一段時間。延長保存的時間與備份恢復設置的數據備份保留天數一致。延長保存的時間內對應OSS空間依然會產生費用。

備份恢復的詳細信息,請參見備份恢復功能介紹

擴縮容

AnalyticDB PostgreSQL 6.0版實例縮容會時會將冷表遷移至本地臨時表以進行數據重分布,縮容完成后會重新上傳數據至OSS并清理本地臨時表,需要保證縮容后的所有節點剩余空間大于冷表占用空間之和才能縮容成功。縮容過程會從OSS下載數據,縮容完成時間受限于OSS下載數據的帶寬,請合理評估縮容時間。

對于AnalyticDB PostgreSQL 7.0版實例,擴縮容不涉及冷存部分的數據,不需要進行重分布或者數據拉回本地,不需要考慮冷存所占磁盤空間。

性能數據

按照如下語句分別對節點規格為2C8G的4節點實例和2C8G的8節點實例進行測試。

CREATE TABLE t333 (a int, b int);
INSERT INTO t333 SELECT random() * 1000000, random()*1000000 FROM generate_series(1,3000000000);

AnalyticDB PostgreSQL 6.0版實例執行ALTER TABLE t333 SET ttl interval '-3days' move to storage_cold;轉冷語句。

AnalyticDB PostgreSQL 7.0版實例執行SELECT pg_tiered_storage_move_table_to_storage_cold('public', 't333');轉冷語句。

單表轉冷時間的測試結果如下。

熱表大小(GB)

4節點實例轉冷時間(秒)

8節點實例轉冷時間(秒)

6.0版實例

7.0版實例

6.0版實例

7.0版實例

1

10

5

5

2.8

10

96

48

42

25.2

100

848

490

333

243