全部产品
Search
文档中心

PolarDB:Penggunaan TTL

更新时间:Nov 21, 2025

Topik ini menjelaskan fitur Time to Live (TTL) yang secara otomatis menghapus data kedaluwarsa di PolarDB for MySQL.

Batasan Versi

PolarDB for MySQL mendukung versi mesin database berikut:

  • MySQL 8.0.1 dengan versi revisi 8.0.1.1.49.2 atau lebih baru.

  • MySQL 8.0.2 dengan versi revisi 8.0.2.2.29.2 atau lebih baru.

Untuk informasi lebih lanjut, lihat Deskripsi versi kernel.

Catatan

  • Properti TTL tidak dapat diterapkan pada tabel sementara, termasuk tabel sementara lokal dan global.

  • Tabel dengan properti TTL tidak mendukung fitur seperti Indeks Kolom dalam Memori (IMCI), Kluster Multi-master (Limitless) Edition, indeks sekunder global (GSIs), atau tabel partisi.

  • Tabel dengan properti TTL tidak dapat dirujuk oleh tabel lain sebagai tabel utama dalam kendala kunci asing.

  • Tabel dengan properti TTL tidak dapat berisi pemicu.

  • Data kedaluwarsa mungkin tidak langsung dihapus. Waktu penghapusan bergantung pada siklus penjadwalan tugas pembersihan latar belakang.

  • Saat Anda memulihkan database atau tabel dari cadangan, atur parameter loose_innodb_enable_ttl_purge ke OFF untuk menonaktifkan pembersihan data kedaluwarsa. Hal ini diperlukan karena semua data mungkin telah kedaluwarsa setelah pemulihan.

  • Kolom dengan properti TTL harus bertipe TIMESTAMP.

  • Data yang dihapus oleh fitur TTL tidak menghasilkan catatan log biner. Jika Anda menggunakan log biner untuk sinkronisasi data dan tabel di database sumber memiliki fitur TTL diaktifkan, konflik nilai kunci mungkin terjadi di database sekunder.

Sintaksis

Gunakan pernyataan CREATE TABLE atau ALTER TABLE untuk mengonfigurasi fitur TTL pada sebuah tabel.

Membuat tabel dengan properti TTL

Berikut adalah metode untuk membuat tabel dengan properti TTL:

Tabel bernama t1 dibuat, dengan kolom created_at sebagai kolom time to live (TTL) yang menyimpan waktu pembuatan data. Nilai TTL ditetapkan berdasarkan kolom created_at untuk menentukan kapan data dihapus.

  • Tetapkan masa hidup created_at menjadi 100 detik.

    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';
    Catatan

    TTL='created_at@100' menetapkan masa hidup baris dalam tabel menjadi 100 detik. Baris yang lebih tua dari durasi ini ditandai sebagai kedaluwarsa dan akan dihapus nanti.

  • Tetapkan masa hidup created_at menjadi 3 jam.

    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;
    Catatan
    • Ekspresi TTL ='created_at'+ INTERVAL 3 HOUR menetapkan masa hidup baris dalam tabel menjadi 3 jam. Data kedaluwarsa dihapus secara otomatis.

    • Pengaturan TTL mendukung beberapa unit waktu, seperti TAHUN, KUARTAL, BULAN, MINGGU, HARI, JAM, MENIT, dan DETIK. Fleksibilitas ini memungkinkan Anda memilih unit waktu yang sesuai untuk manajemen data yang efisien.

Ubah properti TTL sebuah tabel

Berikut adalah metode untuk mengubah properti TTL sebuah tabel:

Contoh berikut mengubah masa hidup kolom created_at di tabel t1.

  • Ubah masa hidup created_at menjadi 10.000 detik.

    ALTER TABLE `t1` TTL='created_at@10000';
    Catatan

    Pengaturan ini memastikan bahwa data dihapus secara otomatis 10.000 detik setelah waktu pembuatannya, berdasarkan nilai di kolom created_at.

  • Ubah masa hidup created_at menjadi 3 hari.

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

    Ini menetapkan waktu kedaluwarsa data menjadi 3 hari dari nilai di kolom created_at. Data yang lebih tua dari 3 hari dihapus secara otomatis.

Hapus properti TTL sebuah tabel

ALTER TABLE t1 TTL = '';

Kueri properti TTL sebuah tabel

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';
Catatan

Gunakan pernyataan ini untuk menanyakan apakah sebuah tabel memiliki properti TTL.

Deskripsi parameter

Parameter global berikut tersedia untuk mengontrol pembersihan data yang kedaluwarsa oleh TTL:

Catatan

Anda dapat mengubah parameter global berikut di konsol PolarDB untuk mengontrol pembersihan data kedaluwarsa.

Nama parameter

Deskripsi

loose_innodb_enable_ttl_purge

Menentukan apakah akan mengaktifkan pembersihan data TTL-kedaluwarsa.

Nilai valid:

  • ON: mengaktifkan pembersihan data TTL-kedaluwarsa.

  • OFF (default): menonaktifkan pembersihan data TTL-kedaluwarsa.

Catatan

Anda perlu masuk ke konsol untuk mengaktifkan fitur pembersihan data TTL-kedaluwarsa.

loose_innodb_ttl_min_interval

Interval waktu minimum yang diizinkan saat Anda menetapkan waktu kedaluwarsa data. Nilai defaultnya adalah 100. Unit defaultnya adalah detik.

loose_innodb_ttl_purge_thread

Jumlah thread untuk membersihkan data TTL-kedaluwarsa. Setelah Anda mengubah parameter ini, Anda harus mereset parameter innodb_enable_ttl_purge agar perubahan diterapkan. Nilai defaultnya adalah 4.

loose_innodb_ttl_cluster_index_purge_batch_size

Jika kolom TTL yang ditentukan tidak memiliki indeks, kunci utama dipindai untuk data TTL-kedaluwarsa. Jumlah baris yang dipindai dari kunci utama sekaligus adalah 10.000 secara default.

loose_innodb_ttl_index_purge_batch_size

Jika kolom TTL yang ditentukan diindeks, indeks ini dipindai untuk data TTL-kedaluwarsa. Jumlah baris yang dipindai dari indeks ini sekaligus adalah 500 secara default.

loose_innodb_ttl_purge_start_hour

Waktu mulai tugas pembersihan TTL. Nilai defaultnya adalah 0. Rentang nilainya adalah 0 hingga 23. Nilai ini tidak boleh lebih besar dari innodb_ttl_purge_end_hour.

loose_innodb_ttl_purge_end_hour

Waktu akhir tugas pembersihan TTL. Nilai defaultnya adalah 0. Rentang nilainya adalah 0 hingga 23. Nilai ini tidak boleh kurang dari innodb_ttl_purge_start_hour.

loose_innodb_ttl_finished_job_expired_days

Mengontrol waktu kedaluwarsa data di tabel mysql.ttl_job_history. Nilai defaultnya adalah 90. Rentang nilainya adalah 1 hingga 365. Unit defaultnya adalah hari.

Amati TTL

Sistem secara berkala mengumpulkan informasi runtime TTL. Anda dapat melihat status eksekusi tugas pembersihan TTL di tabel sistem mysql.ttl_job_history. Tabel berikut menjelaskan kolom dalam tabel ini:

Nama kolom

Deskripsi

job_id

ID tugas pembersihan TTL, yang biasanya merupakan timestamp dalam milidetik.

table_name

Nama tabel yang sesuai dengan tugas yang dieksekusi oleh pekerjaan TTL ini.

state

Status eksekusi tugas TTL, termasuk tertunda, sedang dieksekusi, dan selesai.

start_time

Waktu mulai tugas.

finished_time

Waktu selesai tugas.

expire_time

Waktu kedaluwarsa data yang dibersihkan oleh tugas TTL ini.

scan_cost

Waktu yang dikonsumsi untuk memindai batch ini.

purge_cost

Waktu yang dikonsumsi untuk membersihkan batch ini.

purge_rows

Jumlah baris data yang dibersihkan oleh tugas TTL ini.