EXPLAIN DDL memungkinkan Anda melihat pratinjau karakteristik eksekusi pernyataan ALTER TABLE sebelum menjalankannya. Fitur ini menampilkan algoritma yang dipilih oleh mesin, apakah operasi memerlukan pembangunan ulang tabel secara penuh, apakah DML konkuren diizinkan, dan apakah terdapat transaksi yang belum dikomit yang dapat menghambatnya. Gunakan informasi ini untuk menilai dampak terhadap bisnis serta menentukan kapan dan bagaimana menjalankan DDL tersebut.
Versi yang didukung
EXPLAIN DDL tersedia pada:
PolarDB for MySQL 8.0.1, versi revisi 8.0.1.1.49 atau lebih baru
PolarDB for MySQL 8.0.2, versi revisi 8.0.2.2.27 atau lebih baru
Batasan
Hanya didukung untuk tabel yang menggunakan Mesin penyimpanan InnoDB.
Tidak mengubah data aktual apa pun.
Dapat dijalankan baik pada node primary maupun node read-only. Bidang
Possible blocked MDLshanya menampilkan potensi konflik penguncian pada node saat ini.
Aktifkan EXPLAIN DDL
EXPLAIN DDL diaktifkan secara default. Gunakan parameter berikut untuk mengontrol fitur ini. Untuk petunjuk konfigurasi, lihat Configure cluster and node parameters.
| Parameter | Level | Description | Default |
|---|---|---|---|
loose_polar_enable_explain_ddl | Global | Mengaktifkan atau menonaktifkan EXPLAIN DDL. Nilai yang valid: ON, OFF. | ON |
loose_polar_max_collect_thd_num_in_explain_ddl | Global | Jumlah maksimum thread pemblokiran MDL potensial yang dikumpulkan. Nilai yang valid: 1–512. | 16 |
Sintaksis
{ EXPLAIN | DESCRIBE | DESC } ALTER TABLE ...Bidang output
Empat bidang secara langsung menentukan dampak terhadap bisnis: Algorithm, Metadata Only, Rebuilt Table, dan Concurrent DML. Gunakan Possible blocked MDLs untuk mendeteksi konflik penguncian aktif sebelum eksekusi.
| Field | Description | Values |
|---|---|---|
Error No | Kode kesalahan. 0 berarti pernyataan berhasil dijalankan. | 0 (sukses), atau kode kesalahan |
Algorithm | Algoritma yang digunakan oleh mesin. INSTANT paling efisien; COPY paling tidak efisien dan memblokir penulisan. | INSTANT, INPLACE, COPY, Unknown |
Metadata Only | Apakah operasi hanya memodifikasi metadata, bukan data tabel. Operasi yang hanya memodifikasi metadata selesai dalam hitungan detik terlepas dari ukuran tabel. | Yes, No, Unknown |
Rebuilt Table | Apakah operasi memerlukan pembangunan ulang tabel secara penuh. Membangun ulang tabel besar memakan waktu lama. | Yes, No, Unknown |
Parallel Support | Apakah operasi mendukung parallel DDL untuk percepatan. | Yes, Yes, But Not Enabled, Not Needed, No, Unknown |
Parallel Degree | Jumlah thread yang digunakan oleh operasi DDL. -1 berarti tidak diketahui. | -1 (tidak diketahui), 1–128 |
Concurrent DML | Apakah operasi baca dan tulis diizinkan selama eksekusi DDL. | Yes, No, Unknown |
Possible blocked MDLs | ID proses koneksi dengan transaksi yang belum dikomit yang dapat menghambat DDL. | Daftar ID proses yang dipisahkan koma, atau kosong |
Error Msg | Pesan kesalahan yang sesuai dengan Error No. | Sebuah string |
Suggest Info | Saran optimasi, seperti mengaktifkan parallel DDL atau menyelesaikan konflik penguncian. | Sebuah string |
Statement | Pernyataan DDL yang sedang dijelaskan. | Sebuah pernyataan DDL |
Peringkat efisiensi algoritma
Ketiga algoritma membentuk hierarki efisiensi. EXPLAIN DDL melaporkan algoritma yang benar-benar dipilih oleh mesin — yaitu yang paling efisien yang didukung oleh operasi tersebut:
| Algorithm | Table rebuild | Concurrent DML | Efficiency |
|---|---|---|---|
INSTANT | No | Yes | Tertinggi — selesai dalam hitungan detik |
INPLACE | Bergantung pada operasi | Yes | Sedang — bisa memakan waktu beberapa menit untuk tabel besar |
COPY | Yes | No | Terendah — memblokir penulisan; hindari selama jam sibuk |
Referensi operasi
Gunakan tabel ini untuk memperkirakan dampak terhadap bisnis sebelum menjalankan EXPLAIN DDL pada operasi tertentu. Tabel ini mencerminkan perilaku umum; gunakan EXPLAIN DDL untuk mengonfirmasi hasil aktual di lingkungan Anda.
| Operation | Algorithm | Metadata only | Table rebuild | Concurrent DML | Typical impact |
|---|---|---|---|---|---|
| Add a column | INSTANT | Yes | No | Yes | Selesai dalam hitungan detik; dampak minimal |
| Rename a table | INPLACE | Yes | No | Yes | Selesai dengan cepat; dampak minimal |
| Add a secondary index | INPLACE | No | No | Yes | Waktu tergantung pada ukuran tabel; dampak rendah |
| Rebuild a table | INPLACE | No | Yes | Yes | Mengonsumsi sumber daya signifikan; jadwalkan selama jam sepi |
| Modify a column type | COPY | No | Yes | No | Memblokir penulisan; jadwalkan selama jam sepi |
Contoh
Periksa karakteristik eksekusi
Contoh berikut menunjukkan cara menggunakan EXPLAIN DDL untuk menilai apakah operasi DDL memengaruhi ketersediaan bisnis.
Semua contoh menggunakan tabel uji yang sama:
SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` char(1) DEFAULT NULL,
`c` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)Add a column
EXPLAIN ALTER TABLE t1 ADD COLUMN d INT;*************************** 1. row ***************************
Error No: 0
Algorithm: INSTANT
Metadata Only: Yes
Rebuilt table: No
Parallel Support: Not Need
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info:
Statement: EXPLAIN ALTER TABLE t1 ADD COLUMN d int
1 row in set (0.00 sec)Algoritma INSTANT hanya memodifikasi metadata tanpa membangun ulang tabel dan mengizinkan DML konkuren. Operasi ini selesai dalam hitungan detik dengan dampak bisnis minimal.
Rename a table
EXPLAIN ALTER TABLE t1 rename t1_rn;*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: Yes
Rebuilt table: No
Parallel Support: Not Need
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info:
Statement: EXPLAIN ALTER TABLE t1 rename t1_rn
1 row in set (0.01 sec)Algoritma INPLACE hanya memodifikasi metadata tanpa membangun ulang tabel dan mengizinkan DML konkuren. Operasi ini memiliki dampak bisnis minimal.
Modify a column type
EXPLAIN ALTER TABLE t1 modify COLUMN a char(1);*************************** 1. row ***************************
Error No: 0
Algorithm: COPY
Metadata Only: No
Rebuilt table: Yes
Parallel Support: No
Parallel Degree: 1
Concurrent DML: No
Possible blocked MDLs:
Error Msg:
Suggest Info:
Statement: EXPLAIN ALTER TABLE t1 modify COLUMN a char(1)
1 row in set (0.01 sec)Algoritma COPY memerlukan pembangunan ulang tabel secara penuh dan memblokir DML konkuren. Operasi ini memiliki dampak bisnis signifikan — jadwalkan selama jam sepi.
Rebuild a table
EXPLAIN ALTER TABLE t1 engine= innodb;*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: No
Rebuilt table: Yes
Parallel Support: Yes But Not Enable
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info: 1. This DDL operation could use Parallel DDL to speed up.
Statement: EXPLAIN ALTER TABLE t1 engine= innodbAlgoritma INPLACE memerlukan pembangunan ulang tabel secara penuh tetapi mengizinkan DML konkuren. Meskipun operasi ini tidak memblokir baca atau tulis, pembangunan ulang tabel besar mengonsumsi sumber daya signifikan — jadwalkan selama jam sepi.
Bidang Suggest Info menunjukkan bahwa parallel DDL dapat mempercepat operasi ini. Lihat Check parallel DDL support untuk detailnya.Periksa dukungan parallel DDL
PolarDB for MySQL mendukung parallel DDL untuk mempercepat operasi DDL. Gunakan bidang Parallel Support dan Parallel Degree untuk menentukan apakah suatu operasi tertentu dapat memperoleh manfaat dari parallel DDL.
Jika
Parallel SupportbernilaiYes, But Not Enabled, operasi tersebut mendukung parallel DDL tetapi fitur tersebut belum diaktifkan pada kluster. BidangSuggest Infomenampilkan:This DDL operation could use Parallel DDL to speed up.Untuk mengaktifkan parallel DDL, lihat Parallel DDL.Jika
Parallel SupportbernilaiYes, fitur tersebut telah diaktifkan dan sedang digunakan. EXPLAIN DDL juga merekomendasikan tingkat paralelisme optimal berdasarkan beban kerja kluster saat ini. BidangSuggest Infomenampilkan:This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.Sesuaikan nilaiinnodb_polar_parallel_ddl_threadssesuai rekomendasi untuk meningkatkan kinerja.
Contoh: parallel DDL dinonaktifkan
Periksa apakah parallel DDL diaktifkan:
MySQL [test]> SHOW variables LIKE "%parallel_ddl_threads%";
+----------------------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------------------+-------+
| innodb_polar_innovate_default_parallel_ddl_threads | 1 |
| innodb_polar_parallel_ddl_threads | 1 |
+----------------------------------------------------+-------+
2 rows in set (0.03 sec)Parallel DDL belum diaktifkan. Jalankan EXPLAIN untuk operasi penambahan indeks sekunder:
EXPLAIN ALTER TABLE t1 ADD index k_a(a);*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: No
Rebuilt table: No
Parallel Support: Yes But Not Enable
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info: 1. This DDL operation could use Parallel DDL to speed up.
Statement: EXPLAIN ALTER TABLE t1 ADD index k_a(a)
1 row in set (0.01 sec)Parallel Support: Yes But Not Enabled berarti operasi tersebut dapat menggunakan parallel DDL, tetapi fitur tersebut tidak aktif. Aktifkan parallel DDL untuk mempercepatnya.
Contoh: parallel DDL diaktifkan
Atur tingkat paralelisme menjadi 2:
MySQL [test]> SET innodb_polar_parallel_ddl_threads = 2;
Query OK, 0 rows affected (0.00 sec)Jalankan EXPLAIN untuk operasi penambahan indeks sekunder yang sama:
EXPLAIN ALTER TABLE t1 ADD index k_a(a);*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: No
Rebuilt table: No
Parallel Support: Yes
Parallel Degree: 2
Concurrent DML: Yes
Possible blocked MDLs:
Error Msg:
Suggest Info: 1. This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.
Statement: explain ALTER TABLE t1 ADD index k_a(a)
1 row in set (0.01 sec)Parallel Support: Yes dan Parallel Degree: 2 mengonfirmasi bahwa operasi tersebut menggunakan dua thread paralel. Karena beban kerja kluster saat ini rendah, Suggest Info merekomendasikan peningkatan tingkat paralelisme menjadi 8 untuk kinerja yang lebih baik.
Deteksi pemblokiran MDL
Operasi DDL pada sebuah tabel dapat diblokir oleh transaksi yang belum dikomit yang memegang Metadata Lock (MDL) pada tabel yang sama. Dalam kasus ekstrem, blokir MDL yang tidak terdeteksi dapat menyebabkan penumpukan koneksi aktif dan ketidakstabilan kluster. Gunakan bidang Possible blocked MDLs untuk mengidentifikasi koneksi yang memblokir sebelum menjalankan DDL.
Jika terdapat pemblokiran, Possible blocked MDLs mencantumkan ID proses koneksi dengan transaksi yang belum dikomit. Hentikan koneksi tersebut dengan KILL atau KILL QUERY untuk membuka blokir DDL.
Contoh: mendeteksi blokir MDL
Pada koneksi 1, mulai transaksi pada t1 tanpa melakukan commit:
MySQL [test]> begin;
Query OK, 0 rows affected (0.00 sec)
MySQL [test]> select * from t1;
Empty set (0.00 sec)Pada koneksi 2, jalankan EXPLAIN DDL pada t1:
EXPLAIN ALTER TABLE t1 engine= innodb;
*************************** 1. row ***************************
Error No: 0
Algorithm: INPLACE
Metadata Only: No
Rebuilt table: Yes
Parallel Support: Yes But Not Enable
Parallel Degree: 1
Concurrent DML: Yes
Possible blocked MDLs: 18
Error Msg:
Suggest Info: 1. This DDL operation may be blocked by the threads listed under 'Possible blocked MDLs'.
2. This DDL operation could use Parallel DDL to speed up.
Statement: EXPLAIN ALTER TABLE t1 engine= innodbPossible blocked MDLs: 18 mengidentifikasi bahwa koneksi 18 memiliki transaksi yang belum dikomit yang akan menghambat DDL ini. Jalankan KILL 18 atau KILL QUERY 18 untuk menghentikannya sebelum melanjutkan.