All Products
Search
Document Center

PolarDB:Replikasi kunci metadata asinkron

Last Updated:Mar 29, 2026

Saat operasi DDL dijalankan pada node primary, kunci metadata (MDL) akan dipegang. Node read-only harus menunggu informasi kunci tersebut tersinkronisasi sebelum dapat melanjutkan penguraian log redo—yang menyebabkan operasi DDL terhambat. Replikasi MDL asinkron memisahkan sinkronisasi MDL dari penguraian log redo sehingga node read-only tetap dapat menerapkan log redo selama menunggu informasi kunci, mengurangi dampak DDL terhadap performa kluster.

Versi yang didukung

VersiRevisi minimum
PolarDB for MySQL 5.6Semua versi revisi
PolarDB for MySQL 5.7Semua versi revisi
PolarDB for MySQL 8.08.0.1.1.10 atau lebih baru

Untuk memeriksa versi kluster Anda, lihat Kueri versi engine.

Cara kerja

Tanpa replikasi MDL asinkron, sinkronisasi MDL dan penguraian log redo saling terkait pada node read-only:

Node utamaread-only node
Menjalankan DDL — mendapatkan MDLMenerima sinyal untuk menyinkronkan MDL
DDL memegang MDLMenunggu sinkronisasi MDL selesai
Berhenti menguraikan log redo selama menunggu
DDL selesai — melepas MDLSinkronisasi MDL selesai — melanjutkan penguraian log redo

Dengan replikasi MDL asinkron, node read-only memisahkan kedua operasi ini: ia terus menguraikan dan menerapkan log redo di latar belakang, sementara thread pekerja khusus menangani sinkronisasi MDL secara paralel.

Memantau sinkronisasi MDL

Fitur ini diaktifkan secara default pada kluster yang didukung dan tidak memerlukan konfigurasi tambahan.

Dua tampilan INFORMATION_SCHEMA memungkinkan Anda memeriksa status sinkronisasi MDL pada node read-only.

Kedua kueri memerlukan versi revisi minimum berikut. Jika kluster Anda tidak memenuhi persyaratan ini, upgrade versi kluster.
MySQL 8.0.1: revisi 8.0.1.1.24 atau lebih baru
MySQL 5.7: revisi 5.7.1.0.20 atau lebih baru
MySQL 5.6: revisi 5.6.1.0.33 atau lebih baru. Untuk menjalankan kueri pada node tertentu, lihat bagian "Hint" di Ikhtisar.

Kueri status slot MDL

Jalankan pernyataan berikut pada node read-only untuk melihat semua slot sinkronisasi MDL aktif:

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOG_MDL_SLOT;

Contoh output:

+---------+------------+-------------------+----------+-------------------+
| slot_id | slot_state | slot_name         | slot_lsn | thread_id         |
+---------+------------+-------------------+----------+-------------------+
|       0 | SLOT_NONE  | no targeted table |        0 | no running thread |
|       1 | SLOT_NONE  | no targeted table |        0 | no running thread |
|       2 | SLOT_NONE  | no targeted table |        0 | no running thread |
|       3 | SLOT_NONE  | no targeted table |        0 | no running thread |
|       4 | SLOT_NONE  | no targeted table |        0 | no running thread |
+---------+------------+-------------------+----------+-------------------+

Setiap baris merepresentasikan satu slot sinkronisasi MDL. Kolom slot_name mengidentifikasi tabel target, dan slot_state menunjukkan fase sinkronisasi saat ini:

slot_stateMakna
SLOT_NONEStatus inisialisasi. Tidak ada permintaan MDL aktif.
SLOT_RESERVEDNode read-only menerima permintaan MDL dan sedang menunggu thread pekerja dari penjadwal.
SLOT_ACQUIRINGThread pekerja telah ditugaskan dan node read-only sedang mengirim permintaan MDL. Jika MDL sedang dipegang oleh koneksi lain, slot tetap dalam status ini hingga kunci dilepaskan.
SLOT_LOCKEDMDL telah didapatkan dan sedang dipegang oleh node read-only.
SLOT_RELEASINGNode read-only menerima permintaan pelepasan MDL dan sedang menunggu thread pekerja dari penjadwal.

Mendiagnosis penantian kunci: Slot yang terjebak dalam status SLOT_ACQUIRING menunjukkan bahwa node read-only kemungkinan besar sedang menunggu MDL yang dipegang oleh koneksi lain. Gunakan kueri thread pekerja di bawah ini untuk mengonfirmasi, lalu periksa apakah ada koneksi pada node primary yang sedang memegang kunci pada tabel yang ditampilkan di kolom slot_name.

Kueri status thread pekerja

Jalankan pernyataan berikut pada node read-only untuk melihat thread pekerja yang memproses permintaan sinkronisasi MDL:

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOG_MDL_THREAD;

Contoh output:

+-----------+-----------+------------------+-------------------+----------+
| thread_id | thr_state | slot_state       | slot_name         | slot_lsn |
+-----------+-----------+------------------+-------------------+----------+
|         0 | free      | not in acquiring | no targeted table |        0 |
|         1 | free      | not in acquiring | no targeted table |        0 |
|         2 | free      | not in acquiring | no targeted table |        0 |
|         3 | free      | not in acquiring | no targeted table |        0 |
+-----------+-----------+------------------+-------------------+----------+

Jika INNODB_LOG_MDL_SLOT menunjukkan slot dalam status SLOT_ACQUIRING dan thread pekerja terkait di INNODB_LOG_MDL_THREAD memiliki nilai thr_state yang tidak sama dengan free, maka kemungkinan besar node read-only sedang menunggu MDL. Periksa apakah ada koneksi pada node primary yang memegang kunci pada tabel yang ditampilkan di kolom slot_name.

Hubungi kami

Jika Anda memiliki pertanyaan mengenai operasi DDL, hubungi kami.

Hubungi kami

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