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

歸檔表語法說明

歸檔表是用于保存已歸檔數據的表。TTL表與歸檔表之間存在強綁定的一對一關系,即每個TTL表最多只能創建一個歸檔表。本文將為您介紹歸檔表的相關語法說明。

前提條件

  • 實例版本要求如下:

    • 引擎版本為MySQL 5.7時,實例版本必須是polardb-2.4.0_5.4.19-20240927_xcluster5.4.19-20240920及以上。

    • 引擎版本為MySQL 8.0時,實例版本必須是polardb-2.4.0_5.4.19-20240927_xcluster8.4.19-20240924及以上。

    說明
  • TTL定義僅支持AUTO模式數據庫的分區表(不包括使用Local Partition的分區表 )。

名詞解析

名詞

說明

冷數據

在實例中某些數據庫表幾乎沒有更新,且查詢頻率非常低的數據。

在線表

承載在線流量的業務數據表。

歸檔表

用于保存已歸檔數據的表,通常存放在高壓縮、低成本的存儲介質中,例如OSS。

TTL

全稱為“生存時間”(Time To Live),指的是數據在數據庫中所能存儲的時間長度。在此時間段之后,數據將被自動清理。

TTL表

所有設置了TTL定義的在線表。

TTL列

TTL定義中用于計算數據有效性的時間列。

創建歸檔表

在通過CREATE TABLEALTER TABLE語句創建TTL表后,若對TTL表的歷史數據有歸檔需求,則需為當前TTL表創建相應的歸檔表。歸檔表會將TTL表的數據轉存至高壓縮且低成本的OSS對象存儲中,從而有效降低存儲成本。

語法定義

CREATE TABLE #archiveTableName
LIKE #ttlTableName
ENGINE = 'Columnar' ARCHIVE_MODE = 'TTL'
說明
  • ENGINE的值必須為'Columnar',不允許其他值。

  • ARCHIVE_MODE的值必須為'TTL',不允許其他值。

  • CREATE TABLE LIKE語句的源表必須是含有TTL定義的表。同時,必須指定ENGINE = 'Columnar'ARCHIVE_MODE = 'TTL'

  • 在創建歸檔表之前,建議將TTL_ENABLE設置為'OFF',關閉自動清理任務。詳細操作說明,請參見TTL定義操作說明

語法示例

例如,已經創建了一個名為my_ttl_tbl的TTL表。如果希望為該TTL表創建一個名為my_arc_tbl的歸檔表,可以使用以下SQL語句:

/*+TDDL:cmd_extra(ENABLE_ASYNC_DDL=true, PURE_ASYNC_DDL_MODE=true)*/
CREATE TABLE `my_arc_tbl`
LIKE `my_ttl_tbl`
ENGINE = 'Columnar' ARCHIVE_MODE = 'TTL';
說明
  • 創建歸檔表的CREATE TABLE LIKE語句,將觸發TTL表的全表數據歸檔流程(該歸檔操作本質上是創建列存索引(CCI)并上傳至OSS的過程),因此,執行時間通常較長。

  • 上述示例SQL語句中的HINT/*+TDDL:cmd_extra(ENABLE_ASYNC_DDL=true, PURE_ASYNC_DDL_MODE=true)*/,可以使該歸檔表的創建DDL操作在后臺以異步方式執行。在整個歸檔表創建過程中,原TTL表的讀寫操作不會受到影響。

  • 有關PolarDB-X的TTL表冷數據歸檔及清理原理,請參見原理概述

歸檔表分區

分區方案

  • 歸檔表默認會按TTL定義中TTL_EXPRttl_column進行Range分區。Range分區的間隔是TTL定義中TTL_EXPRttl_interval_definition

    例如,在某個TTL表中,TTL列為date_field。如果數據的存活時間間隔按月進行定義,保留最近3個月的數據。那么歸檔表的Range分區的間隔就是一個月,一個月對應一個Range分區。示例如下:

    TTL_EXPR = `date_field` EXPIRE AFTER 3 MONTH TIMEZONE '+08:00'  
  • 當創建歸檔表時,自動生成的Range分區數量及其定義由兩個參數共同決定。

    • ARCHIVE_TABLE_PRE_ALLOCATE: 該參數是決定在創建歸檔表時,最多向未來時間預建多少個分區。

    • ARCHIVE_TABLE_POST_ALLOCATE:該參數是決定在創建歸檔表時,最多為過去時間補建多少個分區。

    例如,假設當前時間為2024-10-02,ARCHIVE_TABLE_PRE_ALLOCATE的取值為4(即向未來時間預建4個分區),ARCHIVE_TABLE_POST_ALLOCATE的取值為3(即為過去時間補建3個分區)。因此,最后歸檔表的分區方案如下所示:

    PARTITION BY RANGE COLUMNS(`date_field`) (
      PARTITION `pstart` VALUES LESS THAN ('1970-01-02 00:00:00'),
      PARTITION `p202407` VALUES LESS THAN ('2024-08-01 00:00:00'),
      PARTITION `p202408` VALUES LESS THAN ('2024-09-01 00:00:00'),
      PARTITION `p202409` VALUES LESS THAN ('2024-10-01 00:00:00'),
      PARTITION `p202410` VALUES LESS THAN ('2024-11-01 00:00:00')/*當前時間 2024-10-02 所在的分區*/,
      PARTITION `p202411` VALUES LESS THAN ('2024-12-01 00:00:00'),
      PARTITION `p202412` VALUES LESS THAN ('2025-01-01 00:00:00'),
      PARTITION `p202501` VALUES LESS THAN ('2025-02-01 00:00:00'),
      PARTITION `pm` VALUES LESS THAN (MAXVALUE)
    )

調整分區參數

若您希望調整ARCHIVE_TABLE_PRE_ALLOCATEARCHIVE_TABLE_POST_ALLOCATE的值,以便為未來時間及過去時間創建更多的分區,您可以使用以下語法進行調整:

/**
 * 給未來時間預建 12 個分區,
 * 給過去時間補建 24 個分區,
 */
ALTER TABLE `my_ttl_tbl`
MODIFY TTL
SET 
ARCHIVE_TABLE_PRE_ALLOCATE=12,
ARCHIVE_TABLE_POST_ALLOCATE=24;

查詢歸檔表

查詢歸檔表定義

創建歸檔表的過程實質上是一個創建列存索引的過程。當歸檔表創建完成后,原TTL表中將新增對應的列存索引(名稱為arctmp_+歸檔表表名),這個列存索引就是歸檔表專用的列存索引。詳細說明請參見原理概述

因此,通過對TTL表執行SHOW CREATE TABLE指令,便可以查詢到歸檔表的列存索引定義及其分區情況。

例如,TTL表my_ttl_tbl的歸檔表my_arc_tbl所對應的列存索引名為arctmp_my_arc_tbl。歸檔表my_arc_tbl實質上是一個顯式指定列存索引arctmp_my_arc_tbl的查詢視圖,如下所示:

  • 顯示所有表。

    show tables;
    +------------------+
    | Tables_in_ttldb |
    +------------------+
    | my_ttl_tbl       |
    | my_arc_tbl       |
    +------------------+
    2 rows in set (0.00 sec)
  • 對TTL表執行SHOW CREATE TABLE

    show create table my_ttl_tbl\G;
    *************************** 1. row ***************************
           Table: my_ttl_tbl
    Create Table: CREATE TABLE `my_ttl_tbl` (
            `id` int(11) NOT NULL AUTO_INCREMENT,
            `date_field` datetime DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (`id`),
            CLUSTERED COLUMNAR INDEX `arctmp_my_arc_tbl` (`date_field`)
                    PARTITION BY RANGE COLUMNS(`date_field`)
                    (PARTITION `pstart` VALUES LESS THAN ('1970-01-02 00:00:00') ENGINE = Columnar,
                     PARTITION `p201903` VALUES LESS THAN ('2019-04-01 00:00:00') ENGINE = Columnar,
                     ...
                     PARTITION `p202506` VALUES LESS THAN ('2025-07-01 00:00:00') ENGINE = Columnar,
                     PARTITION `p202507` VALUES LESS THAN ('2025-08-01 00:00:00') ENGINE = Columnar)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 TTL = TTL_DEFINITION( TTL_ENABLE = 'OFF', TTL_EXPR = `date_field` EXPIRE AFTER 2 MONTH TIMEZONE '+08:00', TTL_JOB = CRON '0 0 1 * * ? *' TIMEZONE '+08:00', ARCHIVE_TYPE = 'COLUMNAR', ARCHIVE_TABLE_NAME = 'my_arc_tbl', ARCHIVE_TABLE_PRE_ALLOCATE = 12, ARCHIVE_TABLE_POST_ALLOCATE = 64 )
    PARTITION BY KEY(`id`)
    PARTITIONS 8
    1 row in set (0.00 sec)
  • 對歸檔表執行SHOW CREATE TABLE

    show create table my_arc_tbl\G;
    *************************** 1. row ***************************
                    View: my_arc_tbl
             Create View: CREATE VIEW `my_arc_tbl` AS SELECT `my_ttl_tbl`.`id`, `my_ttl_tbl`.`date_field`
    FROM `ttldb`.`my_ttl_tbl` FORCE INDEX(`ARCTMP_MY_ARC_TBL`)
    character_set_client: utf8
    collation_connection: utf8_general_ci
    1 row in set (0.00 sec)

查詢歸檔表數據

基于歸檔表my_arc_tbl這個查詢視圖,您可以方便地查詢TTL表中所有已完成歸檔的歷史數據。例如:

select count(1) from my_arc_tbl;
說明

查詢歸檔表數據時,需要將遠端的OSS文件拉取至本地磁盤。這是一項相對耗費I/O資源的操作,在未命中本地OSS緩存的情況下,查詢時間可能會較慢。因此,建議業務低頻次執行。

刪除歸檔表

TTL表與歸檔表之間存在強綁定的一對一關系(每個TTL表最多只能創建一個歸檔表)。因此,刪除操作需注意:

  • 若TTL表被刪除,其對應的歸檔表也會被同步刪除。

  • 若歸檔表被刪除,其對應的TTL表不會被刪除。但是,TTL表的清理任務將變為單純的數據清理,被清理的數據不會再被歸檔。

默認情況下,為防止誤操作刪除已歸檔的歷史數據,歸檔表的DROP TABLE操作會被限制。

例如,TTL表my_ttl_tbl所綁定的歸檔表為my_arc_tbl,直接刪除my_arc_tbl會觸發如下報錯:

  • 顯示所有表。

    show tables;
    +------------------+
    | Tables_in_ttldb |
    +------------------+
    | my_ttl_tbl       |
    | my_arc_tbl       |
    +------------------+
    2 rows in set (0.00 sec)
  • 對歸檔表執行DROP TABLE

    DROP TABLE my_arc_tbl;

    返回錯誤如下:

    ERROR 4601 (HY000): [189b8f1eb7cxxxxx][10.57.xxx.xxx:xxxx][ttldb]ERR-CODE: [TDDL-4601][ERR_EXECUTOR] Forbid to drop the ttl-defined table `ttldb`.`my_arc_tbl` with archive cci, 
    please use the hint /*TDDL:cmd_extra(TTL_FORBID_DROP_TTL_TBL_WITH_ARC_CCI=false)*/ to drop this table

若您確認需要單獨刪除歸檔表,可使用以下DROP TABLE語法來完成此操作。例如,您想要刪除名為my_arc_tbl的歸檔表:

/*+TDDL:CMD_EXTRA(TTL_FORBID_DROP_TTL_TBL_WITH_ARC_CCI=false)*/
DROP TABLE my_arc_tbl;
說明

DROP TABLE前面所附的HINT/*+TDDL:CMD_EXTRA(TTL_FORBID_DROP_TTL_TBL_WITH_ARC_CCI=false)*/是用于解除上述防止誤刪除限制的。

DDL相關限制

TTL表與歸檔表之間存在強綁定的一對一關系(每個TTL表最多只能創建一個歸檔表)。因此,當TTL表創建歸檔表后,將會有一些DDL操作的限制,具體如下所示:

  • 含有歸檔表的TTL表,默認不允許執行普通的CREATE TABLE LIKE語句(即不包含參數ENGINE = 'Columnar' ARCHIVE_MODE = 'TTL')的DDL操作。如果需要對TTL表執行CREATE TABLE LIKE語句,則須在語句前添加HINT/*+TDDL:CMD_EXTRA(ALLOW_CREATE_TABLE_LIKE_IGNORE_ARCHIVE_CCI=true)*/,來自動去除歸檔表的相關定義。

    例如:

    /*+TDDL:CMD_EXTRA(ALLOW_CREATE_TABLE_LIKE_IGNORE_ARCHIVE_CCI=true)*/
    CREATE TABLE my_tbl2 like my_ttl_tbl;
  • 含有歸檔表的TTL表,默認不允許對TTL列進行列名或列類型等變更,例如MODIFY COLUMNSCHANGE COLUMNSRENAME COLUMNS等DDL操作。這是由于TTL列的變更可能會觸發歸檔表的重分區,因此暫時不支持對TTL列進行相關操作。