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 engine database berikut:
-
MySQL 8.0.1 dengan versi revisi 8.0.1.1.49.2 atau yang lebih baru.
-
MySQL 8.0.2 dengan versi revisi 8.0.2.2.29.2 atau yang lebih baru.
Untuk informasi selengkapnya, lihat Kernel version description.
Catatan
-
Anda tidak dapat mengatur properti TTL pada tabel temporary, termasuk local temporary tables dan global temporary tables.
-
Tabel dengan properti TTL tidak mendukung fitur seperti global secondary index (GSI) dan partitioned table.
-
Tabel dengan properti TTL tidak dapat dirujuk oleh tabel lain sebagai tabel utama dalam kendala kunci asing (foreign key constraint).
-
Tabel dengan properti TTL tidak boleh berisi trigger.
-
Data kedaluwarsa mungkin tidak langsung dihapus. Waktu penghapusan data kedaluwarsa bergantung pada siklus penjadwalan tugas pembersihan latar belakang.
-
Saat melakukan pemulihan dari tabel database atau backup, Anda perlu mengatur
loose_innodb_enable_ttl_purgeke OFF untuk menonaktifkan fitur yang membersihkan data kedaluwarsa berdasarkan TTL. Hal ini karena semua data mungkin telah kedaluwarsa setelah pemulihan. -
Kolom dengan properti TTL harus bertipe TIMESTAMP atau DATETIME.
-
Data yang dihapus oleh fitur TTL tidak menghasilkan catatan binary logging. Oleh karena itu, jika Anda menggunakan binary logging untuk sinkronisasi data dan sebuah tabel di database sumber memiliki fitur TTL yang diaktifkan, konflik nilai kunci (key value conflicts) dapat terjadi di database sekunder.
Sintaks
Anda dapat menggunakan pernyataan CREATE TABLE atau ALTER TABLE untuk mengonfigurasi fitur TTL pada suatu tabel.
Membuat tabel dengan properti TTL
Anda dapat menggunakan salah satu metode berikut untuk membuat tabel dengan properti TTL:
Tabel bernama t1 dibuat, di mana created_at adalah kolom time to live (TTL) yang menyimpan waktu pembuatan data. Anda dapat mengatur nilai TTL berdasarkan kolom created_at untuk menentukan kapan data tersebut dihapus.
-
Atur masa hidup data (
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';CatatanTTL='created_at@100'mengatur masa hidup baris dalam tabel menjadi 100 detik. Baris yang lebih tua dari durasi ini ditandai sebagai kedaluwarsa dan akan dihapus nanti. -
Atur masa hidup data (
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 HOURmengatur masa hidup baris dalam tabel menjadi 3 jam. Data kedaluwarsa akan dihapus secara otomatis. -
Pengaturan TTL mendukung berbagai satuan waktu, seperti YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, dan SECOND. Fleksibilitas ini memungkinkan Anda memilih satuan waktu yang sesuai untuk manajemen data yang efisien sesuai kebutuhan.
-
Memodifikasi properti TTL tabel
Anda dapat menggunakan salah satu metode berikut untuk memodifikasi properti TTL tabel:
Contoh berikut memodifikasi masa hidup kolom created_at dalam 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, yang didasarkan pada nilai dalam bidang
created_at. -
Ubah masa hidup
created_atmenjadi 3 hari.ALTER TABLE `t1` TTL='created_at' + INTERVAL 3 DAY;CatatanPengaturan ini menetapkan waktu kedaluwarsa data menjadi 3 hari sejak nilai dalam kolom
created_at. Data yang lebih tua dari 3 hari akan dihapus secara otomatis.
Menghapus properti TTL tabel
ALTER TABLE t1 TTL = '';
Menampilkan properti TTL 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';
Anda dapat menggunakan pernyataan ini untuk memeriksa apakah suatu tabel memiliki properti TTL.
Deskripsi parameter
Parameter global berikut mengontrol pembersihan data kedaluwarsa:
Anda dapat memodifikasi parameter global berikut di Konsol PolarDB untuk mengontrol pembersihan data kedaluwarsa.
|
Nama parameter |
Deskripsi |
|
loose_innodb_enable_ttl_purge |
Menentukan apakah pembersihan data kedaluwarsa TTL diaktifkan. Nilai yang valid:
Catatan
Anda perlu membuka Konsol untuk mengaktifkan fitur pembersihan data kedaluwarsa TTL. |
|
loose_innodb_ttl_min_interval |
Waktu minimum yang diperbolehkan saat Anda mengatur waktu kedaluwarsa data. Nilai default adalah 100. Satuan default adalah detik. |
|
loose_innodb_ttl_purge_thread |
Jumlah thread untuk membersihkan data kedaluwarsa TTL. Setelah Anda memodifikasi 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 mencari data kedaluwarsa TTL. Jumlah baris yang dipindai dari kunci utama dalam satu waktu adalah 10.000 secara default. |
|
loose_innodb_ttl_index_purge_batch_size |
Jika kolom TTL yang ditentukan memiliki indeks, indeks tersebut dipindai untuk mencari data kedaluwarsa TTL. Jumlah baris yang dipindai dari indeks ini dalam satu waktu adalah 500 secara default. |
|
loose_innodb_ttl_purge_start_hour |
Waktu mulai tugas pembersihan TTL. Nilai default adalah 0. Rentang nilainya antara 0 hingga 23. Nilainya tidak boleh lebih besar dari |
|
loose_innodb_ttl_purge_end_hour |
Waktu akhir tugas pembersihan TTL. Nilai default adalah 0. Rentang nilainya antara 0 hingga 23. Nilainya tidak boleh lebih kecil dari |
|
loose_innodb_ttl_finished_job_expired_days |
Mengontrol waktu kedaluwarsa data dalam tabel sistem |
Memantau TTL
Sistem secara berkala mengumpulkan informasi waktu proses TTL. Anda dapat melihat status eksekusi tugas pembersihan TTL di tabel sistem mysql.ttl_job_history. Tabel berikut menjelaskan bidang-bidang dalam tabel tersebut:
|
Nama kolom |
Deskripsi |
|
job_id |
ID tugas pembersihan TTL, biasanya berupa timestamp dalam milidetik. |
|
table_name |
Nama tabel yang terkait dengan tugas yang dijalankan oleh pekerjaan TTL ini. |
|
state |
Status eksekusi tugas TTL, termasuk pending, executing, dan completed. |
|
start_time |
Waktu mulai tugas. |
|
finished_time |
Waktu penyelesaian tugas. |
|
expire_time |
Waktu kedaluwarsa data yang dibersihkan oleh tugas TTL ini. |
|
scan_cost |
Waktu yang diperlukan untuk memindai batch ini. |
|
purge_cost |
Waktu yang diperlukan untuk membersihkan batch ini. |
|
purge_rows |
Jumlah baris data yang dibersihkan oleh tugas TTL ini. |