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

PolarDB:TTL の使用方法

最終更新日:Jun 06, 2026

このトピックでは、PolarDB for MySQL で期限切れのデータを自動的に削除する Time to Live (TTL) 機能を説明します。

バージョン制限

PolarDB for MySQL は、以下のデータベースエンジンバージョンをサポートしています。

  • MySQL 8.0.1、リビジョンバージョン 8.0.1.1.49.2 以降。

  • MySQL 8.0.2、リビジョンバージョン 8.0.2.2.29.2 以降。

詳細については、「カーネルバージョンの説明」をご参照ください。

注意事項

  • ローカル一時テーブルやグローバル一時テーブルを含む一時テーブルには、TTL プロパティを設定できません。

  • TTL プロパティを持つテーブルは、グローバルセカンダリインデックス (GSI) やパーティションテーブルなどの機能をサポートしていません。

  • TTL プロパティを持つテーブルは、外部キー制約において、他のテーブルからプライマリテーブルとして参照できません。

  • TTL プロパティを持つテーブルにトリガーを含めることはできません。

  • 期限切れのデータは、すぐに削除されない場合があります。期限切れデータの削除タイミングは、バックグラウンドのクリーンアップジョブのスケジューリングサイクルによって決まります。

  • データベーステーブルまたはバックアップから復元する場合、loose_innodb_enable_ttl_purge を OFF に設定して、TTL に基づいて期限切れのデータをパージする機能を無効にする必要があります。これは、復元後にすべてのデータが期限切れになっている可能性があるためです。

  • TTL プロパティを持つ列は、TIMESTAMP 型または DATETIME 型である必要があります。

  • TTL 機能によって削除されたデータは、バイナリログレコードを生成しません。したがって、データ同期にバイナリロギングを使用し、ソースデータベースのテーブルで TTL 機能が有効になっている場合、セカンダリデータベースでキー値の競合が発生する可能性があります。

構文

CREATE TABLE または ALTER TABLE ステートメントを使用して、テーブルの TTL 機能を設定できます。

TTL プロパティを持つテーブルの作成

以下のいずれかの方法を使用して、TTL プロパティを持つテーブルを作成できます。

t1 という名前のテーブルが作成されます。ここで、created_at はデータの作成時刻を格納する Time to Live (TTL) 列です。created_at 列に基づいて TTL 値を設定し、データが削除されるタイミングを決定できます。

  • created_at の Time to Live を 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' は、テーブル内の行の Time to Live を 100 秒に設定します。この期間より古い行は期限切れとしてマークされ、後で削除されます。

  • created_at の Time to Live を 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 は、テーブル内の行の Time to Live を 3 時間に設定します。期限切れのデータは自動的に削除されます。

    • TTL 設定は、YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND などの複数の時間単位をサポートしています。この柔軟性により、要件に基づいて効率的なデータ管理のために適切な時間単位を選択できます。

テーブルの TTL プロパティの変更

以下のいずれかの方法を使用して、テーブルの TTL プロパティを変更できます。

以下の例では、t1 テーブルの created_at 列の Time to Live を変更します。

  • created_at の Time to Live を 10,000 秒に変更します。

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

    この設定により、created_at フィールドの値に基づいて、データが作成時刻から 10,000 秒後に自動的に削除されるようになります。

  • created_at の Time to Live を 3 日に変更します。

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

    これにより、データの有効期限が created_at 列の値から 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 プロパティがあるかどうかを確認できます。

パラメータの説明

以下のグローバルパラメータは、期限切れデータのクリーンアップを制御します。

説明

PolarDB コンソールで以下のグローバルパラメータを変更して、期限切れデータのクリーンアップを制御できます。

パラメータ名

説明

loose_innodb_enable_ttl_purge

TTL で期限切れになったデータのクリーンアップを有効にするかどうかを指定します。

有効な値:

  • ON: TTL で期限切れになったデータのクリーンアップを有効にします。

  • OFF (デフォルト) : TTL で期限切れになったデータのクリーンアップを無効にします。

説明

コンソールで、TTL 期限切れデータクリーンアップ機能を有効にする必要があります。

loose_innodb_ttl_min_interval

データ有効期限として設定できる最小時間。デフォルト値は 100 で、デフォルトの単位は秒です。

loose_innodb_ttl_purge_thread

TTL で期限切れになったデータをクリーンアップするためのスレッド数。このパラメータを変更した後、変更を有効にするには loose_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 です。この値は loose_innodb_ttl_purge_end_hour より大きくすることはできません。

loose_innodb_ttl_purge_end_hour

TTL クリーンアップジョブの終了時刻。デフォルト値は 0 です。値の範囲は 0 から 23 です。この値は loose_innodb_ttl_purge_start_hour より小さくすることはできません。

loose_innodb_ttl_finished_job_expired_days

mysql.ttl_job_history テーブル内のデータの有効期限を制御します。デフォルト値は 90 です。値の範囲は 1 から 365 です。デフォルトの単位は日です。

TTL の監視

システムは定期的に TTL のランタイム情報を収集します。mysql.ttl_job_history システムテーブルで TTL クリーンアップジョブの実行ステータスを確認できます。次の表に、このテーブルのフィールドを示します。

列名

説明

job_id

TTL クリーンアップジョブの ID。通常はミリ秒単位のタイムスタンプです。

table_name

この TTL ジョブが処理するテーブルの名前。

state

TTL ジョブの実行ステータス。pending、executing、completed が含まれます。

start_time

ジョブの開始時刻。

finished_time

ジョブの完了時刻。

expire_time

この TTL ジョブによってクリーンアップされたデータの有効期限。

scan_cost

このバッチのスキャンに要した時間。

purge_cost

このバッチのクリーンアップに要した時間。

purge_rows

この TTL ジョブによってクリーンアップされたデータ行の数。