全部产品
Search
文档中心

Data Management:Perubahan skema tanpa penguncian

更新时间:Nov 10, 2025

Perubahan Data Definition Language (DDL) tanpa penguncian mencegah tabel dikunci selama perubahan skema. Fitur ini menghindari gangguan layanan akibat tabel terkunci dan mencegah latensi pada tautan aktif/cadangan yang dapat terjadi dengan Online DDL asli. Kami menyarankan Anda mengirimkan perubahan tanpa penguncian di luar jam puncak beban.

Informasi latar belakang

Saat mengubah skema tabel besar, Anda harus mempertimbangkan risiko penguncian tabel. Tabel yang terkunci mencegah operasi tulis. MySQL asli menyediakan kemampuan berikut:

  • Pada MySQL 5.5 dan versi sebelumnya, DDL menyediakan dua algoritma eksekusi:

    • Table-Copy: Algoritma ini melakukan perubahan dengan menyalin data ke tabel sementara. Selama proses ini, tabel sumber dikunci dan tidak mengizinkan operasi tulis.

    • In-Place (tersedia sejak MySQL 5.5): Algoritma ini memungkinkan operasi baca dan tulis saat database berjalan. Namun, algoritma ini hanya mendukung perubahan yang berkaitan dengan indeks.

  • Pada MySQL 5.6 dan versi selanjutnya, DDL juga menyediakan Innodb-OnlineDDL. Untuk informasi lebih lanjut tentang Innodb-OnlineDDL, lihat Innodb-OnlineDDL.

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

Skenario

Tipe database yang didukung

RDS for MySQL, PolarDB for MySQL, MyBase for MySQL, dan database MySQL yang dikelola sendiri lainnya.

Fitur

  • Dibandingkan dengan fitur database asli, fitur perubahan skema tanpa penguncian DMS memungkinkan Anda mengontrol kecepatan eksekusi perubahan. Hal ini membantu menghindari latensi pada tautan aktif/cadangan, meminimalkan dampak pada kinerja database, dan mendukung banyak skenario di mana Online DDL asli akan mengunci tabel.

  • Dibandingkan dengan alat lain seperti pt-online-schema-change dan OSC, fitur perubahan skema tanpa penguncian DMS tidak bergantung pada pemicu (trigger). Fitur ini memiliki dampak minimal pada database selama eksekusi asinkron dan dapat dihentikan dengan aman kapan saja.

  • Fitur perubahan skema tanpa penguncian DMS sangat kompatibel dengan DTS. Jika tabel yang sedang diubah memiliki tautan replikasi tingkat tabel DTS, penggunaan fitur perubahan skema tanpa penguncian DMS tidak akan mengganggu replikasi DTS.

    Catatan

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

  • Tabel berikut membandingkan kemampuan Online DDL MySQL asli dan fitur perubahan skema tanpa penguncian DMS.

    Item yang didukung

    MySQL 5.5 dan versi sebelumnya

    MySQL 5.6 dan versi selanjutnya

    Perubahan skema tanpa penguncian DMS

    Tambah kolom

    N

    Y

    Y

    Hapus kolom

    N

    Yes

    Yes.

    Ganti nama kolom

    N

    Yes

    Yes

    Tambah indeks

    N

    Yes

    Yes.

    Modifikasi indeks

    N

    Y

    Y

    Operasi defragmentasi

    N

    Y

    Yes

    Modifikasi tipe kolom

    N

    N

    Y

    Modifikasi panjang kolom

    N

    N

    Yes

    Modifikasi set karakter

    N

    N

    Yes

    Konversi set karakter

    N

    N

    Y

    Operasi koreksi zona waktu

    N

    N

    Yes.

    Mitigasi atau menghilangkan latensi database sekunder

    N

    N

    Yes

    • No: Tidak didukung.

    • Yes: Didukung.

Untuk perbandingan antara fitur perubahan skema tanpa penguncian DMS dan solusi lainnya, lihat Perbandingan solusi perubahan skema tanpa penguncian.

Catatan

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

  • Fitur perubahan skema tanpa penguncian mendukung perubahan beberapa tabel dalam database yang sama dalam satu tiket perubahan.

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

  • Saat melakukan perubahan skema tanpa penguncian pada tabel yang hanya memiliki kunci primer atau kunci unik, jangan memperbarui kunci primer atau kunci unik tersebut. Jika tidak, tugas perubahan akan gagal.

  • DMS di wilayah AS tidak mendukung fitur ini.

Cara kerja

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

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

    Sintaks SQL-nya adalah CREATE TABLE tmp_table_name LIKE table_name.

  2. Ubah skema tabel sementara: Skema tabel sementara dimodifikasi sesuai spesifikasi.

    Sintaks SQL-nya adalah ALTER TABLE tmp_table_name XXXX.

  3. Sinkronkan data lengkap: Data lengkap dari tabel sumber disinkronkan ke tabel sementara.

    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 file binary logging dan sinkronkan data inkremental: Data inkremental dari tabel sumber disinkronkan ke tabel sementara.

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

  5. Tukar tabel: Tabel sumber diganti namanya sebagai cadangan, dan tabel sementara menggantikan tabel sumber.

    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 sementara. Anda dapat menemukan nama tabel sementara aktual di bagian progres tugas perubahan tanpa penguncian. Untuk informasi lebih lanjut, lihat Lihat progres perubahan tanpa penguncian.

Daftar berikut menjelaskan format nama tabel sementara:

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

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

  • Tabel bantu sebelum pergantian dan tabel sumber setelah pergantian: `tp_{Change_ID}_del_{Source_Table_Name}`, `tp_{Change_ID}_d_{Source_Table_Name}`

  • Deteksi penguncian tabel: `tpa_xxx_xxx`

Catatan

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

Referensi

FAQ

  • T: Apakah perubahan skema tanpa penguncian memengaruhi layanan saya?

    J: Dalam kondisi normal, layanan Anda tidak terpengaruh. Namun, karena proses ini melibatkan penyalinan data, proses tersebut memiliki dampak kecil pada kinerja instans.

  • T: Terjadi kesalahan saat saya menjalankan CREATE_INDEX untuk menambahkan indeks dalam tiket perubahan tanpa penguncian. Apakah DMS tidak mendukung penambahan indeks?

    J: Ya, DMS mendukung penambahan indeks. Jika Anda mengalami kesalahan dengan CREATE_INDEX, Anda dapat menggunakan metode alternatif, seperti pernyataan `ALTER TABLE`: ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ;