All Products
Search
Document Center

PolarDB:Parallel DDL

Last Updated:Sep 09, 2026

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

innodb_polar_parallel_ddl_threads

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.

Penting

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

innodb_parallel_build_primary_index

Global

Mengontrol apakah parallel DDL diizinkan untuk pembuatan primary key index. Nilai yang valid: ON (diizinkan), OFF (default, tidak diizinkan).

Optimalkan fase sort

Jika paralelisme thread default tidak memenuhi kebutuhan performa Anda, aktifkan sample sort untuk lebih mengoptimalkan fase sort.

Parameter

Level

Description

innodb_polar_use_sample_sort

Session

Mengaktifkan optimasi sample sort selama pembuatan indeks. Nilai yang valid: ON, OFF (default).

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

innodb_polar_use_parallel_bulk_load

Session

Mengaktifkan optimasi parallel bulk load untuk pembuatan pohon indeks. Nilai yang valid: ON, OFF (default).

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

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`):

Thread parallelism speedup

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

Thread parallelism and sample sort speedup

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

All three parameters speedup

Contact us

Jika Anda memiliki pertanyaan mengenai operasi DDL, Hubungi kami.

Related resources

Jika Anda memiliki pertanyaan mengenai operasi DDL, hubungi dukungan teknis.