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

PolarDB:概要

最終更新日:May 28, 2025

このトピックでは、PolarDB for MySQL クラスターで Time to Live(TTL)機能がどのように実装されているかについて説明します。

背景情報

NoSQL データベースとログ構造マージツリー(LSM ツリー)ベースのストレージエンジンで普及している TTL 機能は、キーと行レベルのライフサイクル管理ポリシーを実装します。 TTL 機能は、特定のシナリオでストレージ容量を効率的に節約できます。 Key-Value ストアでは、バックグラウンド スレッドが定期的に期限切れのキーをスキャンして削除します。 LSM ツリーに基づくデータベースでは、コンパクション スレッドが定期的に期限切れのデータ行をクリーンアップします。

MySQL、Oracle、PostgreSQL などの従来のリレーショナルデータベースは、TTL 機能をネイティブにサポートしていません。 同様の機能は、トリガーまたはストアドプロシージャを使用して実現されます。

-- 1. 各行の時間情報を示す列を持つテーブルを作成します。
CREATE TABLE messages(
    message_id   VARCHAR(36) PRIMARY KEY,
    sender_id    VARCHAR(36),
    receiver_id  VARCHAR(36),
    message_text TEXT,
    sent_at      TIMESTAMP
);

-- 2. sent_at フィールドに基づいて期限切れの行を削除するために 5 分ごとに実行されるスケジュールされたタスクを作成します。
SET GLOBAL event_scheduler = ON;

CREATE EVENT delete_old_messages
ON SCHEDULE
  EVERY 5 MINUTE
STARTS CURRENT_TIMESTAMP
DO
DELETE FROM messages
WHERE sent_at < DATE_SUB(NOW(), INTERVAL 5 MINUTE);

ただし、この方法では、次の問題が発生する可能性があります。

  • 期限切れの行が最も早く削除されない場合、期限切れの行がまだクエリされる可能性があります。

  • 大量のデータを削除する必要がある場合、データベースのパフォーマンスが変動する可能性があります。

したがって、データベースシステムは、より正確で効率的な TTL 管理のために TTL 機能をネイティブにサポートする必要があります。

サポートされているバージョン

次のエンジンバージョンを実行しているクラスターで TTL 機能を使用できます。

  • リビジョンバージョンが 8.0.1.1.49 以降の PolarDB for MySQL 8.0.1

  • リビジョンバージョンが 8.0.2.2.27 以降の PolarDB for MySQL 8.0.2

クラスターのデータベースエンジンバージョンを表示する方法については、「エンジンバージョンのクエリ」をご参照ください。