このトピックでは、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 で期限切れになったデータのクリーンアップを有効にするかどうかを指定します。 有効な値:
説明
コンソールで、TTL 期限切れデータクリーンアップ機能を有効にする必要があります。 |
|
loose_innodb_ttl_min_interval |
データ有効期限として設定できる最小時間。デフォルト値は 100 で、デフォルトの単位は秒です。 |
|
loose_innodb_ttl_purge_thread |
TTL で期限切れになったデータをクリーンアップするためのスレッド数。このパラメータを変更した後、変更を有効にするには |
|
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 |
TTL クリーンアップジョブの終了時刻。デフォルト値は 0 です。値の範囲は 0 から 23 です。この値は |
|
loose_innodb_ttl_finished_job_expired_days |
|
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 ジョブによってクリーンアップされたデータ行の数。 |