Parallel DDL mempercepat pembuatan indeks pada tabel besar dengan mendistribusikan pekerjaan ke beberapa thread, bukan hanya satu. Ketika sumber daya hardware tersedia, fitur ini mengurangi waktu eksekusi DDL dan memperpendek jendela di mana operasi Data Manipulation Language (DML) berikutnya diblokir.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
Kluster PolarDB for MySQL yang memenuhi persyaratan versi berikut
Pembuatan secondary index memerlukan salah satu versi kluster berikut:
PolarDB for MySQL 8.0.2, revision version 8.0.2.1.7 atau lebih baru
PolarDB for MySQL 8.0.1, revision version 8.0.1.1.10 atau lebih baru
PolarDB for MySQL 5.7, revision version 5.7.1.0.7 atau lebih baru
Pembuatan primary key index memerlukan salah satu versi kluster berikut:
PolarDB for MySQL 8.0.2, revision version 8.0.2.2.9 atau lebih baru
PolarDB for MySQL 8.0.1, revision version 8.0.1.1.31 atau lebih baru
Untuk memeriksa versi kluster Anda, lihat Query the version number.
Batasan
Parallel DDL mendukung pembuatan primary key index dan secondary index. Fitur ini tidak mendukung:
Full-text indexes
Spatial indexes
Secondary indexes pada virtual columns
Dampak terhadap sumber daya
Parallel DDL meningkatkan penggunaan thread, yang menyebabkan peningkatan konsumsi CPU, memori, dan I/O. Saat Anda menetapkan jumlah thread paralel yang tinggi, operasi tersebut menggunakan lebih banyak memori. Jika instans kehabisan memori, error out-of-memory (OOM) dapat terjadi dan memengaruhi stabilitas kluster. Jalankan parallel DDL selama jam sepi atau saat kluster memiliki sumber daya hardware yang mencukupi agar tidak mengganggu operasi SQL konkuren.
Aktifkan parallel DDL
Tentukan jumlah thread untuk pembuatan secondary index
Parameter innodb_polar_parallel_ddl_threads mengontrol jumlah thread yang berjalan secara paralel untuk setiap operasi DDL.
Parameter | Level | Description |
| Session | Jumlah thread paralel per operasi DDL. Rentang: 1–16. Default: 1 (single-threaded). Tetapkan ke nilai selain 1 untuk mengaktifkan parallel DDL pada pembuatan secondary index. Catatan Saat diatur ke 1, sistem tetap menggunakan dua thread paralel secara internal. |
Contoh:
-- Gunakan 8 thread paralel untuk session saat ini
SET innodb_polar_parallel_ddl_threads = 8;
-- Buat secondary index menggunakan jumlah thread yang dikonfigurasi
ALTER TABLE t0 ADD INDEX idx_b (b);Aktifkan pembuatan primary key index secara paralel
Parallel DDL untuk primary key index memerlukan aktivasi uji coba tambahan.
Untuk menggunakan fitur ini, buka Quota Center. Temukan kuota dengan Quota ID polardb_mysql_pddl_for_pk, lalu klik Apply pada kolom Actions untuk mengajukan uji coba.
Parameter | Level | Description |
| Global | Mengontrol apakah parallel DDL diizinkan untuk pembuatan primary key index. Nilai yang valid: |
Optimalkan fase sort
Jika paralelisme thread default tidak memenuhi kebutuhan performa Anda, aktifkan sample sort untuk lebih mengoptimalkan fase sort.
Parameter | Level | Description |
| Session | Mengaktifkan optimasi sample sort selama pembuatan indeks. Nilai yang valid: |
Contoh:
SET innodb_polar_parallel_ddl_threads = 8;
SET innodb_polar_use_sample_sort = ON;
ALTER TABLE t0 ADD INDEX idx_b (b);Optimalkan fase load
Untuk lebih mempercepat pembangunan struktur pohon indeks, aktifkan parallel bulk load.
Parameter | Level | Description |
| Session | Mengaktifkan optimasi parallel bulk load untuk pembuatan pohon indeks. Nilai yang valid: |
Contoh — ketiga optimasi diaktifkan:
SET innodb_polar_parallel_ddl_threads = 8;
SET innodb_polar_use_sample_sort = ON;
SET innodb_polar_use_parallel_bulk_load = ON;
ALTER TABLE t0 ADD INDEX idx_b (b);Uji performa
Lingkungan pengujian
Kluster: Standard Edition PolarDB for MySQL 8.0, 16 core, memori 128 GB
Penyimpanan: 50 TB
Tabel pengujian
CREATE TABLE t0(
a INT PRIMARY KEY,
b INT) ENGINE=InnoDB;Data uji dihasilkan menggunakan prosedur berikut:
DELIMITER //
CREATE PROCEDURE populate_t0()
BEGIN
DECLARE i int DEFAULT 1;
WHILE (i <= $table_size) DO
INSERT INTO t0 VALUES (i, 1000000 * RAND());
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL populate_t0();Ganti $table_size dengan jumlah baris, misalnya 1000000. Pengujian menggunakan tabel dengan 1.000.000, 10.000.000, 100.000.000, dan 1.000.000.000 baris, serta tabel 1 TB yang dihasilkan dengan Sysbench. Untuk detail pengaturan Sysbench, lihat Test tools.
Metode pengujian
Setiap pengujian mengukur waktu pembuatan secondary index pada kolom b (tipe INT) pada tabel dengan ukuran yang semakin besar, dengan innodb_polar_parallel_ddl_threads diatur ke 1, 2, 4, 8, 16, dan 32.
Hasil pengujian
Graf di bawah menunjukkan rasio percepatan relatif terhadap DDL single-threaded (jumlah thread = 1) dengan tiga kombinasi parameter.
Hanya paralelisme thread (`innodb_polar_parallel_ddl_threads`):

Paralelisme thread + sample sort (`innodb_polar_parallel_ddl_threads` + `innodb_polar_use_sample_sort`):

Ketiga parameter (`innodb_polar_parallel_ddl_threads` + `innodb_polar_use_sample_sort` + `innodb_polar_use_parallel_bulk_load`):

Contact us
Jika Anda memiliki pertanyaan mengenai operasi DDL, Hubungi kami.
Related resources
Jika Anda memiliki pertanyaan mengenai operasi DDL, hubungi dukungan teknis.