Saat volume data dalam tabel partisi meningkat, data historis (data dingin) dapat mengonsumsi ruang penyimpanan yang signifikan dan meningkatkan biaya penyimpanan. Untuk mengurangi biaya sekaligus tetap mempertahankan akses ke data tersebut, Anda dapat menggunakan kebijakan Data Lifecycle Management (DLM). Kebijakan ini secara otomatis mengarsipkan partisi-partisi lama ke format X-Engine yang sangat terkompresi. Fitur ini memungkinkan pemisahan data panas dan hangat di tingkat partisi: data panas tetap berada di partisi InnoDB berkinerja tinggi, sedangkan data hangat diarsipkan ke X-Engine, sehingga secara signifikan mengurangi biaya penyimpanan. Data yang diarsipkan tetap mendukung operasi DML writes dan perubahan DDL online, sehingga menjamin kelangsungan bisnis.
Cara kerja
Fitur pengarsipan otomatis untuk tabel partisi bergantung pada kebijakan Data Lifecycle Management (DLM) yang Anda definisikan pada tabel tersebut. Alur kerjanya adalah sebagai berikut:
Definisikan kebijakan: Anda dapat mendefinisikan kebijakan DLM saat membuat tabel (
CREATE TABLE) atau memodifikasi tabel (ALTER TABLE). Inti dari kebijakan ini adalah kondisi yang Anda tentukan. Misalnya, Anda dapat menetapkan aturan bahwa ketika jumlah partisi melebihi N, partisi-partisi terlama akan ditandai untuk diarsipkan.Picu eksekusi: Kebijakan ini tidak dipicu secara otomatis secara real-time. Anda harus menjalankan tugas arsip menggunakan salah satu metode berikut:
Eksekusi manual: Panggil prosedur tersimpan sistem untuk segera menjalankan semua kebijakan DLM yang telah didefinisikan.
Tugas terjadwal: Buat
EVENTuntuk secara otomatis memanggil prosedur tersimpan dan menjalankan kebijakan sesuai jadwal yang telah ditentukan, misalnya setiap hari pada tengah malam.
Jalankan arsip: Saat kebijakan dieksekusi, sistem mengidentifikasi partisi-partisi yang memenuhi kondisi arsip, lalu mengubah mesin penyimpanan partisi-partisi tersebut dari InnoDB ke X-Engine secara online untuk menyelesaikan proses pengarsipan.
Lingkup
Sebelum menggunakan fitur ini, pastikan kluster Anda memenuhi kondisi berikut:
Seri produk Cluster Edition:
Arsip ke format row store X-Engine: MySQL 8.0.2 revisi 8.0.1.1.31 atau lebih baru.
Arsip ke format tabel berorientasi kolom X-Engine: MySQL 8.0.2 revisi 8.0.2.2.23 atau lebih baru.
Seri produk Multi-master Cluster (Limitless) Edition: MySQL 8.0.2 revisi 8.0.2.0.6 atau lebih baru.
Konfigurasikan dan Jalankan Pengarsipan Partisi
Bagian ini memandu Anda melalui seluruh proses, mulai dari membuat kebijakan arsip hingga menjalankan dan memverifikasinya.
Ikhtisar Proses
Buat kebijakan arsip DLM: Definisikan aturan arsip untuk tabel partisi target.
Jalankan kebijakan arsip DLM: Picu proses pengarsipan secara manual atau dengan tugas terjadwal.
Lihat status dan hasil arsip: Verifikasi bahwa partisi berhasil dikonversi ke mesin penyimpanan X-Engine.
Langkah 1: Buat Kebijakan Arsip DLM
Definisikan aturan arsip untuk tabel partisi guna menentukan kapan dan partisi mana yang akan diarsipkan ke X-Engine. Anda dapat menambahkan kebijakan saat membuat tabel baru atau menambahkannya ke tabel yang sudah ada.
Metode 1: Definisikan kebijakan saat membuat tabel baru
Gunakan klausa
DLM ADD POLICYdi akhir pernyataanCREATE TABLE. Contoh berikut membuat tabelsales. Tabel ini menggunakan kolomorder_timesebagai kunci partisi dan membuat partisi berdasarkan interval waktu. Tabel ini juga memiliki dua kebijakan: INTERVAL dan DLM.Kebijakan INTERVAL: Jika data yang dimasukkan melebihi rentang partisi yang ada, partisi baru dengan interval satu tahun akan dibuat secara otomatis.
Kebijakan DLM: Kebijakan ini, bernama
policy_part2part, menentukan bahwa ketika jumlah total partisi melebihi 3, partisi-partisi terlama akan diarsipkan ke X-Engine.
CREATE TABLE `sales` ( `id` int DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `order_time` datetime NOT NULL, primary key (order_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 PARTITION BY RANGE COLUMNS(order_time) INTERVAL(YEAR, 1) (PARTITION p20200101000000 VALUES LESS THAN ('2020-01-01 00:00:00') ENGINE = InnoDB, PARTITION p20210101000000 VALUES LESS THAN ('2021-01-01 00:00:00') ENGINE = InnoDB, PARTITION p20220101000000 VALUES LESS THAN ('2022-01-01 00:00:00') ENGINE = InnoDB) DLM ADD POLICY policy_part2part TIER TO PARTITION ENGINE=XENGINE READ WRITE ON (PARTITIONS OVER 3);Metode 2: Tambahkan kebijakan ke tabel yang sudah ada
Gunakan pernyataan
ALTER TABLEuntuk menambahkan kebijakan DLM ke tabel partisi yang sudah ada. Untuk informasi lebih lanjut, lihat Buat atau hapus kebijakan DLM menggunakan ALTER TABLE.ALTER TABLE sales DLM ADD POLICY policy_part2part TIER TO PARTITION ENGINE=XENGINE ON (PARTITIONS OVER 3);Penjelasan sintaksis:
ON (PARTITIONS OVER N)merupakan inti dari kebijakan tersebut.Nmerepresentasikan jumlah partisi terbaru yang ingin Anda pertahankan dalam engine InnoDB. Ketika jumlah total partisi melebihiN, partisi-partisi terlama di luar batas tersebut akan ditandai untuk diarsipkan.
Masukkan Data Uji
Gunakan prosedur tersimpan
proc_batch_insertuntuk memasukkan data uji ke dalam tabel partisisales. Hal ini memicu kebijakan INTERVAL untuk secara otomatis membuat partisi baru.DROP PROCEDURE IF EXISTS proc_batch_insert; delimiter $$ CREATE PROCEDURE proc_batch_insert(IN begin INT, IN end INT, IN name VARCHAR(20)) BEGIN SET @insert_stmt = concat('INSERT INTO ', name, ' VALUES(? , ?, ?);'); PREPARE stmt from @insert_stmt; WHILE begin <= end DO SET @ID1 = begin; SET @NAME = CONCAT(begin+begin*281313, '@stiven'); SET @TIME = from_days(begin + 737600); EXECUTE stmt using @ID1, @NAME, @TIME; SET begin = begin + 1; END WHILE; END; $$ delimiter ; CALL proc_batch_insert(1, 3000, 'sales');Hasilnya menunjukkan bahwa data berhasil dimasukkan:
Query OK, 1 row affected (0.50 sec)Jalankan perintah berikut untuk melihat skema tabel
sales.SHOW CREATE TABLE sales \GSkema tabel dikembalikan sebagai berikut. Semua partisi menggunakan engine InnoDB:
mysql> SHOW CREATE TABLE sales \G *************************** 1. row *************************** Table: sales Create Table: CREATE TABLE `sales` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `order_time` datetime NOT NULL, PRIMARY KEY (`order_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!50500 PARTITION BY RANGE COLUMNS(order_time) */ /*!99990 800020200 INTERVAL(YEAR, 1) */ /*!50500 (PARTITION p20200101000000 VALUES LESS THAN ('2020-01-01 00:00:00') ENGINE = InnoDB, PARTITION p20210101000000 VALUES LESS THAN ('2021-01-01 00:00:00') ENGINE = InnoDB, PARTITION p20220101000000 VALUES LESS THAN ('2022-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20230101000000 VALUES LESS THAN ('2023-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20240101000000 VALUES LESS THAN ('2024-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20250101000000 VALUES LESS THAN ('2025-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20260101000000 VALUES LESS THAN ('2026-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20270101000000 VALUES LESS THAN ('2027-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20280101000000 VALUES LESS THAN ('2028-01-01 00:00:00') ENGINE = InnoDB) */
Langkah 2: Jalankan Kebijakan Arsip DLM
Picu kebijakan arsip yang telah didefinisikan untuk memulai proses konversi engine partisi. Anda dapat memilih untuk menjalankan kebijakan secara manual atau mengatur tugas terjadwal sesuai kebutuhan.
Metode 1: Eksekusi terjadwal (disarankan): Untuk lingkungan produksi yang memerlukan pengarsipan data rutin, Anda dapat menggunakan fitur
EVENTMySQL. Ini memungkinkan Anda menjalankan kebijakan secara otomatis selama jam sepi, seperti setiap hari pada tengah malam, untuk operasi dan maintenance (O&M) otomatis.Contoh berikut membuat event yang, mulai dari 2026-02-01, secara otomatis menjalankan semua kebijakan DLM setiap hari pukul 01:00.
CREATE EVENT dlm_system_base_event ON SCHEDULE EVERY 1 DAY STARTS '2026-02-01 01:00:00' do CALL dbms_dlm.execute_all_dlm_policies();Metode 2: Eksekusi manual langsung: Metode ini cocok untuk tugas arsip satu kali atau untuk skenario yang memerlukan percobaan ulang manual setelah Anda memperbaiki suatu masalah.
Anda dapat langsung memanggil prosedur tersimpan berikut untuk segera memicu semua kebijakan DLM yang telah didefinisikan.
CALL dbms_dlm.execute_all_dlm_policies();
Langkah 3: Lihat Status dan Hasil Arsip
Pantau perkembangan tugas arsip. Setelah tugas selesai, verifikasi bahwa mesin penyimpanan partisi telah berubah.
Lihat definisi kebijakan
Kueri tabel sistem
mysql.dlm_policiesuntuk memastikan kebijakan berhasil dibuat.SELECT * FROM mysql.dlm_policies WHERE Table_schema = 'your_database' AND Table_name = 'sales'\GHasilnya dikembalikan sebagai berikut:
*************************** 1. row *************************** Id: 1 Table_schema: your_database Table_name: sales Policy_name: policy_part2part Policy_type: PARTITION Archive_type: PARTITION COUNT Storage_mode: READ WRITE Storage_engine: XENGINE Storage_media: DISK Storage_schema_name: NULL Storage_table_name: NULL Data_compressed: ON Compressed_algorithm: Zstandard Enabled: ENABLED Priority_number: 200 Tier_partition_number: 3 Tier_condition: NULL Extra_info: {"oss_file_filter": "order_time"} Comment: NULLPenjelasan bidang utama:
Bidang
Deskripsi
Table_schema,Table_nameNama database dan tabel tempat kebijakan diterapkan.
Policy_nameNama kustom kebijakan.
Storage_engineMesin penyimpanan target untuk pengarsipan, yaitu
XENGINEdi sini.Tier_partition_numberJumlah partisi InnoDB yang ditentukan untuk dipertahankan dalam kebijakan, yaitu
NdalamPARTITIONS OVER N.Lihat progres eksekusi
Untuk melacak status tugas, kueri tabel sistem
mysql.dlm_progressselama atau setelah eksekusi kebijakan.SELECT * FROM mysql.dlm_progress WHERE Table_schema = 'your_database' AND Table_name = 'sales' ORDER BY Id DESC LIMIT 1\GHasilnya dikembalikan sebagai berikut:
*************************** 1. row *************************** Id: 1 Table_schema: your_database Table_name: sales Policy_name: policy_part2part Policy_type: PARTITION Archive_option: PARTITIONS OVER 3 Storage_engine: XENGINE Storage_media: DISK Data_compressed: ON Compressed_algorithm: Zstandard Archive_partitions: p20200101000000, p20210101000000, p20220101000000, _p20230101000000, _p20240101000000, _p20250101000000 Archive_stage: ARCHIVE_COMPLETE Archive_percentage: 100 Archived_file_info: null Start_time: 2026-02-06 10:50:00 End_time: 2026-02-06 10:50:00 Extra_info: nullPenjelasan bidang utama:
Bidang
Deskripsi
Archive_partitionsDaftar partisi yang diarsipkan dalam tugas ini.
Archive_stageStatus saat ini dari tugas arsip.
ARCHIVE_COMPLETEmenunjukkan keberhasilan, danARCHIVE_ERRORmenunjukkan kegagalan.Archive_percentagePresentase penyelesaian tugas.
Start_time,End_timeWaktu mulai dan selesai tugas.
Extra_infoInformasi tambahan. Bidang ini mencatat alasan error secara rinci, terutama ketika
Archive_stagebernilaiARCHIVE_ERROR.Verifikasi skema tabel
Setelah tugas arsip selesai, gunakan perintah
SHOW CREATE TABLEuntuk melihat skema tabel. PastikanENGINEpartisi lama telah berubah menjadiXENGINE.SHOW CREATE TABLE sales\GHasilnya dikembalikan sebagai berikut:
*************************** 1. row *************************** Table: sales Create Table: CREATE TABLE `sales` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `order_time` datetime NOT NULL, PRIMARY KEY (`order_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020216 PARTITION BY RANGE COLUMNS(order_time) */ /*!99990 800020200 INTERVAL(YEAR, 1) */ /*!99990 800020216 (PARTITION p20200101000000 VALUES LESS THAN ('2020-01-01 00:00:00') ENGINE = XENGINE, PARTITION p20210101000000 VALUES LESS THAN ('2021-01-01 00:00:00') ENGINE = XENGINE, PARTITION p20220101000000 VALUES LESS THAN ('2022-01-01 00:00:00') ENGINE = XENGINE, PARTITION _p20230101000000 VALUES LESS THAN ('2023-01-01 00:00:00') ENGINE = XENGINE, PARTITION _p20240101000000 VALUES LESS THAN ('2024-01-01 00:00:00') ENGINE = XENGINE, PARTITION _p20250101000000 VALUES LESS THAN ('2025-01-01 00:00:00') ENGINE = XENGINE, PARTITION _p20260101000000 VALUES LESS THAN ('2026-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20270101000000 VALUES LESS THAN ('2027-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20280101000000 VALUES LESS THAN ('2028-01-01 00:00:00') ENGINE = InnoDB) */
Penerapan di Produksi
Desain kebijakan: Pilih nilai yang sesuai untuk
Ndalam klausaPARTITIONS OVER Nberdasarkan skenario bisnis Anda. Misalnya, untuk data pesanan, Anda mungkin mempertahankan data enam bulan terakhir di partisi InnoDB untuk memastikan kinerja kueri. Untuk data log, Anda mungkin hanya mempertahankan data 30 hari terakhir.Pemantauan dan peringatan: Atur pemantauan untuk bidang
Archive_stagedi tabelmysql.dlm_progress. Jika status berubah menjadiARCHIVE_ERROR, segera picu peringatan agar Anda dapat segera menyelesaikan masalah tersebut.