全部产品
Search
文档中心

Data Management:Evolusi skema tanpa lock

更新时间:Jan 07, 2026

Perubahan Data Definition Language (DDL) tanpa lock mencegah tabel terkunci selama evolusi skema. Fitur ini menghindari gangguan bisnis dan latensi pada tautan aktif/standby yang dapat disebabkan oleh DDL online native. Disarankan untuk mengirimkan perubahan tanpa lock selama jam non-puncak bisnis.

Informasi latar belakang

Mengubah skema tabel besar dapat mengunci tabel tersebut, sehingga memblokir operasi tulis. Fitur native MySQL mencakup hal-hal berikut:

  • MySQL 5.5 dan versi sebelumnya menyediakan dua algoritma eksekusi DDL: Table-Copy dan In-Place.

    • Table-Copy: Menyalin data ke tabel temporary untuk menyelesaikan perubahan. Tabel dikunci dan tidak dapat ditulis selama proses perubahan.

    • In-Place (tersedia sejak MySQL 5.5): Database dapat dibaca dan ditulis saat algoritma ini berjalan. Namun, hanya mendukung operasi pada indeks.

  • MySQL 5.6 dan versi yang lebih baru juga menyediakan Innodb-OnlineDDL. Untuk informasi selengkapnya tentang Innodb-OnlineDDL, lihat Innodb-OnlineDDL.

    Fitur ini mendukung berbagai jenis DDL, seperti menambah kolom, menghapus kolom, mengganti nama kolom, menambah indeks, dan memodifikasi indeks. Namun, fitur ini tidak mendukung beberapa jenis DDL umum, seperti memodifikasi tipe kolom, memodifikasi panjang kolom, dan memodifikasi set karakter.

Skenario

  • Mengubah skema tabel database.

  • Mengubah set karakter dan aturan pengurutan tabel, atau menyesuaikan zona waktu.

  • Menghindari tabel terkunci akibat operasi `Optimize Table` yang mereklaim ruang tabel dan mengurangi laju fragmentasi. Untuk informasi selengkapnya, lihat Reklaim ruang terfragmentasi dengan evolusi skema tanpa lock.

Tipe database yang didukung

RDS for MySQL, PolarDB for MySQL, MyBase for MySQL, dan database lain yang kompatibel dengan MySQL.

Fitur

  • Dibandingkan dengan fitur database native, evolusi skema tanpa lock DMS memungkinkan Anda mengontrol kecepatan eksekusi perubahan. Kemampuan ini mengurangi dampak terhadap performa database, menghindari latensi pada tautan aktif/standby, serta mendukung banyak skenario di mana DDL online native akan mengunci tabel.

  • Dibandingkan dengan alat lain seperti PT-Online dan OSC, evolusi skema tanpa lock DMS tidak bergantung pada trigger. Fitur ini memiliki dampak minimal terhadap database selama eksekusi asinkron dan dapat dihentikan secara aman kapan saja.

  • Evolusi skema tanpa lock DMS sangat kompatibel dengan Data Transmission Service (DTS). Jika tabel yang sedang menjalani perubahan skema memiliki tugas replikasi tingkat tabel DTS, penggunaan DMS untuk evolusi skema tanpa lock tidak menyebabkan gangguan replikasi.

    Catatan

    Tugas replikasi DTS harus telah dimulai ulang setelah 14 Februari 2020.

  • Perbandingan antara DDL online MySQL native dan evolusi skema tanpa lock DMS:

    Sumber daya yang didukung

    MySQL 5.5 dan versi sebelumnya

    MySQL 5.6 dan versi selanjutnya

    Evolusi skema tanpa lock DMS

    Tambah kolom

    No

    Yes

    Yes

    Hapus kolom

    N

    Yes

    Yes

    Ganti nama kolom

    N

    Yes

    Yes

    Tambah indeks

    N

    Yes

    Yes

    Modifikasi indeks

    N

    Yes.

    Yes

    Defragmentation

    N

    Yes

    Yes

    Modifikasi tipe kolom

    N

    N

    Yes

    Modifikasi panjang kolom

    N

    N

    Yes

    Modifikasi set karakter

    N

    N

    Yes

    Convert characters

    N

    No.

    Yes

    Adjust time zone

    N

    N

    Yes

    Reduce or eliminate secondary database latency

    N

    N

    Yes

    • No: Tidak didukung.

    • Yes: Didukung.

Untuk perbandingan evolusi skema tanpa lock DMS dengan solusi lain, lihat Perbandingan solusi evolusi skema tanpa lock.

Perhatian

  • DMS mendukung evolusi skema untuk tabel partisi yang sudah ada.

  • Evolusi skema tanpa lock mendukung perubahan beberapa tabel dalam database yang sama dalam satu tiket.

    Saat Anda mengonfigurasi SQL perubahan untuk tiket tersebut, gunakan titik koma (;) untuk memisahkan pernyataan SQL untuk tabel yang berbeda.

  • Saat melakukan evolusi skema tanpa lock pada tabel yang hanya memiliki primary key atau hanya unique key, jangan memperbarui kolom dari kunci tersebut. Jika tidak, tugas perubahan akan gagal.

  • DMS di wilayah AS (Silicon Valley) tidak mendukung fitur ini.

Cara kerja

Saat Anda mengirimkan tiket evolusi skema tanpa lock, DMS secara otomatis melakukan operasi berikut untuk menyelesaikan perubahan tanpa mengunci tabel.

  1. Buat tabel temporary: DMS membuat tabel temporary di database target dengan skema yang sama seperti tabel asli. Tabel temporary ini digunakan untuk menyalin data.

    Sintaks SQL-nya adalah CREATE TABLE tmp_table_name LIKE table_name.

  2. Modifikasi struktur tabel temporary: Anda dapat memodifikasi struktur tabel temporary tersebut.

    Sintaks SQL-nya adalah ALTER TABLE tmp_table_name XXXX.

  3. Salin data lengkap: DMS menyalin semua data dari tabel asli ke tabel temporary.

    Sintaks SQL-nya adalah INSERT IGNORE INTO tmp_table_name (SELECT %s FROM table_name FORCE INDEX (%s) WHERE XXX LOCK IN SHARE MODE).

  4. Uraikan log biner dan sinkronkan data inkremental: DMS menyinkronkan data inkremental dari tabel asli ke tabel temporary.

    Sintaks SQL-nya adalah UPDATE/INSERT/DELETE tmp_table_name.

  5. Alihkan tabel: DMS mengganti nama tabel asli menjadi nama backup, lalu mengganti nama tabel temporary menjadi nama tabel asli.

    Sintaks SQL-nya adalah RENAME TABLE table_name to old_tmp_table_name, tmp_table_name to table_name.

Catatan

`tmp_table_name` adalah contoh nama tabel temporary. Anda dapat menemukan nama tabel temporary aktual di halaman progres tugas untuk perubahan tanpa lock. Untuk informasi selengkapnya, lihat Lihat progres perubahan tanpa lock.

Format nama tabel temporary adalah sebagai berikut:

  • Tabel data: `tp_{Change_ID}_ogt_{Original_Table_Name}`, `tp_{Change_ID}_g_{Original_Table_Name}`

  • Tabel heartbeat: `tp_{Change_ID}_ogl_{Original_Table_Name}`, `tp_{Change_ID}_l_{Original_Table_Name}`

  • Tabel helper sebelum alih dan tabel asli setelah alih: `tp_{Change_ID}_del_{Original_Table_Name}`, `tp_{Change_ID}_d_{Original_Table_Name}`

  • Deteksi penguncian tabel: `tpa_xxx_xxx`

Catatan

ID perubahan adalah ID eksekusi dari mesin internal DMS. Ini bukan nomor tiket atau nomor tugas.

Referensi

FAQ

  • Q: Apakah evolusi skema tanpa lock memengaruhi bisnis saya?

    A: Layanan Anda tidak terganggu. Namun, performa instans akan sedikit terdampak karena proses perubahan melibatkan penyalinan data.

  • Q: Saya menerima error saat mencoba menambahkan indeks dengan menjalankan CREATE_INDEX dalam tiket perubahan tanpa lock. Apakah DMS tidak mendukung penambahan indeks?

    A: DMS mendukung penambahan indeks. Anda dapat menggunakan pernyataan ALTER TABLE berikut untuk menambahkan indeks:

    ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ;
  • Q: Saya menerima error saat mencoba mengganti nama bidang dengan menjalankan rename column dalam tiket perubahan tanpa lock. Apakah DMS tidak mendukung penggantian nama bidang?

    A: DMS mendukung penggantian nama bidang. Anda dapat menggunakan pernyataan ALTER TABLE berikut untuk mengganti nama bidang:

    ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name datatype;