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

PolarDB:TTL の使用ガイド

最終更新日:Feb 11, 2026

このトピックでは、PolarDB for 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 プロパティが設定されたテーブルでは、IMCIグローバルセカンダリインデックス (GSI)、およびパーティションテーブルなどの機能はサポートされません。

  • TTL プロパティが設定されたテーブルは、他のテーブルから参照される外部キー制約のプライマリテーブルとして使用できません。

  • TTL プロパティが設定されたテーブルには、トリガーを定義できません。

  • 期限切れデータは即時に削除される保証はありません。削除タイミングは、バックグラウンドで実行されるクリーンアップタスクのスケジューリング周期に依存します。

  • バックアップまたはデータベースダンプからのデータ復元を行う際は、TTL による自動クリーンアップを無効化するため、loose_innodb_enable_ttl_purge を OFF に設定してください。これにより、復元された全データが既に期限切れである場合に意図しない削除が発生することを防止できます。

  • TTL に指定するカラムは、必ず TIMESTAMP 型である必要があります。

  • TTL によってクリーンアップされたデータは、バイナリログ(binlog)レコードを生成しません。binlog を用いたデータ同期を利用する場合、ソースデータベースのテーブルに TTL が有効になっていると、セカンダリデータベースへの同期時にキーコンフリクトが発生する可能性があります。

構文

TTL をテーブルに設定するには、CREATE TABLE 文または ALTER TABLE 文を使用します。

TTL を指定してテーブルを作成する

以下のいずれかの方法で、TTL を指定したテーブルを作成できます。

t1 という名前のテーブルを作成し、データの作成時間を表す TTL タイムスタンプ列として created_at を指定します。 created_at の生存時間 (TTL) の値を設定して、データの削除をコントロールします。

  • created_at の最大 TTL を 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 の最大 TTL を 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 を構成します。3 時間以上経過したデータは自動的に削除されます。

    • この TTL(生存時間)構文では、YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND の複数の時間単位がサポートされています。データ管理のニーズに最も適した単位を選択してください。

テーブルの TTL を変更する

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

t1 テーブルの TTL を、created_at カラムの生存時間(TTL)値を調整することで変更します。

  • created_at の最大 TTL を 10,000 秒に設定します。

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

    created_at カラムに TTL を 10,000 秒に設定すると、データは作成後 10,000 秒経過時点で削除されます。

  • created_at の最大 TTL を 3 日間に設定します。

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

    created_at タイムスタンプに 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

TTL の最小許容間隔。デフォルト値:100。単位:秒。

loose_innodb_ttl_purge_thread

期限切れ TTL データのクリーンアップに使用されるスレッド数。デフォルト値:4。このパラメーターを変更した後は、変更を有効化するために innodb_enable_ttl_purge パラメーターを再起動する必要があります。

loose_innodb_ttl_cluster_index_purge_batch_size

TTL カラムにインデックスがない場合、クリーンアップタスクはプライマリキーをスキャンします。1 バッチあたりのデフォルトスキャン行数:10,000 行。

loose_innodb_ttl_index_purge_batch_size

TTL カラムにインデックスがある場合、クリーンアップタスクはそのインデックスをスキャンします。1 バッチあたりのデフォルトスキャン行数: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 のランタイムメトリックを定期的に収集します。mysql.ttl_job_history システムテーブルを提供しており、TTL クリーンアップタスクの詳細情報を表示します。各カラムの説明は以下のとおりです:

カラム

説明

job_id

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

table_name

この TTL クリーンアップジョブの対象となるテーブル名。

state

TTL ジョブの状態:一時停止中、実行中、完了。

start_time

ジョブの開始時刻。

finished_time

ジョブの完了時刻。

expire_time

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

scan_cost

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

purge_cost

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

purge_rows

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