PolarDB mendukung fitur replikasi kunci metadata asinkron (MDL) untuk meningkatkan efisiensi operasi DDL. Topik ini menjelaskan fitur tersebut.
Versi yang didukung
PolarDB for MySQL klaster versi 5.6 dan 5.7 dari semua revisi mendukung fitur ini.
Untuk klaster PolarDB for MySQL versi 8.0, versi revisi harus 8.0.1.1.10 atau lebih baru. Untuk informasi lebih lanjut tentang cara memeriksa versi klaster, lihat Kueri Versi Mesin.
Latar Belakang
Saat menjalankan operasi DDL pada database, sinkronisasi informasi MDL antara node utama dan node baca-saja diperlukan untuk menjaga konsistensi definisi data. Namun, operasi DDL sering kali menguasai MDL di node utama, menyebabkan node baca-saja menunggu lama sebelum mendapatkan informasi MDL. Selama waktu ini, node baca-saja tidak dapat mengurai log redo, yang berdampak signifikan pada efisiensi operasi DDL.
PolarDB memisahkan sinkronisasi MDL dari penguraian log redo melalui fitur replikasi kunci metadata asinkron. Dengan demikian, node baca-saja tetap dapat mengurai dan menerapkan log redo meskipun sedang menunggu sinkronisasi informasi kunci metadata.
Menggunakan fitur replikasi kunci metadata asinkron
Fitur ini tersedia secara out-of-the-box pada klaster yang didukung tanpa memerlukan konfigurasi tambahan.
Anda dapat menjalankan pernyataan berikut pada node baca-saja untuk mendapatkan informasi terkait sinkronisasi MDL:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOG_MDL_SLOT;CatatanKlaster PolarDB harus memenuhi salah satu persyaratan berikut:
Klaster PolarDB for MySQL menjalankan MySQL 8.0.1 dengan versi revisi 8.0.1.1.24 atau lebih baru.
Klaster PolarDB for MySQL menjalankan MySQL 5.7 dengan versi revisi 5.7.1.0.20 atau lebih baru.
Klaster PolarDB for MySQL menjalankan MySQL 5.6 dengan versi revisi 5.6.1.0.33 atau lebih baru.
Jika klaster Anda tidak memenuhi salah satu persyaratan di atas, kami sarankan Anda memperbarui versi.
Untuk informasi tentang cara memaksa menjalankan kueri pada node tertentu, lihat bagian "Hint" dari Ikhtisar.
Hasil berikut dikembalikan:
+---------+------------+-------------------+----------+-------------------+ | 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 | +---------+------------+-------------------+----------+-------------------+Tabel ini mencantumkan detail informasi MDL yang sedang disinkronkan. Dalam tabel ini, kolom
slot_namemenunjukkan informasi tabel data terkait, dan kolomslot_statemenunjukkan status sinkronisasi MDL saat ini, termasuk:SLOT_NONE: keadaan inisialisasi.
SLOT_RESERVED: Node baca-saja telah menerima permintaan informasi MDL dan sedang menunggu thread pekerja yang ditugaskan oleh sistem penjadwalan untuk memproses permintaan tersebut.
SLOT_ACQUIRING: Sistem telah mengalokasikan sumber daya thread pekerja, dan node baca-saja sedang mengirim permintaan MDL.
CatatanJika MDL yang dibutuhkan oleh node baca-saja dipegang oleh koneksi lain, sinkronisasi MDL tetap berada dalam keadaan ini.
SLOT_LOCKED: MDL pada node baca-saja telah diperoleh dan dipegang.
SLOT_RELEASING: Node baca-saja telah menerima permintaan pelepasan MDL dan sedang menunggu thread pekerja yang ditugaskan oleh sistem penjadwalan untuk memproses permintaan tersebut.
Anda dapat menjalankan pernyataan berikut untuk menanyakan informasi status tentang thread pekerja yang digunakan oleh node baca-saja untuk memproses permintaan sinkronisasi MDL:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOG_MDL_THREAD;CatatanKlaster PolarDB harus memenuhi salah satu persyaratan berikut:
Klaster PolarDB for MySQL menjalankan MySQL 8.0.1 dengan versi revisi 8.0.1.1.24 atau lebih baru.
Klaster PolarDB for MySQL menjalankan MySQL 5.7 dengan versi revisi 5.7.1.0.20 atau lebih baru.
Klaster PolarDB for MySQL menjalankan MySQL 5.6 dengan versi revisi 5.6.1.0.33 atau lebih baru.
Jika klaster Anda tidak memenuhi salah satu persyaratan di atas, kami sarankan Anda memperbarui versi.
Untuk informasi tentang cara memaksa menjalankan kueri pada node tertentu, lihat bagian "Hint" dari Ikhtisar.
Hasil berikut dikembalikan:
+-----------+-----------+------------------+-------------------+----------+ | 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 ada permintaan sinkronisasi MDL dengan status
SLOT_ACQUIRINGdi tabelINNODB_LOG_MDL_SLOT, maka thread pekerja yang sesuai tersedia di tabelINNODB_LOG_MDL_THREADuntuk memproses permintaan tersebut. Ini menunjukkan bahwa nilai parameterthr_statebukanfree. Kasus ini menunjukkan bahwa node baca-saja kemungkinan besar sedang menunggu MDL. Anda dapat memeriksa apakah MDL dikuasai berdasarkan apakah nilai parameterthr_stateadalahfree.
Hubungi kami
Jika Anda memiliki pertanyaan tentang operasi DDL, hubungi kami.