全部产品
Search
文档中心

PolarDB:Replikasi kunci metadata asinkron

更新时间:Jul 06, 2025

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;
    Catatan
    • Klaster 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_name menunjukkan informasi tabel data terkait, dan kolom slot_state menunjukkan 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.

      Catatan

      Jika 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;
    Catatan
    • Klaster 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_ACQUIRING di tabel INNODB_LOG_MDL_SLOT, maka thread pekerja yang sesuai tersedia di tabel INNODB_LOG_MDL_THREAD untuk memproses permintaan tersebut. Ini menunjukkan bahwa nilai parameter thr_state bukan free. Kasus ini menunjukkan bahwa node baca-saja kemungkinan besar sedang menunggu MDL. Anda dapat memeriksa apakah MDL dikuasai berdasarkan apakah nilai parameter thr_state adalah free.

Hubungi kami

Jika Anda memiliki pertanyaan tentang operasi DDL, hubungi kami.