Membuat indeks pada tabel besar dapat memakan waktu beberapa menit atau lebih, sehingga memblokir operasi DDL konkuren selama periode tersebut. Fitur DDL multi-way merging and sorting menggantikan algoritma merge sort eksternal dua arah bawaan dengan pengurutan N-arahan (N-way), yang mengurangi jumlah siklus baca/tulis file antara dan memperpendek waktu total pembuatan indeks.
Prasyarat
Sebelum memulai, pastikan kluster PolarDB Anda memenuhi salah satu persyaratan versi berikut:
PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.5 atau lebih baru
PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.28 atau lebih baru
PolarDB for MySQL 5.7 dengan versi revisi 5.7.1.0.23 atau lebih baru
Untuk memeriksa versi kluster Anda, lihat Query the engine version.
Cara kerja
Pembuatan indeks di InnoDB berlangsung dalam tiga tahap:
Scan: Indeks terkluster dipindai dan entri pengurutan ditulis ke buffer pengurutan. Saat buffer penuh, entri tersebut dituliskan ke file antara temporary sebagai run yang telah diurutkan.
Merge sort: Setelah semua run ditulis, InnoDB menggabungkannya. Algoritma pengurutan dua arah bawaan menggabungkan dua run sekaligus, sehingga memerlukan beberapa kali akses ulang ke file antara. Penggabungan N-arahan (N-way) menggabungkan lebih banyak run per siklus, sehingga mengurangi jumlah total akses dan I/O file antara.
B-tree insertion: Entri yang telah sepenuhnya diurutkan dimasukkan ke dalam indeks Pohon-B (B-tree).
Menambah jumlah arahan (ways) mengurangi jumlah akses file antara dengan biaya tambahan penggunaan memori: setiap penambahan arahan memerlukan satu buffer pengurutan tambahan sebesar innodb_sort_buffer_size byte.
Batasan
Indeks full-text dan indeks spasial tidak didukung.
Penggunaan memori meningkat sebanding dengan jumlah arahan. Mengaktifkan penggabungan N-arahan meningkatkan ukuran memori yang digunakan oleh kluster sebesar
(N+1) × innodb_sort_buffer_sizebyte.
Konfigurasi penggabungan multi-arahan
Atur parameter innodb_polar_parallel_merge_ways pada tingkat session sebelum menjalankan pernyataan DDL Anda.
| Parameter | Ruang Lingkup | Nilai yang Valid | Bawaan | Deskripsi |
|---|---|---|---|---|
innodb_polar_parallel_merge_ways | Session | 2–16 | 2 | Jumlah arahan untuk penggabungan dan pengurutan. Nilai bawaan 2 menggunakan penggabungan dua arahan standar. Atur nilai lebih dari 2 untuk mengaktifkan penggabungan multi-arahan. |
Pengaturan ini hanya berlaku untuk session saat ini dan akan kembali ke nilai bawaan setelah session berakhir.
Contoh: Aktifkan penggabungan delapan arahan dan buat indeks pada tabel besar.
SET innodb_polar_parallel_merge_ways = 8;
ALTER TABLE table_1 ADD INDEX name_index (seller_name);Uji kinerja
Pengujian berikut membandingkan penggabungan dua arahan dan delapan arahan pada tabel berisi 100 juta baris untuk menunjukkan dampak peningkatan jumlah arahan.
Lingkungan pengujian
| Item | Spesifikasi |
|---|---|
| Kluster | PolarDB for MySQL 8.0 |
| CPU | 8 core |
| 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: 100.000.000 baris dihasilkan 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);Operasi uji: ALTER TABLE table_1 ADD INDEX name_index (seller_name);
Hasil
| Konfigurasi | Waktu (detik) |
|---|---|
| Pengurutan gabung delapan arah | 353 |
| Penggabungan dan pengurutan dua arahan | 485 |
Penggabungan delapan arahan mengurangi waktu pembuatan indeks sekitar 27% dibandingkan dengan penggabungan dua arahan pada konfigurasi dataset dan perangkat keras ini.
Hubungi kami
Jika Anda memiliki pertanyaan mengenai operasi DDL, silakan contact technical support.