全部产品
Search
文档中心

PolarDB:arsipkan tabel partisi ke format X-Engine

更新时间:Feb 11, 2026

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:

  1. 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.

  2. 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 EVENT untuk secara otomatis memanggil prosedur tersimpan dan menjalankan kebijakan sesuai jadwal yang telah ditentukan, misalnya setiap hari pada tengah malam.

  3. 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:

Konfigurasikan dan Jalankan Pengarsipan Partisi

Bagian ini memandu Anda melalui seluruh proses, mulai dari membuat kebijakan arsip hingga menjalankan dan memverifikasinya.

Ikhtisar Proses

  1. Buat kebijakan arsip DLM: Definisikan aturan arsip untuk tabel partisi target.

  2. Jalankan kebijakan arsip DLM: Picu proses pengarsipan secara manual atau dengan tugas terjadwal.

  3. 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 POLICY di akhir pernyataan CREATE TABLE. Contoh berikut membuat tabel sales. Tabel ini menggunakan kolom order_time sebagai 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 TABLE untuk 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. N merepresentasikan jumlah partisi terbaru yang ingin Anda pertahankan dalam engine InnoDB. Ketika jumlah total partisi melebihi N, partisi-partisi terlama di luar batas tersebut akan ditandai untuk diarsipkan.

Masukkan Data Uji

  1. Gunakan prosedur tersimpan proc_batch_insert untuk memasukkan data uji ke dalam tabel partisi sales. 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)
  2. Jalankan perintah berikut untuk melihat skema tabel sales.

    SHOW CREATE TABLE sales \G

    Skema 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 EVENT MySQL. 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.

  1. Lihat definisi kebijakan

    Kueri tabel sistem mysql.dlm_policies untuk memastikan kebijakan berhasil dibuat.

    SELECT * FROM mysql.dlm_policies WHERE Table_schema = 'your_database' AND Table_name = 'sales'\G

    Hasilnya 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: NULL

    Penjelasan bidang utama:

    Bidang

    Deskripsi

    Table_schema, Table_name

    Nama database dan tabel tempat kebijakan diterapkan.

    Policy_name

    Nama kustom kebijakan.

    Storage_engine

    Mesin penyimpanan target untuk pengarsipan, yaitu XENGINE di sini.

    Tier_partition_number

    Jumlah partisi InnoDB yang ditentukan untuk dipertahankan dalam kebijakan, yaitu N dalam PARTITIONS OVER N.

  2. Lihat progres eksekusi

    Untuk melacak status tugas, kueri tabel sistem mysql.dlm_progress selama atau setelah eksekusi kebijakan.

    SELECT * FROM mysql.dlm_progress WHERE Table_schema = 'your_database' AND Table_name = 'sales' ORDER BY Id DESC LIMIT 1\G

    Hasilnya 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: null

    Penjelasan bidang utama:

    Bidang

    Deskripsi

    Archive_partitions

    Daftar partisi yang diarsipkan dalam tugas ini.

    Archive_stage

    Status saat ini dari tugas arsip. ARCHIVE_COMPLETE menunjukkan keberhasilan, dan ARCHIVE_ERROR menunjukkan kegagalan.

    Archive_percentage

    Presentase penyelesaian tugas.

    Start_time, End_time

    Waktu mulai dan selesai tugas.

    Extra_info

    Informasi tambahan. Bidang ini mencatat alasan error secara rinci, terutama ketika Archive_stage bernilai ARCHIVE_ERROR.

  3. Verifikasi skema tabel

    Setelah tugas arsip selesai, gunakan perintah SHOW CREATE TABLE untuk melihat skema tabel. Pastikan ENGINE partisi lama telah berubah menjadi XENGINE.

    SHOW CREATE TABLE sales\G

    Hasilnya 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 N dalam klausa PARTITIONS OVER N berdasarkan 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_stage di tabel mysql.dlm_progress. Jika status berubah menjadi ARCHIVE_ERROR, segera picu peringatan agar Anda dapat segera menyelesaikan masalah tersebut.