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.