Topik ini menjelaskan fitur pembersihan data kedaluwarsa dari PolarDB for MySQL.
Persyaratan versi
Versi mesin database yang mendukung PolarDB MySQL Edition adalah sebagai berikut:
MySQL 8.0.1, dengan versi minor 8.0.1.1.49.2 atau lebih baru.
MySQL 8.0.2, dengan versi minor 8.0.2.2.29.2 atau lebih baru.
Untuk melihat versi kernel Anda, lihat Panduan Versi Kernel.
Catatan penting
Anda tidak dapat mengatur properti TTL pada tabel temporary, seperti tabel temporary lokal dan global.
Tabel dengan properti TTL tidak mendukung fitur-fitur seperti IMCI, Global Secondary Index (GSI), atau tabel partisi.
Tabel dengan properti TTL tidak dapat berfungsi sebagai tabel utama dalam kendala kunci asing yang dirujuk oleh tabel lain.
Anda tidak dapat mendefinisikan Pemicu pada tabel dengan properti TTL.
Data kedaluwarsa tidak dijamin dihapus segera. Waktu penghapusan bergantung pada siklus penjadwalan tugas pembersihan latar belakang.
Saat memulihkan data dari backup atau dump database, atur
loose_innodb_enable_ttl_purgeke OFF untuk menonaktifkan pembersihan berbasis TTL. Hal ini mencegah penghapusan yang tidak disengaja karena semua data yang dipulihkan mungkin sudah kedaluwarsa.Kolom yang ditentukan untuk TTL harus bertipe TIMESTAMP.
Data yang dibersihkan oleh TTL tidak menghasilkan catatan binary logging (binlog). Saat menggunakan binlog untuk menyinkronkan data, jika sebuah tabel di database sumber memiliki TTL yang diaktifkan, konflik kunci dapat terjadi saat menyinkronkan ke database sekunder.
Sintaksis
Anda dapat mengonfigurasi TTL untuk sebuah tabel menggunakan pernyataan CREATE TABLE atau ALTER TABLE.
Buat tabel dengan TTL
Anda dapat menggunakan salah satu metode berikut untuk membuat tabel dengan TTL:
Buat tabel bernama t1 dan tentukan created_at sebagai kolom timestamp TTL untuk merepresentasikan waktu pembuatan data. Atur nilai time-to-live (TTL) untuk created_at guna mengontrol penghapusan data.
Atur TTL maksimum untuk
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';CatatanPengaturan
TTL='created_at@100'menentukan bahwa baris dalam tabel kedaluwarsa setelah 100 detik. Data kedaluwarsa akan dihapus kemudian selama proses pembersihan.Atur TTL maksimum untuk
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;CatatanPengaturan
TTL ='created_at'+ INTERVAL 3 HOURmengonfigurasi TTL selama 3 jam. Data yang berusia lebih dari 3 jam akan dihapus secara otomatis.Sintaksis TTL (time-to-live) ini mendukung berbagai satuan waktu: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, dan SECOND. Pilih satuan yang paling sesuai dengan kebutuhan manajemen data Anda.
Ubah TTL tabel
Anda dapat menggunakan salah satu metode berikut untuk mengubah properti TTL suatu tabel:
Ubah TTL untuk tabel t1 dengan menyesuaikan nilai time-to-live (TTL) untuk kolom created_at.
Atur TTL maksimum untuk
created_atmenjadi 10.000 detik.ALTER TABLE `t1` TTL='created_at@10000';CatatanMengatur TTL menjadi 10.000 detik pada kolom
created_atmemastikan data dihapus 10.000 detik setelah dibuat.Atur TTL maksimum untuk
created_atmenjadi 3 hari.ALTER TABLE `t1` TTL='created_at' + INTERVAL 3 DAY;CatatanMenambahkan 3 hari ke timestamp
created_atmenetapkan waktu kedaluwarsa menjadi 3 hari. Data yang berusia lebih dari 3 hari akan dihapus secara otomatis.
Hapus TTL dari tabel
ALTER TABLE t1 TTL = '';Periksa pengaturan 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 menjalankan pernyataan ini untuk memeriksa apakah suatu tabel memiliki pengaturan TTL.
Deskripsi parameter
Parameter global berikut mengontrol pembersihan data kedaluwarsa berbasis TTL:
PolarDB memungkinkan Anda mengubah parameter global berikut di Konsol untuk mengontrol pembersihan data TTL kedaluwarsa.
Nama Parameter | Deskripsi |
loose_innodb_enable_ttl_purge | Mengaktifkan atau menonaktifkan pembersihan data kedaluwarsa berbasis TTL. Nilai yang valid:
Catatan Anda harus mengaktifkan pembersihan TTL secara manual di Konsol. |
loose_innodb_ttl_min_interval | Interval TTL minimum yang diizinkan. Nilai default: 100. Satuan: detik. |
loose_innodb_ttl_purge_thread | Jumlah thread yang digunakan untuk membersihkan data TTL kedaluwarsa. Nilai default: 4. Setelah mengubah parameter ini, restart parameter |
loose_innodb_ttl_cluster_index_purge_batch_size | Jika kolom TTL tidak memiliki indeks, tugas pembersihan akan memindai kunci utama. Jumlah default baris yang dipindai per batch: 10.000. |
loose_innodb_ttl_index_purge_batch_size | Jika kolom TTL memiliki indeks, tugas pembersihan akan memindai indeks tersebut. Jumlah default baris yang dipindai per batch: 500. |
loose_innodb_ttl_purge_start_hour | Jam mulai tugas pembersihan TTL. Nilai default: 0. Nilai yang valid: 0 hingga 23. Tidak boleh melebihi |
loose_innodb_ttl_purge_end_hour | Jam akhir tugas pembersihan TTL. Nilai default: 0. Nilai yang valid: 0 hingga 23. Tidak boleh kurang dari |
loose_innodb_ttl_finished_job_expired_days | Periode retensi catatan dalam tabel sistem |
Monitor TTL
Sistem mengumpulkan metrik waktu proses untuk TTL secara berkala. Sistem menyediakan tabel sistem mysql.ttl_job_history untuk menampilkan detail tentang tugas pembersihan TTL. Kolom-kolom tabel tersebut dijelaskan di bawah ini:
Kolom | Deskripsi |
job_id | ID pekerjaan pembersihan TTL. Biasanya berupa timestamp tingkat milidetik. |
table_name | Nama tabel yang menjadi target pekerjaan pembersihan TTL ini. |
state | Status pekerjaan TTL: suspended, running, atau completed. |
start_time | Waktu mulai pekerjaan. |
finished_time | Waktu selesai pekerjaan. |
expire_time | Waktu kedaluwarsa data yang dibersihkan oleh pekerjaan TTL ini. |
scan_cost | Waktu yang dihabiskan untuk memindai batch ini. |
purge_cost | Waktu yang dihabiskan untuk membersihkan batch ini. |
purge_rows | Jumlah baris yang dibersihkan oleh pekerjaan TTL ini. |