全部產品
Search
文件中心

PolarDB:TTL使用說明

更新時間:Nov 20, 2025

本文介紹了PolarDB MySQL版的到期資料清理功能。

版本限制

PolarDB MySQL版適用的資料庫引擎版本如下:

  • MySQL 8.0.1且小版本需為8.0.1.1.49.2及以上版本。

  • MySQL 8.0.2且小版本需為8.0.2.2.29.2及以上版本。

如何查看核心版本,請參見核心版本說明

注意事項

  • 不允許在暫存資料表上設定TTL屬性,包括本地暫存資料表和全域暫存資料表。

  • 具有TTL屬性的表不支援列存索引(IMC)、多主叢集(Limitless)、GSI和分區表等功能。

  • 具有TTL屬性的表不支援作為外鍵約束的主表被其他表引用。

  • 具有TTL屬性的表,不允許包含觸發器。

  • 不保證所有到期資料會立即被刪除,到期資料的刪除時間取決於後台清理任務的調度周期。

  • 在使用庫表或備份進行恢複時,需要將loose_innodb_enable_ttl_purge設定為OFF,以關閉TTL清理到期資料的功能。這是因為在恢複後,所有資料可能已經到期。

  • 具有TTL屬性的列,必須是TIMESTAMP類型。

  • 通過TTL資料清理的資料不會產生Binlog記錄,當通過Binlog進行資料同步時,如果源庫中的一張表已開啟TTL功能,那麼在將同步資料到備庫時,可能會出現索引值衝突的情況。

文法說明

可以通過CREATE TABLEALTER TABLE語句來配置表的TTL功能。

建立具有TTL屬性的表

您可以使用以下兩種方法中的一種來建立TTL屬性的表:

建立了一張名為t1的表,並指定created_at為TTL的時間列,表示資料的建立時間。通過設定created_at存活時間來調整資料是否被刪除。

  • 設定created_at最長存活時間為100秒。

    CREATE TABLE `t1` (
      `a` INT PRIMARY KEY,
      `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      KEY idx_created_at (`created_at`)
    )ENGINE=InnoDB  TTL='created_at@100';
    說明

    通過TTL='created_at@100'設定了表中行的最長存活時間為100秒。超過此時間長度的到期資料將在之後被刪除。

  • 設定created_at最長存活時間為3小時。

    CREATE TABLE `t1` (
      `a` INT PRIMARY KEY,
      `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      KEY idx_created_at (`created_at`)
    )ENGINE=InnoDB  TTL='created_at' + INTERVAL 3 HOUR;
    說明
    • 通過設定TTL ='created_at'+ INTERVAL 3 HOUR,您可以將表中的最長存活時間設為3小時,超出該時間長度的到期資料將被自動刪除。

    • 該TTL(Time To Live)設定支援多種時間單位,包括YEAR(年)、QUARTER(季度)、MONTH(月)、WEEK(周)、DAY(天)、HOUR(小時)、MINUTE(分鐘)和SECOND(秒)。這種靈活性使得您能夠根據具體需求選擇合適的時間單位,實現高效的資料管理和維護。

修改表的TTL屬性

您可以使用以下兩種方法中的一種來修改表的TTL屬性:

通過修改t1表中created_at存活時間來調整資料是否被刪除。

  • 修改created_at最長存活時間為10000秒。

    ALTER TABLE `t1` TTL='created_at@10000';
    說明

    通過在created_at欄位上設定TTL為10000秒,確保資料在建立時間後的10000秒內,超過10000秒的資料會被自動刪除。

  • 修改created_at最長存活時間為3天。

    ALTER TABLE `t1` TTL='created_at' + INTERVAL 3 DAY;
    說明

    通過在TTL屬性中使用created_at時間戳記並增加3天的有效期間,設定資料的到期時間為3天,從而確保資料在建立後不會超過3天,超出3天的資料會被自動刪除。

清除一張表的TTL屬性

ALTER TABLE t1 TTL = '';

查詢一張表的TTL屬性

SHOW CREATE TABLE `t1` FULL;

CREATE TABLE `t1` (  
`a` INT PRIMARY KEY,  
`created_at` TIMESTAMP DEFAULT 
CURRENT_TIMESTAMP,  
 KEY idx_created_at (`created_at`)
)ENGINE=InnoDB  TTL='created_at@259200';
說明

可以通過以上語句來查詢某一個表是否包含TTL資訊。

參數說明

同時添加了以下全域參數來控制TTL到期資料的清理:

說明

PolarDB支援通過控制台修改以下全域參數,來控制TTL到期資料清理。

參數名稱

描述

loose_innodb_enable_ttl_purge

是否開啟TTL到期資料的清理。

取值範圍如下:

  • ON:開啟TTL到期資料的清理。

  • OFF(預設):關閉TTL到期資料的清理。

說明

需要您自行前往控制台開啟TTL到期資料清理功能。

loose_innodb_ttl_min_interval

設定資料到期時間時,允許的最小時間,預設值為100,預設單位為秒。

loose_innodb_ttl_purge_thread

清理TTL到期資料的線程數。修改後需重設innodb_enable_ttl_purge參數才會生效,預設為4。

loose_innodb_ttl_cluster_index_purge_batch_size

如果指定的TTL列沒有索引,掃描TTL到期資料時將掃描主鍵,一次掃描主鍵的行數預設為10,000。

loose_innodb_ttl_index_purge_batch_size

如果指定的TTL列已建立索引,掃描TTL到期資料時將掃描此索引,一次掃描此索引的行數預設為500。

loose_innodb_ttl_purge_start_hour

TTL清理任務開始的時間,預設為0,取值範圍為0~23,不得超過innodb_ttl_purge_end_hour

loose_innodb_ttl_purge_end_hour

TTL清理任務結束的時間,預設為0,取值範圍為0~23,不得小於innodb_ttl_purge_start_hour

loose_innodb_ttl_finished_job_expired_days

控制mysql. ttl_job_history表內資料到期時間,預設值為90,取值範圍為1~365,預設單位為天。

觀測TTL

系統會定時採集TTL運行時的資訊,並提供一張系統資料表,用於展示TTL清理任務執行的具體狀況,mysql.ttl_job_history表中欄位說明如下:

列名

描述

job_id

TTL清理的任務ID,一般為時間戳記,毫秒級。

table_name

表示此次TTL執行的任務對應的表名稱。

state

TTL任務執行的狀態,包括掛起、執行中和完成。

start_time

任務的開始時間。

finished_time

任務的完成時間。

expire_time

此次TTL任務清理的資料的到期時間。

scan_cost

掃描此批次所用的耗時。

purge_cost

清理此批次所用的耗時。

purge_rows

此次TTL任務清理的資料行數。