全部产品
Search
文档中心

PolarDB:EXPLAIN DDL

更新时间:Jul 03, 2025

Di MySQL, operasi DDL dapat menjadi kompleks dan memakan waktu. Kesalahan kecil saja bisa berdampak pada bisnis Anda. PolarDB for MySQL memperkenalkan fitur EXPLAIN DDL, yang memungkinkan Anda memahami detail eksekusi sebelumnya untuk menilai dampak operasi DDL terhadap bisnis secara akurat.

Pendahuluan

Operasi DDL dalam ekosistem MySQL bersifat kompleks dan memerlukan waktu lama untuk dieksekusi. Selain mengonsumsi banyak sumber daya perangkat keras, operasi ini juga dapat mengunci tabel. Penggunaan yang tidak tepat dapat berdampak serius pada bisnis Anda. Fitur eksekusi pun bervariasi tergantung pada jenis operasi DDL. Sebagai contoh, penambahan kolom tidak memerlukan pembuatan ulang tabel dan dapat diselesaikan dalam hitungan detik. Namun, modifikasi tipe kolom memerlukan pembuatan ulang tabel sepenuhnya dan tidak mengizinkan operasi penulisan selama proses tersebut.

PolarDB for MySQL menyediakan fitur EXPLAIN DDL untuk membantu Anda mengevaluasi fitur eksekusi dari suatu operasi DDL, seperti adanya konflik kunci atau kebutuhan pembuatan ulang tabel. Mirip dengan EXPLAIN SQL, Anda dapat menjalankan EXPLAIN pada pernyataan DDL sebelum eksekusi untuk mendapatkan wawasan mendetail.

Versi yang Didukung

Kluster PolarDB for MySQL Anda harus menjalankan salah satu versi mesin database berikut:

  • PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.49 atau lebih baru.

  • PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.27 atau lebih baru.

Peringatan

  • Operasi EXPLAIN DDL hanya didukung untuk tabel yang menggunakan Mesin penyimpanan InnoDB.

  • Operasi EXPLAIN DDL tidak mengubah data aktual apa pun.

  • Operasi EXPLAIN DDL dapat dilakukan baik pada node utama maupun node baca-saja. Namun, bidang Possible blocked MDLs hanya menampilkan potensi konflik kunci pada node saat ini.

Penggunaan

Parameter

Aktifkan fitur EXPLAIN DDL dengan mengonfigurasi parameter loose_polar_enable_explain_ddl. Tentukan jumlah thread MDL potensial yang akan dikumpulkan dengan mengonfigurasi parameter loose_polar_max_collect_thd_num_in_explain_ddl. Untuk informasi lebih lanjut, lihat Konfigurasikan parameter kluster dan node. Tabel berikut menjelaskan parameter:

Parameter

Tingkat

Deskripsi

loose_polar_enable_explain_ddl

Global

Menghidupkan atau mematikan fitur EXPLAIN DDL. Nilai valid:

  • ON (default)

  • OFF

loose_polar_max_collect_thd_num_in_explain_ddl

Global

Menentukan jumlah thread MDL potensial yang akan dikumpulkan.

Nilai valid: 1 hingga 512. Nilai default adalah 16.

Sintaksis

{ EXPLAIN | DESCRIBE | DESC } 	ALTER TABLE ...

Tabel berikut menjelaskan bidang keluaran:

Bidang

Deskripsi

Nilai valid

Error No

Kode kesalahan.

  • 0: eksekusi berhasil.

  • Lainnya: kode kesalahan.

Algorithm

Algoritma eksekusi yang digunakan oleh operasi DDL.

  • Unknown

  • INSTANT

  • INPLACE

  • COPY

Metadata Only

Menunjukkan apakah operasi DDL hanya memodifikasi metadata, bukan data aktual di tabel.

  • Unknown

  • Yes: hanya memodifikasi metadata.

  • No: memodifikasi metadata dan data aktual di tabel.

Rebuilt Table

Menunjukkan apakah operasi DDL memerlukan pembuatan ulang tabel.

  • Unknown

  • Yes

  • No

Parallel Support

Menunjukkan apakah operasi DDL mendukung DDL paralel untuk akselerasi.

  • Unknown

  • No: DDL paralel tidak didukung.

  • Not Needed: DDL paralel tidak diperlukan karena tidak ada data yang dimodifikasi.

  • Yes: DDL paralel diaktifkan dan digunakan untuk akselerasi.

  • Yes, But Not Enabled: DDL paralel didukung tetapi belum diaktifkan saat ini.

Parallel Degree

Jumlah thread yang digunakan oleh operasi DDL.

  • -1: tidak diketahui.

  • [1-128]: jumlah thread paralel untuk DDL.

Concurrent DML

Menunjukkan apakah operasi DDL mendukung pembacaan dan penulisan bersamaan selama proses.

  • Unknown

  • Yes

  • No

Possible Blocked MDLs

Transaksi yang mungkin memblokir operasi DDL, diidentifikasi oleh Process ID dari koneksi terkait.

Sebuah string dari Process ID, dipisahkan oleh koma.

Error Msg

Pesan kesalahan yang terkait dengan Error No dari operasi DDL saat ini.

Sebuah string.

Suggest Info

Saran untuk mengoptimalkan operasi DDL saat ini.

Sebuah string.

Catatan

Saran dapat mencakup, tetapi tidak terbatas pada:

  • Jika bidang Possible blocked MDLs berisi entri, Anda akan diberi tahu untuk menangani potensi konflik kunci.

  • Jika DDL paralel didukung, parameter tuning disediakan untuk mempercepat proses lebih lanjut.

Statement

Pernyataan DDL saat ini.

Pernyataan DDL.

Contoh

Meminta fitur eksekusi dari operasi DDL

Dengan menganalisis bidang Algorithm, Metadata Only, Rebuilt Table, dan Concurrent DML dalam keluaran EXPLAIN DDL, Anda dapat memahami fitur eksekusi dari operasi DDL.

  • Nilai Yes pada bidang Concurrent DML menunjukkan bahwa eksekusi DDL mendukung operasi pembacaan dan penulisan bersamaan. Permintaan pembacaan dan penulisan bisnis tidak diblokir.

  • Nilai Yes pada bidang Rebuilt Table menunjukkan bahwa operasi DDL memerlukan pembuatan ulang tabel sepenuhnya. Untuk ruang tabel besar, ini bisa memakan waktu lama. Anda dapat menjalankan DDL semacam itu selama jam-jam sepi.

  • Nilai Yes pada bidang Metadata Only menunjukkan bahwa operasi DDL tidak memodifikasi data di tabel. Operasi semacam itu dapat selesai dalam hitungan detik tanpa memandang ukuran tabel, yang menyebabkan dampak minimal pada beban kerja database.

Berikut adalah contoh eksekusi DDL:

  • Struktur tabel uji:

    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)
  • EXPLAIN operasi menambahkan kolom:

    EXPLAIN ALTER TABLE t1 ADD COLUMN d INT;

    Hasil eksekusi:

    *************************** 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)

    Hasilnya menunjukkan bahwa operasi menambahkan kolom mendukung algoritma INSTANT, hanya memodifikasi metadata (tidak memerlukan pembuatan ulang tabel), dan mendukung akses DML bersamaan. Operasi DDL ini dapat dieksekusi dalam hitungan detik dengan dampak minimal pada bisnis.

  • EXPLAIN operasi mengganti nama tabel:

    EXPLAIN ALTER TABLE t1 rename t1_rn;

    Hasil eksekusi:

    *************************** 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)

    Hasilnya menunjukkan bahwa operasi mengganti nama tabel mendukung algoritma INPLACE, hanya memodifikasi metadata (tidak memerlukan pembuatan ulang tabel), dan mendukung akses DML bersamaan. Operasi DDL ini menyebabkan dampak minimal pada bisnis karena tidak memodifikasi data di tabel.

  • EXPLAIN operasi memodifikasi definisi kolom:

    EXPLAIN ALTER TABLE t1 modify COLUMN a char(1);

    Hasil eksekusi:

    *************************** 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)

    Hasilnya menunjukkan bahwa operasi memodifikasi definisi kolom mendukung algoritma COPY, memerlukan pembuatan ulang data, dan tidak mendukung akses DML bersamaan. Operasi DDL ini menyebabkan dampak signifikan pada bisnis dan harus dieksekusi dengan hati-hati.

  • EXPLAIN operasi pembuatan ulang tabel:

    EXPLAIN ALTER TABLE t1 engine= innodb;

    Hasil eksekusi:

    *************************** 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= innodb

    Hasilnya menunjukkan bahwa operasi pembuatan ulang tabel mendukung algoritma INPLACE, memerlukan pembuatan ulang tabel sepenuhnya, dan mendukung akses DML bersamaan. Meskipun akses data diizinkan selama eksekusi, kami merekomendasikan Anda menjalankan operasi DDL ini selama jam-jam sepi karena pembuatan ulang tabel sepenuhnya mengonsumsi sejumlah besar sumber daya database.

Meminta apakah operasi DDL saat ini mendukung DDL paralel untuk akselerasi

PolarDB for MySQL memanfaatkan fitur DDL paralel untuk mempercepat operasi DDL. Dengan memeriksa bidang Parallel Support dan Parallel Degree dalam keluaran EXPLAIN DDL, Anda dapat menentukan apakah operasi DDL saat ini mendukung DDL paralel untuk akselerasi.

  • Jika operasi DDL saat ini mendukung DDL paralel tetapi fitur tersebut tidak diaktifkan untuk kluster ini, bidang Suggest Info menampilkan pesan This DDL operation could use Parallel DDL to speed up. . Untuk informasi lebih lanjut tentang cara mengaktifkan DDL paralel, lihat DDL Paralel.

  • Jika operasi DDL saat ini mendukung DDL paralel dan fitur tersebut diaktifkan untuk kluster, EXPLAIN DDL menyarankan tingkat paralelisme optimal berdasarkan beban kerja kluster saat ini. Bidang Suggest Info menampilkan pesan This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.. Anda dapat menyesuaikan parameter innodb_polar_parallel_ddl_threads sesuai rekomendasi untuk meningkatkan efek akselerasi.

Berikut adalah contoh eksekusi:

  • Nonaktifkan DDL paralel dan EXPLAIN operasi menambahkan indeks sekunder:

    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)

    Hasilnya menunjukkan bahwa DDL paralel tidak diaktifkan. EXPLAIN operasi menambahkan indeks sekunder:

    EXPLAIN ALTER TABLE t1 ADD index k_a(a);

    Hasil eksekusi:

    *************************** 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)

    Nilai Yes But Not Enabled pada bidang Parallel Support menunjukkan bahwa operasi DDL saat ini dapat dipercepat oleh fitur DDL paralel, tetapi fitur tersebut tidak diaktifkan untuk kluster. Akibatnya, operasi DDL ini tidak menggunakan DDL paralel untuk akselerasi. Selain itu, bidang Suggest Info memberikan saran untuk mengaktifkan DDL paralel.

  • Aktifkan DDL paralel dan EXPLAIN operasi menambahkan indeks sekunder:

    Atur tingkat paralelisme menjadi 2:

    MySQL [test]> SET innodb_polar_parallel_ddl_threads = 2 ;
    Query OK, 0 rows affected (0.00 sec)

    EXPLAIN operasi menambahkan indeks sekunder:

    EXPLAIN ALTER TABLE t1 ADD index k_a(a);

    Hasil eksekusi:

    *************************** 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)

Nilai bidang Parallel Degree adalah 2, menunjukkan bahwa operasi menggunakan dua thread. Selain itu, karena beban kerja kluster rendah, bidang Suggest Info memberikan saran untuk meningkatkan tingkat paralelisme menjadi 8 untuk akselerasi yang lebih baik.

Pendeteksian MDL blokir potensial

Eksekusi DDL dapat diblokir oleh transaksi yang belum dikomit pada tabel target, yang dapat menyebabkan masalah koneksi aktif dan dalam kasus ekstrem dapat membuat kluster Anda crash. Bidang Possible blocked MDLs dalam keluaran EXPLAIN DDL membantu Anda mengidentifikasi potensi konflik kunci sebelumnya. Saat ada potensi konflik kunci, bidang tersebut mencantumkan Process ID dari koneksi dengan transaksi yang belum dikomit. Anda dapat menyelesaikan masalah ini dengan menjalankan perintah KILL atau KILL QUERY untuk menghentikan transaksi dan mencegah operasi DDL diblokir.

Berikut adalah contoh sederhana: Di koneksi 1, akses tabel t1 tanpa mengkomit transaksi. Di koneksi 2, jalankan operasi EXPLAIN DDL pada tabel t1. Bidang Possible blocked MDLs mencantumkan Process ID dari koneksi dengan transaksi yang belum dikomit, dan Suggest Info memberikan saran yang sesuai.

  • Koneksi 1:

    Akses tabel t1 tanpa mengkomit transaksi:

    MySQL [test]> begin;
    Query OK, 0 rows affected (0.00 sec)
    
    MySQL [test]> select * from t1;
    Empty set (0.00 sec)
  • Koneksi 2:

    Jalankan operasi EXPLAIN DDL pada tabel 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= innodb