このトピックでは、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 に基づくクリーンアップを有効化または無効化します。 有効な値:
説明 TTL クリーンアップは、コンソールから手動で有効化する必要があります。 |
loose_innodb_ttl_min_interval | TTL の最小許容間隔。デフォルト値:100。単位:秒。 |
loose_innodb_ttl_purge_thread | 期限切れ TTL データのクリーンアップに使用されるスレッド数。デフォルト値:4。このパラメーターを変更した後は、変更を有効化するために |
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。また、 |
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 ジョブの状態:一時停止中、実行中、完了。 |
start_time | ジョブの開始時刻。 |
finished_time | ジョブの完了時刻。 |
expire_time | この TTL ジョブによってクリーンアップされたデータの有効期限。 |
scan_cost | このバッチのスキャンに要した時間。 |
purge_cost | このバッチのクリーンアップに要した時間。 |
purge_rows | この TTL ジョブによってクリーンアップされた行数。 |