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

:TTL テーブルの期限切れデータのクリーンアップ

最終更新日:Jul 10, 2025

PolarDB-X 2.0 では、Time to Live(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 テーブルのクリーンアップジョブがトリガーされると、デフォルトで、time 列の値が NULL の行が削除されます。 これらの行を保持するには、TTL_FILTER 属性を明示的に設定します。

クリーンアップジョブの開始

TTL テーブルの期限切れデータのクリーンアップジョブを開始するには、次のいずれかの方法を使用できます。

  • スケジュールされた開始: TTL_JOB 属性を設定して、システムがスケジュールに従って自動的にクリーンアップジョブを開始できるようにします。

  • 手動開始: ALTER TABLE CLEANUP EXPIRED DATA 文を手動で実行して、クリーンアップジョブを開始します。

重要

システムでは、最大 2 つの TTL テーブルでクリーンアップジョブを同時に実行できます。 その他のクリーンアップジョブは、実行のためにキューに入れられる必要があります。

使用方法

  • スケジュールされた開始

    例:

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

    my_ttl_tbl TTL テーブルのスケジュールされたクリーンアップジョブが有効になります。 デフォルトでは、クリーンアップジョブは無効になっています。

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

    • TTL_JOB 属性で指定されたスケジュールは、想定される時刻値です。 クリーンアップジョブの実際の実行時間は、前のジョブが完了しているかどうかによって異なります。 複数の TTL テーブルのクリーンアップジョブが実行中でキューに入れられている場合、クリーンアップジョブは、実行中およびキューに入れられているクリーンアップジョブが完了するまで待機する必要があります。

  • 手動開始

    例:

    /*+TDDL:cmd_extra(ENABLE_ASYNC_DDL=true, PURE_ASYNC_DDL_MODE=true)*/
    ALTER TABLE `my_ttl_tbl` CLEANUP EXPIRED DATA;
    説明
    • /*+TDDL:cmd_extra(ENABLE_ASYNC_DDL=true, PURE_ASYNC_DDL_MODE=true)*/ は、DDL 文をバックグラウンドで非同期的に実行するように設定するために使用されます。 現在のセッションで結果が返されるのを待つ必要はありません。

    • ALTER TABLE CLEANUP EXPIRED DATA 文は、TTL テーブルに対してのみサポートされています。

クリーンアップ時間範囲の計算

TTL テーブルは、最も古いものから最も新しいものへのバッチデータクリーンアップアルゴリズムを使用してデータを削除します。 クリーンアッププロセスは最も古いデータから始まり、各サイクル中に一定の時間間隔でデータを削除します。

次の文を実行して、TTL 定義で my_ttl_tbl テーブルのデータ保持期間を変更します。

ALTER TABLE `my_ttl_tbl` 
MODIFY TTL 
SET 
TTL_EXPR = `time` EXPIRE AFTER 1 MONTH TIMEZONE '+08:00'
説明
  • テーブルのデータ保持期間は 1 か月です。

  • クリーンアップジョブのクリーンアップ時間範囲は、データ保持期間の 3 倍です。 この例では、クリーンアップ時間範囲は 3 か月です。

たとえば、現在の時刻が 2023-10-01 で、オンライントランザクションテーブルでは最新月のデータのみを保持する必要があるとします。 次の図は、クリーンアッププロセスを示しています。

説明
  • 1 日目:

    この例では、TTL で定義された time 列の最小時間値は 2022-10-05(最小値) で、データクリーンアップ時間間隔 (CleanupDataInterval) は 3 か月です。 データクリーンアップ時間間隔の詳細については、「データクリーンアップ時間間隔の変更」をご参照ください。 最小時間値とデータクリーンアップ時間間隔に基づいて、最初のクリーンアップ時間範囲は 2022 年 10 月 5 日 (含む) から 2023 年 1 月 1 日 (含まない) です。 後続のクリーンアップ時間範囲は、2023 年 1 月 1 日 (含む) から 2023 年 4 月 1 日 (含まない)、2023 年 4 月 1 日 (含む) から 2023 年 7 月 1 日 (含まない)、および 2023 年 7 月 1 日 (含む) から 2023 年 9 月 1 日 (含まない) です。

  • 2 日目:

    2023 年 1 月 1 日 (含む) から 2023 年 4 月 1 日 (含まない) の時間範囲のデータをクリーンアップします。 2023 年 4 月 1 日は、クリーンアップジョブの上限 (CleanupUpperBound) です。

  • 3 日目:

    2023 年 4 月 1 日 (含む) から 2023 年 7 月 1 日 (含まない) の時間範囲のデータをクリーンアップします。 2023 年 7 月 1 日は、クリーンアップジョブの上限 (CleanupUpperBound) です。

  • 4 日目:

    2023 年 7 月 1 日 (含む) から 2023 年 9 月 1 日 (含まない) の時間範囲のデータをクリーンアップします。 時間範囲は 2 か月です。 この例では、現在の日付は 2023 年 10 月 1 日で、TTL テーブルは過去 1 か月 (ExpiredDataInterval) のデータを保持するように設定されています。 したがって、クリーンアップジョブは、2023 年 9 月 1 日より前のデータをクリーンアップします。これは、クリーンアップジョブの上限 (CleanupUpperBound) です。

各クリーンアップジョブの上限 (CleanupUpperBound) は、次の式を使用して計算できます。CleanupUpperBound = Min (最小値 + CleanupDataInterval, ExpiredDataInterval)。

クリーンアップジョブの進捗状況のクエリ

TTL テーブルの定義のクエリ

INFORMATION_SCHEMA.TTL_INFO ビューから、現在のデータベース内のすべての TTL テーブルのクリーンアップジョブの定義と有効化ステータスをクエリするには、次の文を実行します。

SELECT  * 
FROM INFORMATION_SCHEMA.TTL_INFO 
WHERE TABLE_SCHEMA='ttldb' AND TABLE_NAME = 'my_ttl_tbl';
*************************** 1. row ***************************
               TABLE_SCHEMA: ttldb
                 TABLE_NAME: my_ttl_tbl
                 TTL_ENABLE: OFF
                    TTL_COL: date_field
                   TTL_EXPR: `date_field` EXPIRE AFTER 2 MONTH TIMEZONE '+08:00'
                   TTL_CRON: 0 0 1 * * ?  *
               ARCHIVE_TYPE: 
       ARCHIVE_TABLE_SCHEMA: NULL
         ARCHIVE_TABLE_NAME: NULL
 ARCHIVE_TABLE_PRE_ALLOCATE: 12
ARCHIVE_TABLE_POST_ALLOCATE: 64
1 row in set (0.07 sec)

次の表に、フィールドを示します。

フィールド

説明

TABLE_SCHEMA

TTL テーブルが属するデータベースの論理名。

TABLE_NAME

TTL テーブルの論理名。

TTL_ENABLE

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

TTL_COL

time 列。

TTL_EXPR

データ保持期間。

TTL_CRON

TTL テーブルのクリーンアップジョブが実行されるスケジュール。 値は、Quartz フレームワークの CRON 式です。

ARCHIVE_TYPE

アーカイブタイプ。 デフォルト値: Columnar。これは、データが行ごとにアーカイブされることを示します。

ARCHIVE_TABLE_SCHEMA

TTL テーブルにバインドされているアーカイブテーブルが属するデータベースの論理名。 TTL テーブルがアーカイブテーブルにバインドされていない場合は、NULL が返されます。

ARCHIVE_TABLE_NAME

TTL テーブルにバインドされているアーカイブテーブルの論理名。 TTL テーブルがアーカイブテーブルにバインドされていない場合は、NULL が返されます。

ARCHIVE_TABLE_PRE_ALLOCATE

パーティション化ルールに基づいて TTL テーブル用に事前に作成されるパーティションの数。

ARCHIVE_TABLE_POST_ALLOCATE

TTL テーブル用に作成されるパーティションの数。

TTL テーブルのクリーンアップジョブに関する情報のクエリ

INFORMATION_SCHEMA.TTL_SCHEDULE ビューから、実行中の TTL テーブルのクリーンアップジョブに関するリアルタイム情報をクエリできます。

次の文を実行して、実行中の my_ttl_tbl TTL テーブルのクリーンアップジョブに関する情報をクエリします。

// クリーンアップジョブを手動で開始します。
ALTER TABLE `my_ttl_tbl` CLEANUP EXPIRED DATA;  
SELECT  * 
FROM INFORMATION_SCHEMA.TTL_SCHEDULE 
WHERE TABLE_SCHEMA='ttldb' AND TABLE_NAME = 'my_ttl_tbl';
+--------------+------------+--------------------------------------+---------------------+
| TABLE_SCHEMA | TABLE_NAME | METRIC_KEY                           | METRIC_VAL          |
+--------------+------------+--------------------------------------+---------------------+
| ttldb        | my_ttl_tbl | SCHEDULE_STATUS                      | DISABLED            |
| ttldb        | my_ttl_tbl | SCHEDULE_EXPR                        | 0 0 1 * * ?  *       |
| ttldb        | my_ttl_tbl | SCHEDULE_COMMENT                     | at 01:00            |
| ttldb        | my_ttl_tbl | SCHEDULE_TIMEZONE                    | +08:00              |
| ttldb        | my_ttl_tbl | SCHEDULE_LAST_FIRE_TIME              | 1970-01-01 08:00:00 |
| ttldb        | my_ttl_tbl | SCHEDULE_NEXT_FIRE_TIME              | 1970-01-01 08:00:00 |
| ttldb        | my_ttl_tbl | TTL_CURR_TTL_COL_MIN_VAL             | null                |
| ttldb        | my_ttl_tbl | TTL_CURR_CLEANUP_BOUND               | 2024-05-01 00:00:00 |
| ttldb        | my_ttl_tbl | TTL_CURR_CLEANUP_UPPER_BOUND         | 2024-05-01 00:00:00 |
| ttldb        | my_ttl_tbl | TTL_CURR_NEW_DATETIME_VAL            | 2024-07-18 18:22:54 |
| ttldb        | my_ttl_tbl | TTL_CURR_JOB_STAGE                   | Finished            |
| ttldb        | my_ttl_tbl | TTL_CURR_JOB_BEGIN_TS                | 1721298173321       |
| ttldb        | my_ttl_tbl | TTL_CURR_JOB_END_TS                  | 0                   |
| ttldb        | my_ttl_tbl | TTL_CURR_JOB_FROM_SCHEDULER          | false               |
| ttldb        | my_ttl_tbl | TTL_CURR_JOB_STOP_BY_MAINTAIN_WINDOW | false               |
| ttldb        | my_ttl_tbl | TTL_CURR_DN_ROWS_SPEED_LIMIT         | 0                   |
| ttldb        | my_ttl_tbl | TTL_CURR_CLEANED_PHY_PART_COUNT      | 8                   |
| ttldb        | my_ttl_tbl | TTL_CURR_TOTAL_PHY_PART_COUNT        | 8                   |
| ttldb        | my_ttl_tbl | TTL_CURR_JOB_PERCENT                 | 100                 |
| ttldb        | my_ttl_tbl | TTL_ACQUIRE_PERMITS_AVG_RT_NANO      | 0                   |
| ttldb        | my_ttl_tbl | TTL_CURR_CLEANUP_TIMECOST            | 6044                |
| ttldb        | my_ttl_tbl | TTL_CURR_CLEANUP_ROWS                | 0                   |
| ttldb        | my_ttl_tbl | TTL_CURR_CLEANUP_ROWS_SPEED          | 0                   |
| ttldb        | my_ttl_tbl | TTL_CURR_CLEANUP_DATA_LENGTH         | 0                   |
| ttldb        | my_ttl_tbl | TTL_CURR_CLEANUP_SPEED               | 0                   |
| ttldb        | my_ttl_tbl | TTL_CURR_SELECT_SQL_AVG_RT           | 844                 |
| ttldb        | my_ttl_tbl | TTL_CURR_DELETE_SQL_AVG_RT           | 2857                |
| ttldb        | my_ttl_tbl | TTL_CURR_OPTIMIZE_SQL_AVG_RT         | 0                   |
| ttldb        | my_ttl_tbl | TTL_CURR_ADD_PART_AVG_RT             | 0                   |
| ttldb        | my_ttl_tbl | TTL_CURR_DATA_FREE_PERCENT_LIMIT     | -1                  |
| ttldb        | my_ttl_tbl | TTL_CURR_TTL_TBL_DATA_FREE_PERCENT   | 0.00                |
| ttldb        | my_ttl_tbl | TTL_CURR_OPTIMIZE_TTL_TBL_PROGRESS   | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_JOB_FROM_SCHEDULER          | false               |
| ttldb        | my_ttl_tbl | TTL_LAST_TTL_COL_MIN_VAL             |                     |
| ttldb        | my_ttl_tbl | TTL_LAST_CLEANUP_BOUND               |                     |
| ttldb        | my_ttl_tbl | TTL_LAST_CLEANUP_UPPER_BOUND         |                     |
| ttldb        | my_ttl_tbl | TTL_LAST_JOB_BEGIN_TS                | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_JOB_END_TS                  | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_SELECT_SQL_AVG_RT           | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_DELETE_SQL_AVG_RT           | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_OPTIMIZE_SQL_AVG_RT         | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_ADD_PARTS_SQL_AVG_RT        | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_CLEANUP_TIMECOST            | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_CLEANUP_ROWS                | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_CLEANUP_ROWS_SPEED          | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_CLEANUP_DATA_LENGTH         | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_CLEANUP_SPEED               | 0                   |
| ttldb        | my_ttl_tbl | TTL_LAST_TTL_TBL_DATA_FREE_PERCENT   | 0                   |
+--------------+------------+--------------------------------------+---------------------+
48 rows in set (0.03 sec)

次の表に、特定のフィールドを示します。

フィールド

説明

SCHEDULE_STATUS

スケジュールされたクリーンアップジョブが有効になっているかどうかを示します。 有効な値:

  • DISABLED

  • ENABLED

SCHEDULE_EXPR

クリーンアップジョブが実行されるスケジュール。 スケジュールを変更できます。 詳細については、「TTL テーブルの定義と作成」トピックの「クリーンアップジョブの実行スケジュールの変更」セクションをご参照ください。

SCHEDULE_COMMENT

SCHEDULE_EXPR フィールドの値の説明。

SCHEDULE_TIMEZONE

クリーンアップジョブをスケジュールするためのタイムゾーン。

SCHEDULE_LAST_FIRE_TIME

自動スケジューリングが最後にトリガーされた時刻。 初期値は 1970-01-01 08:00:00 で、自動スケジューリングがトリガーされていないことを示します。

SCHEDULE_NEXT_FIRE_TIME

自動スケジューリングが次回トリガーされる時刻。 初期値は 1970-01-01 08:00:00 で、自動スケジューリングがトリガーされていないことを示します。

TTL_CURR_TTL_COL_MIN_VAL

クリーンアップジョブの TTL 定義で指定された time 列の最小値。

TTL_CURR_JOB_STAGE

クリーンアップジョブの現在のフェーズ。

TTL_CURR_CLEANUP_BOUND

クリーンアップジョブによってクリーンアップされている time 列の値。

TTL_CURR_CLEANUP_UPPER_BOUND

クリーンアップジョブの上限。 クリーンアップされる既存データの時間値は、上限よりも前です。

TTL_CURR_NEW_DATETIME_VAL

現在の時刻。

TTL_CURR_DN_ROWS_SPEED_LIMIT

クリーンアップジョブの速度制限。これは、各ストレージノードで DELETE 文が実行される速度です。 値は、1 秒あたりにクリーンアップされる行数です。

TTL_CURR_CLEANUP_ROWS

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

TTL_CURR_CLEANUP_ROWS_SPEED

クリーンアップジョブのリアルタイムのクリーンアップ速度。 値は、1 秒あたりにクリーンアップされる行数です。

TTL_CURR_CLEANUP_DATA_LENGTH

クリーンアップジョブによってクリーンアップされる推定バイト数の合計。

TTL_CURR_CLEANUP_SPEED

クリーンアップジョブのリアルタイムのクリーンアップ速度。 値は、1 秒あたりにクリーンアップされる推定バイト数です。

TTL_CURR_SELECT_SQL_AVG_RT

クリーンアップジョブによって実行される SELECT 文の平均応答時間。 単位: ミリ秒。

TTL_CURR_DELETE_SQL_AVG_RT

クリーンアップジョブによって実行される DELETE 文の平均応答時間。 単位: ミリ秒。

TTL_CURR_JOB_PERCENT

クリーンアップジョブの完了率。

TTL_CURR_CLEANED_PHY_PART_COUNT

クリーンアップジョブによってクリーンアップされる物理パーティションの数。

TTL_CURR_TOTAL_PHY_PART_COUNT

クリーンアップジョブによってクリーンアップされる必要がある物理パーティションの総数。

クリーンアップジョブの管理

クリーンアップジョブを管理して、適切な時間と速度でデータをクリーンアップできます。 これにより、クリーンアップジョブがビジネスに与える影響を最小限に抑えることができます。

メンテナンスウィンドウの変更

PolarDB-X 2.0 のバックグラウンドクリーンアップジョブのデフォルトのメンテナンスウィンドウは、毎日 02:00 から 05:00 です。 次の文を実行して、メンテナンスウィンドウを毎日 01:00 から 06:00 に変更できます。

set global MAINTENANCE_TIME_START = '01:00';
set global MAINTENANCE_TIME_END = '06:00';

クリーンアップ速度制限の変更

デフォルトでは、単一のストレージノードのクリーンアップ速度制限は 1 秒あたり 1,000 行です。 ノード上のすべてのクリーンアップジョブの合計クリーンアップ速度は、制限を超えません。 インスタンス内のストレージノードの数を増やすと、合計クリーンアップ速度が増加します。

次の文を実行して、単一のストレージノードのクリーンアップ速度制限を 1 秒あたり 10,000 行に変更できます。

set global TTL_ENABLE_CLEANUP_ROWS_SPEED_LIMIT=10000
重要
  • クリーンアップ速度制限を上げると、より多くの CPU と IOPS リソースが消費されます。 ストレージノードの実際のパフォーマンスに基づいて、適切なクリーンアップ速度制限を指定することをお勧めします。 これにより、クリーンアップジョブがストレージノードで過剰な CPU と IOPS リソースを消費し、ビジネスに影響を与えることを防ぎます。

  • ストレージノードの CPU と IOPS リソースがフル稼働している場合、前の文を実行してクリーンアップ速度制限を上げても、クリーンアップ速度が向上しない可能性があります。

クリーンアップ時間範囲の変更

デフォルトでは、TTL テーブルのクリーンアップジョブによってクリーンアップされるデータの時間範囲は、主に TTL_CLEANUP_BOUND_INTERVAL_COUNT パラメーターによって制御されます。

次の文を実行して、クリーンアップされるデータの時間範囲を変更できます。

set global TTL_CLEANUP_BOUND_INTERVAL_COUNT = 6;
説明

TTL_CLEANUP_BOUND_INTERVAL_COUNT パラメーターのデフォルト値は 3 で、クリーンアップジョブのクリーンアップ時間範囲がデータ保持期間の 3 倍であることを指定します。 前の文を実行して、クリーンアップ時間範囲をデータ保持期間の 6 倍に設定できます。 デフォルトのクリーンアップ範囲は、TTL 定義で指定した時間単位によって異なります。 例:

  • TTL_EXPR 属性を 'time' EXPIRE AFTER NUM DAY TIMEZONE '+08:00' に設定して、TTL 定義の時間単位を DAY として指定した場合、デフォルトのクリーンアップ範囲は毎回 6 日間のデータです。 次の条件を満たす時間値を持つデータがクリーンアップされます。最小値 ≤ 時間 < (最小値 + 6 日)。

  • TTL_EXPR 属性を 'time' EXPIRE AFTER NUM MONTH TIMEZONE '+08:00' に設定して、TTL 定義の時間単位を MONTH として指定した場合、デフォルトのクリーンアップ範囲は毎回 6 か月のデータです。 次の条件を満たす時間値を持つデータがクリーンアップされます。最小値 ≤ 時間 < (最小値 + 6 か月)。

  • TTL_EXPR 属性を 'time' EXPIRE AFTER NUM YEAR TIMEZONE '+08:00' に設定して、TTL 定義の時間単位を YEAR として指定した場合、デフォルトのクリーンアップ範囲は毎回 6 年間のデータです。 次の条件を満たす時間値を持つデータがクリーンアップされます。最小値 ≤ 時間 < (最小値 + 6 年)。

クリーンアップジョブの一時停止

  1. 次の SHOW FULL DDL 文を実行して、すべてのクリーンアップジョブの ジョブ ID をクエリします。

    show full ddl\G;
    *************************** 1. row ***************************
                       JOB_ID: 1771694362409848832
                OBJECT_SCHEMA: ttldb
                  OBJECT_NAME: my_ttl_tbl
                       ENGINE: DAG
                     DDL_TYPE: ALTER_TABLE
                        STATE: RUNNING
      TOTAL_BACKFILL_PROGRESS: --
     CURRENT_PHY_DDL_PROGRESS: 0%
                     PROGRESS: 33%
         FASTCHECKER_TASK_NUM: 0
    FASTCHECKER_TASK_FINISHED: 0
                   START_TIME: 2024-09-14 15:55:12.991
                     END_TIME: 2024-09-14 15:55:16.959
             ELAPSED_TIME(MS): 3968
                  PHY_PROCESS:
                   CANCELABLE: true
                PARENT_JOB_ID: --
                RESPONSE_NODE: 10.57.104.154:3067
               EXECUTION_NODE: 10.57.104.154:3067
                     TRACE_ID: 189652a2bc805000
                     DDL_STMT: alter table my_ttl_tbl cleanup expired data
                       REMARK: --
           LEGACY_ENGINE_INFO: --
    1 row in set (0.01 sec)
  2. 手順 1 の結果から、管理する TTL テーブルの ジョブ ID を取得します。 取得したジョブ ID を使用して次の文を実行し、TTL テーブルのクリーンアップジョブを一時停止します。

    pause ddl 1771694362409848832;
説明

クリーンアップジョブは、リアルタイムで一時停止またはロールバックできます。 クリーンアップジョブをロールバックすると、ジョブのみがロールバックされます。 クリーンアップされたデータはロールバックできません。 詳細については、「DDL 管理文」をご参照ください。

クリーンアップジョブの再開

一時停止されたクリーンアップジョブを再開するには、次の文を実行します。

CONTINUE DDL 1771694362409848832;