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_purgeke 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_atmenjadi 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';CatatanTTL='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_atmenjadi 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;CatatanEkspresi
TTL ='created_at'+ INTERVAL 3 HOURmenetapkan 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_atmenjadi 10.000 detik.ALTER TABLE `t1` TTL='created_at@10000';CatatanPengaturan ini memastikan bahwa data dihapus secara otomatis 10.000 detik setelah waktu pembuatannya, berdasarkan nilai di kolom
created_at.Ubah masa hidup
created_atmenjadi 3 hari.ALTER TABLE `t1` TTL='created_at' + INTERVAL 3 DAY;CatatanIni 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';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:
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:
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 |
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 |
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 |
loose_innodb_ttl_finished_job_expired_days | Mengontrol waktu kedaluwarsa data di tabel |
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. |