すべてのプロダクト
Search
ドキュメントセンター

:TTL テーブルの定義

最終更新日:Jul 10, 2025

このトピックでは、Time to Live(TTL)テーブルの定義、およびテーブルの TTL 定義を指定、変更、削除する方法について説明します。

前提条件

  • 以下の要件のいずれかを満たす PolarDB-X インスタンスが作成されていること。

    • インスタンスのエンジンバージョンが 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 以降である。

    説明

    バージョン番号の詳細については、「リリースノート」をご参照ください。

    インスタンスバージョンの確認方法については、「インスタンスのバージョンを表示および更新する」をご参照ください。

  • AUTO モードのデータベースに属し、LOCAL PARTITION BY 句を使用してパーティション化されていないパーティションテーブルが使用されていること。

TTL 定義

データベースコンテキストにおける TTL は、データベース内のデータの保持期間を指します。保持期間が終了すると、データは自動的に削除されるか、期限切れとしてマークされます。 TTL 定義を使用してデータのライフサイクルを設定し、データの自動期限切れを実装できます。

PolarDB-X 2.0 の TTL 定義は、TTL_EXPR、TTL_JOB、TTL_ENABLE、および TTL_FILTER の各属性で構成されます。 TTL_JOB、TTL_ENABLE、および TTL_FILTER 属性はオプションです。

TTL_EXPR

TTL テーブルの時間列とデータ保持期間を指定します。

  • 構文:

    TTL_EXPR = ttl_column EXPIRE AFTER ttl_interval_definition timezone_definition
    
    ttl_interval_definition:
      ttl_interval_num { DAY | MONTH | YEAR }
    
    timezone_definition:
      TIMEZONE time_zone_value
    説明
    • ttl_column: TTL テーブルの時間列。Date、Datetime、Timestamp 型の列のみがサポートされています。

    • ttl_interval_definition: TTL テーブル内のデータの保持期間。単位: DAY、MONTH、YEARnow() の値と ttl_column の値の差が、ttl_interval_definition で指定された ttl_interval_num の値よりも大きい場合、システムは ttl_column の値を持つ対応するデータを自動的にクリーンアップします。

    • timezone_definition: TTL テーブルのタイムゾーン。Timestamp などのタイムゾーン依存型の場合、TTL 定義でタイムゾーンを指定して、タイムゾーンベースのクリーンアップを実装できます。

  • 例:

    TTL_EXPR = `date_field` EXPIRE AFTER 2 MONTH TIMEZONE '+08:00'
    説明
    • date_field 列は、TTL テーブルの時間列です。

    • 2 MONTH は、データ保持期間が 2 か月であることを指定します。指定された時間列の値に基づいて、2 か月の保持期間が終了すると、テーブル内のデータは期限切れになります。

    • +08:00 は、タイムゾーンが UTC + 08:00 であることを指定します。

TTL_JOB

クリーンアップジョブを実行するスケジュールを指定します。デフォルト値: '0 0 1 */1 * ? *'。これは、クリーンアップジョブが毎日 01:00 に実行されることを指定します。

  • 構文:

    TTL_JOB = quartz_cron_expr_definition timezone_definition
    
    quartz_cron_expr_definition:
       CRON cron_expr_value
    
    timezone_definition:
      TIMEZONE time_zone_value
    説明

    quartz_cron_expr_definition: クリーンアップジョブを実行するスケジュール。値は、Quartz フレームワークの CRON 式で、以下の部分で構成されます。

    • 秒。有効な値: 0 ~ 59。

    • 分。有効な値: 0 ~ 59。

    • 時。有効な値: 0 ~ 23 およびアスタリスク (*)。アスタリスク (*) は、クリーンアップジョブが毎時実行されることを指定します。

    • 日。月の何日目を指定します。有効な値: 1 ~ 31 およびアスタリスク (*)。アスタリスク (*) は、クリーンアップジョブが毎日実行されることを指定します。

    • 月。有効な値: 1 ~ 12 または JAN、FEB、MAR、APR、...、DEC、およびアスタリスク (*)。アスタリスク (*) は、クリーンアップジョブが毎月実行されることを指定します。

    • 曜日。有効な値: 1 ~ 7 または SUN、MON、TUE、WED、THU、FRI、SAT、および疑問符 (?)。1 は日曜日を指定します。疑問符 (?) はプレースホルダーとして機能し、値が設定されていないことを指定します。

    • 年。有効な値: 年の値およびアスタリスク (*)。アスタリスク (*) は、クリーンアップジョブが毎年実行されることを指定します。

    重要

    スケジュールされたクリーンアップジョブは、特定量のリソースを消費します。頻繁なクリーンアップジョブがビジネスの安定性に影響を与えるのを防ぐため、PolarDB-X 2.0 では、クリーンアップジョブの実行スケジュールを分または秒単位の式に設定することはできません。

  • 例: スケジュールされたクリーンアップジョブを毎日 02:00 に実行するように設定します。

     TTL_JOB = CRON '0 0 2 */1 * ?  *' TIMEZONE '+08:00'

TTL_ENABLE

TTL テーブルのスケジュールされたクリーンアップジョブを有効にするかどうかを指定します。

TTL_ENABLE = {'ON' | 'OFF'}
説明

この属性はオプションです。デフォルト値は 'OFF' で、スケジュールされたクリーンアップジョブが無効になっていることを指定します。

TTL_FILTER

TTL テーブルに対してクリーンアップジョブがトリガーされると、デフォルトでは、時間列の値が NULL の行が削除されます。これらの行を保持するには、TTL テーブルに TTL_FILTER=COND_EXPR(<ttl_column> IS NOT NULL) を明示的に設定します。

サンプルコード:

ALTER TABLE `my_ttl_tbl` 
MODIFY TTL
SET
TTL_FILTER = COND_EXPR(`date_field` IS NOT NULL); 
重要

この属性は、次のバージョンのインスタンスでサポートされています。

  • MySQL 5.7 を実行するインスタンスの場合、インスタンスバージョンは polardb-2.5.0_5.4.20-20250328_xcluster5.4.20-20250221 以降である必要があります。

  • MySQL 8.0 を実行するインスタンスの場合、インスタンスバージョンは polardb-2.5.0_5.4.20-20250328_xcluster8.4.20-20250304 以降である必要があります。

TTL 定義の指定

既存のテーブルに TTL 定義を指定する

この例では、次の文を実行して my_ttl_tbl という名前のテーブルを作成します。

CREATE TABLE `my_ttl_tbl` (
	`id` int(11) NOT NULL AUTO_INCREMENT,
	`date_field` datetime DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY(`id`)
PARTITIONS 8;

次の ALTER 文を実行して、my_ttl_tbl テーブルの TTL 定義を指定します。

ALTER TABLE my_ttl_tbl
MODIFY TTL
SET
TTL_EXPR = `date_field` EXPIRE AFTER 2 MONTH TIMEZONE '+08:00';
説明

上記の my_ttl_tbl テーブルの TTL 定義では、date_field 列が時間列であり、2 MONTH はデータ保持期間が 2 か月であることを指定し、+08:00 はスケジュールされたクリーンアップジョブのタイムゾーンが UTC + 08:00 であることを指定します。

テーブルの作成時に TTL 定義を指定する

次の文を実行して、TTL 定義を指定した my_ttl_tbl という名前のテーブルを作成します。

CREATE TABLE `my_ttl_tbl` (
	`id` int(11) NOT NULL AUTO_INCREMENT,
	`date_field` datetime DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 TTL = TTL_DEFINITION ( TTL_EXPR = `date_field` EXPIRE AFTER 2 MONTH TIMEZONE '+08:00' ) 
PARTITION BY KEY(`id`)
PARTITIONS 8;
説明

上記の my_ttl_tbl テーブルの定義では、date_field 列が時間列であり、2 MONTH はデータ保持期間が 2 か月であることを指定し、+08:00 はスケジュールされたクリーンアップジョブのタイムゾーンが UTC + 08:00 であることを指定します。

TTL 定義の変更

my_ttl_tbl という名前のテーブルを作成するときに、時間列として指定された date_field 列を含む TTL 定義を指定します。

CREATE TABLE `my_ttl_tbl` (
	`id` int(11) NOT NULL AUTO_INCREMENT,
	`date_field` datetime DEFAULT CURRENT_TIMESTAMP,
	`create_date` datetime DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 TTL = TTL_DEFINITION ( TTL_EXPR = `date_field` EXPIRE AFTER 2 MONTH TIMEZONE '+08:00' ) 
PARTITION BY KEY(`id`)
PARTITIONS 8;

時間列の変更

次の ALTER 文を実行して、TTL 定義の時間列を date_field から create_date に変更します。

ALTER TABLE my_ttl_tbl 
MODIFY TTL
SET
TTL_EXPR = `create_date` EXPIRE AFTER 2 MONTH TIMEZONE '+08:00';

データ保持期間の変更

ALTER TABLE `my_ttl_tbl` 
MODIFY TTL
SET
TTL_EXPR = `create_date` EXPIRE AFTER 2 YEAR TIMEZONE '+08:00';
説明
  • データ保持期間は 2 YEAR に変更されます。指定された時間列の値に基づいて、2 年の保持期間が終了すると、テーブル内のデータは期限切れになります。

  • データ保持期間を変更する場合は、TIMEZONE パラメーターを指定する必要があります。

クリーンアップジョブの実行スケジュールの変更

ALTER TABLE `my_ttl_tbl` 
MODIFY TTL
SET
TTL_JOB = CRON '0 0 3 */1 * ?  *' TIMEZONE '+08:00';
説明
  • クリーンアップジョブの実行スケジュールは CRON '0 0 3 */1 * ? *' に変更されます。クリーンアップジョブは毎日 03:00 に実行されます。

  • クリーンアップジョブの実行スケジュールを変更する場合は、TIMEZONE パラメーターを指定する必要があります。

スケジュールされたクリーンアップジョブの有効化ステータスの変更

ALTER TABLE `my_ttl_tbl` 
MODIFY TTL
SET
TTL_ENABLE = 'ON';
説明

TTL 定義の TTL_ENABLE 属性のデフォルト値は OFF で、クリーンアップジョブが無効になっていることを指定します。クリーンアップジョブの自動スケジューリングを有効にするには、上記の文を実行します。

TTL 定義の削除

ALTER TABLE my_ttl_tbl REMOVE TTL;
重要

TTL テーブルのアーカイブテーブルを作成した場合、テーブルの TTL 定義を直接削除することはできません。TTL 定義を削除する前に、アーカイブテーブルを削除する必要があります。