PolarDB for MySQL mendukung fitur DDL preemptif. DDL preemptif membantu menyelesaikan kegagalan operasi DDL yang disebabkan oleh kueri besar atau transaksi jangka panjang pada node baca-saja.
Gejala
Kegagalan sinkronisasi kunci metadata (MDL) terjadi saat operasi DDL dilakukan pada kluster PolarDB for MySQL. Pesan kesalahan:
ERROR HY000: Gagal mendapatkan MDL pada replika selama sinkronisasi DDLERROR HY000: Gagal mendapatkan kunci tabel pada replika; Anda dapat 'set polar_support_mdl_sync_preemption = ON' dan mencoba memulai ulang transaksiPrasyarat
Kluster PolarDB for MySQL Anda harus menjalankan salah satu versi mesin database berikut:
PolarDB for MySQL 5.6 dengan versi revisi 5.6.1.0.43 atau lebih baru.
PolarDB for MySQL 5.7 dengan versi revisi 5.7.1.0.34 atau lebih baru.
PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.39 atau lebih baru.
PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.14 atau lebih baru.
Untuk informasi tentang cara melihat versi mesin database suatu kluster, lihat Kueri versi mesin.
Batasan
Fitur DDL preemptif hanya didukung untuk node baca-saja.
Catatan penggunaan
Jika Anda mengaktifkan fitur DDL preemptif, koneksi ke tabel pada node baca-saja mungkin terputus atau pernyataan SQL yang belum dieksekusi pada tabel tersebut dapat dibatalkan. Lanjutkan dengan hati-hati.
Fitur DDL preemptif hanya berlaku jika nilai parameter loose_replica_lock_wait_timeout lebih besar dari jumlah nilai parameter loose_polar_mdl_sync_preempt_after_wait_second ditambah 5.
Untuk memastikan bahwa DDL preemptif berlaku ketika Anda mengganti nama tabel di MySQL for PolarDB 8.0.1 atau MySQL for PolarDB 8.0.2, gunakan pernyataan
ALTER TABLE RENAMEalih-alih pernyataan RENAME.
Informasi latar belakang
PolarDB for MySQL menggunakan arsitektur penyimpanan bersama. Ketika Anda melakukan operasi DDL, sistem memperoleh kunci MDL-X pada node utama dan kemudian memberi tahu node baca-saja untuk memperoleh kunci MDL-X. Jika tabel pada node baca-saja sedang diakses, thread sinkronisasi MDL-X terblokir. Jika node baca-saja tidak dapat memperoleh kunci MDL-X dalam periode timeout yang ditentukan, klien mengembalikan kode kesalahan dan pesan kesalahan berikut: ERROR 8007 (HY000): Gagal mendapatkan MDL pada replika selama sinkronisasi DDL. Masalah ini sering terjadi di kluster PolarDB for MySQL yang berisi beberapa node baca-saja. Anda dapat menggunakan fitur DDL preemptif untuk menyelesaikan masalah ini.
Penggunaan
Anda dapat mengatur parameter loose_polar_support_mdl_sync_preemption ke ON untuk mengaktifkan fitur DDL preemptif dan kemudian mengonfigurasi parameter loose_polar_mdl_sync_preempt_after_wait_second untuk menentukan periode timeout dalam mana sinkronisasi MDL harus selesai. Untuk informasi lebih lanjut, lihat Konfigurasikan parameter kluster dan node. Tabel berikut menjelaskan parameter tersebut.
Parameter | Tingkat | Deskripsi |
loose_polar_support_mdl_sync_preemption | Sesi | Menentukan apakah akan mengaktifkan fitur DDL preemptif. Nilai valid:
|
loose_polar_mdl_sync_preempt_after_wait_second | Global | Periode timeout dalam mana sinkronisasi MDL harus selesai. Jika kunci MDL tidak disinkronkan ketika periode timeout yang ditentukan berakhir, thread preemption dimulai. Nilai valid: 1 hingga 31536000. Unit: detik. Nilai default: 10. |
Contoh
DDL Preemptif dinonaktifkan
DDL Preemptif diaktifkan
Hubungi kami
Jika Anda memiliki pertanyaan tentang operasi DDL, hubungi kami.

