全部产品
Search
文档中心

PolarDB:DDL read-ahead

更新时间:Jul 06, 2025

PolarDB menyediakan fitur DDL read-ahead. Eksekusi pernyataan DDL pada tabel besar memerlukan waktu yang lama. Anda dapat menggunakan fitur ini untuk mempersingkat waktu eksekusi pernyataan DDL.

Prasyarat

Kluster PolarDB harus memenuhi salah satu persyaratan berikut:

  • Kluster PolarDB for MySQL 8.0 dengan versi revisi 8.0.1.1.28 atau lebih baru.

  • Kluster PolarDB for MySQL 5.7 dengan versi revisi 5.7.1.0.22 atau lebih baru.

  • Kluster PolarDB for MySQL 5.6 dengan versi revisi 5.6.1.0.34 atau lebih baru.

Untuk informasi lebih lanjut tentang cara memeriksa versi kluster, lihat Kueri versi mesin.

Peringatan

Setelah fitur DDL read-ahead diaktifkan, penggunaan sumber daya I/O meningkat karena thread read-ahead. Hal ini dapat memengaruhi eksekusi pernyataan SQL lainnya dalam periode yang sama. Oleh karena itu, disarankan untuk menggunakan fitur ini selama jam-jam sepi.

Penggunaan

  • loose_innodb_polar_ddl_build_index_readahead

    Aktifkan fitur DDL read-ahead menggunakan parameter loose_innodb_polar_ddl_build_index_readahead.

    Parameter

    Tingkat

    Deskripsi

    loose_innodb_polar_ddl_build_index_readahead

    Global

    Menentukan apakah akan mengaktifkan fitur DDL read-ahead. Nilai default: OFF. Nilai valid:

    • ON

    • OFF

  • loose_innodb_polar_ddl_build_index_readahead_page_num

    Atur ukuran data yang dibaca terlebih dahulu menggunakan parameter loose_innodb_polar_ddl_build_index_readahead_page_num.

    Parameter

    Tingkat

    Deskripsi

    loose_innodb_polar_ddl_build_index_readahead_page_num

    Global

    Jumlah halaman untuk dibaca terlebih dahulu. Ukuran data satu halaman adalah 16K. Nilai valid: 32 hingga 256. Nilai default: 64.

Uji kinerja

  • Lingkungan Pengujian

    • Kluster PolarDB for MySQL 8.0 dengan 8 inti CPU dan 32 GB memori.

    • Kapasitas penyimpanan kluster adalah 50 TB.

  • Skema

    Eksekusi pernyataan berikut untuk membuat tabel bernama table_1:

    CREATE TABLE `table_1` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `seller_id` bigint(20) DEFAULT NULL,
    `seller_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
    `gmt_create` varchar(30) DEFAULT NULL,
    `update_time` varchar(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB;
  • Data

    Eksekusi pernyataan berikut untuk menghasilkan data uji:

    delimiter ||
    CREATE PROCEDURE populate_0(IN NUM INT)
    BEGIN
    DECLARE sid INT;
    DECLARE suffix_name INT;
    DECLARE i INT;
    SET sid=1000;
    SET suffix_name=10;
    SET i=1;
    START TRANSACTION;
    WHILE i <= NUM
    DO
    INSERT INTO table_1(seller_id,seller_name,gmt_create,update_time) VALUES(sid,CONCAT('sellername',suffix_name),NOW(),NOW());
    SET suffix_name=suffix_name+1;
    SET sid=sid+1;
    SET i=i+1;
    END WHILE;
    COMMIT;
    END ||
    delimiter ;
    CALL populate_0(100000000) ;
  • Metode Pengujian dan Hasil Pengujian

    Setelah data dimasukkan, restart proses PolarDB untuk memastikan tidak ada data yang tersimpan di buffer_pool memory. Uji persentase peningkatan efisiensi eksekusi DDL dengan membandingkan waktu sebelum dan sesudah fitur DDL read-ahead diaktifkan.

    • Bandingkan efisiensi eksekusi DDL dengan menjalankan pernyataan ALTER TABLE table_1 ADD INDEX name_index (seller_name);:

      Fitur DDL read-ahead

      Waktu yang dibutuhkan (detik)

      Nonaktif

      485

      Aktif

      (loose_innodb_polar_ddl_build_index_readahead_page_num diatur ke 256)

      412

    • Bandingkan efisiensi eksekusi DDL dengan menjalankan pernyataan ALTER TABLE table_1 ADD COLUMN c1 varchar(100) after id;:

      Fitur DDL read-ahead

      Waktu yang dibutuhkan (detik)

      Nonaktif

      264

      Aktif

      (loose_innodb_polar_ddl_build_index_readahead_page_num diatur ke 256)

      159

Hubungi kami

Jika Anda memiliki pertanyaan tentang operasi DDL, hubungi kami.