All Products
Search
Document Center

PolarDB:DDL read-ahead

Last Updated:Mar 29, 2026

DDL read-ahead mempercepat operasi DDL pada tabel besar dengan melakukan prefetch halaman data sebelum pemindaian pembuatan indeks mencapainya, sehingga mengurangi waktu tunggu I/O selama operasi.

Saat menjalankan pernyataan ALTER TABLE pada tabel besar, InnoDB membaca setiap halaman data secara berurutan untuk membangun ulang indeks atau menyusun ulang baris. DDL read-ahead melakukan prefetch halaman di depan pemindaian sehingga halaman tersebut sudah tersedia saat dibutuhkan.

Prasyarat

Sebelum memulai, pastikan kluster PolarDB Anda memenuhi salah satu persyaratan versi berikut:

  • PolarDB for MySQL 8.0, versi revisi 8.0.1.1.28 atau lebih baru

  • PolarDB for MySQL 5.7, versi revisi 5.7.1.0.22 atau lebih baru

  • PolarDB for MySQL 5.6, versi revisi 5.6.1.0.34 atau lebih baru

Untuk memeriksa versi revisi kluster Anda, lihat Query the engine version.

Dampak I/O dan penjadwalan

DDL read-ahead menggunakan thread tambahan khusus untuk prefetch halaman, yang meningkatkan konsumsi I/O selama operasi DDL berlangsung. Beban I/O tambahan ini dapat memengaruhi beban kerja SQL konkuren. Jalankan DDL read-ahead selama jam sepi untuk meminimalkan dampak terhadap traffic produksi.

Parameter

Gunakan dua parameter global berikut untuk mengaktifkan DDL read-ahead dan menyesuaikan volume prefetch-nya.

loose_innodb_polar_ddl_build_index_readahead

ParameterLevelDefaultValid valuesDescription
loose_innodb_polar_ddl_build_index_readaheadGlobalOFFON, OFFMengaktifkan atau menonaktifkan DDL read-ahead.

loose_innodb_polar_ddl_build_index_readahead_page_num

ParameterLevelDefaultValid valuesDescription
loose_innodb_polar_ddl_build_index_readahead_page_numGlobal6432–256Jumlah halaman yang diprefetch per permintaan read-ahead. Setiap halaman berukuran 16 KB. Nilai yang lebih tinggi akan memprefetch lebih banyak data per permintaan, yang menguntungkan pemindaian sekuensial besar tetapi mengonsumsi lebih banyak bandwidth I/O.

Mulailah dengan nilai default 64 halaman (1 MB per prefetch). Tingkatkan hingga 256 halaman (4 MB per prefetch) untuk tabel yang sangat besar di mana pemindaian DDL merupakan konsumen I/O dominan dan kluster memiliki ruang kapasitas I/O yang tersedia.

Tes kinerja

Benchmark berikut membandingkan waktu eksekusi DDL dengan dan tanpa read-ahead diaktifkan.

Lingkungan pengujian

  • PolarDB for MySQL 8.0, 8 core CPU, memori 32 GB

  • Kapasitas penyimpanan: 50 TB

Skema

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 uji

Masukkan 100.000.000 baris menggunakan prosedur tersimpan berikut:

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);

Mulai ulang proses PolarDB sebelum menjalankan setiap pengujian untuk membersihkan cache kolam buffer. Hal ini memastikan hasil mencerminkan kinerja I/O disk, bukan data yang telah di-cache.

Hasil

Semua pengujian menggunakan loose_innodb_polar_ddl_build_index_readahead_page_num=256 saat read-ahead diaktifkan.

ALTER TABLE table_1 ADD INDEX name_index (seller_name):

DDL read-aheadWaktu (detik)
Nonaktif485
Aktif412

ALTER TABLE table_1 ADD COLUMN c1 varchar(100) after id:

DDL read-aheadWaktu (detik)
Nonaktif264
Aktif159

Hubungi kami

Jika Anda memiliki pertanyaan mengenai operasi DDL, silakan menghubungi dukungan teknis.

Langkah selanjutnya

  • Contact us jika Anda memiliki pertanyaan tentang operasi DDL pada PolarDB.