Perubahan Data Definition Language (DDL) tanpa lock mencegah penguncian tabel selama proses perubahan skema, sehingga menghindari gangguan bisnis dan keterlambatan replikasi yang biasanya terjadi pada operasi online DDL native.
Latar Belakang
Saat melakukan perubahan skema pada tabel besar, Anda harus mempertimbangkan risiko penguncian tabel yang dapat memblokir operasi tulis.
Pada MySQL 5.5 dan versi sebelumnya, DDL mendukung dua algoritma eksekusi: Table-Copy dan In-Place.
Table-Copy: Algoritma ini menyalin data ke tabel temporary, mengunci tabel sumber, dan mencegah operasi tulis hingga perubahan selesai.
In-Place (tersedia sejak MySQL 5.5): Algoritma ini memungkinkan operasi baca dan tulis selama proses berlangsung, tetapi hanya mendukung operasi yang berkaitan dengan indeks.
Versi MySQL 5.6 dan seterusnya juga memperkenalkan Innodb-OnlineDDL. Untuk informasi lebih lanjut tentang Innodb-OnlineDDL, lihat Innodb-OnlineDDL.
Fitur ini mencakup berbagai jenis DDL, seperti menambah atau menghapus kolom, mengganti nama kolom, serta menambah atau memodifikasi indeks. Namun, fitur ini tidak mendukung beberapa jenis DDL umum, seperti memodifikasi tipe kolom, mengubah panjang kolom, atau mengubah set karakter.
Kasus Penggunaan
Mengubah skema tabel database.
Mengubah set karakter dan aturan pengurutan tabel, atau menyesuaikan zona waktunya.
Menghindari penguncian tabel akibat operasi
OPTIMIZE TABLEyang membebaskan ruang dan mengurangi tingkat fragmentasi. Untuk informasi lebih lanjut, lihat Defragmentasi ruang menggunakan perubahan skema tanpa lock.
Jenis Database yang Didukung
RDS MySQL, PolarDB for MySQL, MyBase for MySQL, dan database lain yang kompatibel dengan MySQL.
Fitur
Berbeda dengan operasi database native, fitur perubahan skema tanpa lock DMS memungkinkan Anda mengontrol kecepatan eksekusi. Hal ini membantu mencegah keterlambatan replikasi, meminimalkan dampak terhadap performa database, serta mendukung perubahan yang biasanya akan mengunci tabel jika menggunakan online DDL native.
Berbeda dengan alat seperti pt-online-schema-change dan OSC, fitur perubahan skema tanpa lock DMS tidak bergantung pada trigger. Fitur ini berjalan secara asinkron dengan dampak minimal terhadap database dan dapat dihentikan kapan saja secara aman.
Fitur perubahan skema tanpa lock DMS sangat kompatibel dengan DTS dan tidak mengganggu tautan replikasi DTS tingkat tabel.
CatatanTautan replikasi DTS harus telah di-restart setelah 14 Februari 2020.
Tabel berikut membandingkan kemampuan online DDL native MySQL dengan fitur perubahan skema tanpa lock DMS:
Operasi
MySQL 5.5 dan sebelumnya
MySQL 5.6 dan seterusnya
Perubahan skema tanpa lock DMS
Tambah kolom
❌
✅
✅
Hapus kolom
❌
✅
✅
Ganti nama kolom
❌
✅
✅
Tambah indeks
❌
✅
✅
Modifikasi indeks
❌
✅
✅
Defragmentasi tabel
❌
✅
✅
Modifikasi tipe kolom
❌
❌
✅
Modifikasi panjang kolom
❌
❌
✅
Modifikasi set karakter
❌
❌
✅
Konversi set karakter
❌
❌
✅
Atur zona waktu
❌
❌
✅
Mitigasi atau hilangkan keterlambatan read replica
❌
❌
✅
Tambah kunci unik
✅
✅
✅
Tambah constraint
✅
✅
✅
PentingSaat Anda menambahkan kunci unik atau constraint menggunakan fitur perubahan skema tanpa lock DMS, perlu diperhatikan bahwa data dalam tabel sumber yang melanggar kunci unik atau constraint baru tersebut akan secara otomatis dibuang oleh MySQL selama proses penyalinan ke tabel temporary.
Untuk perbandingan fitur perubahan skema tanpa lock DMS dengan solusi lain, lihat Perbandingan solusi perubahan skema tanpa lock.
Catatan Penggunaan
DMS mendukung perubahan skema untuk tabel partisi yang sudah ada.
Anda dapat menggunakan satu tiket perubahan skema tanpa lock untuk memodifikasi beberapa tabel dalam database yang sama.
Saat mengonfigurasi pernyataan SQL untuk tiket tersebut, Anda dapat memisahkan pernyataan untuk tabel berbeda dengan titik koma (;).
Anda tidak dapat memperbarui primary key atau unique key tabel selama perubahan skema tanpa lock jika kunci tersebut merupakan satu-satunya kunci pada tabel. Upaya melakukan hal ini akan menyebabkan tugas gagal.
Cara Kerja
Saat Anda mengirimkan tiket perubahan skema tanpa lock, DMS secara otomatis menjalankan langkah-langkah berikut untuk menyelesaikan perubahan tanpa mengunci tabel:
Buat tabel temporary. DMS membuat tabel baru yang mereplikasi skema tabel sumber.
Sintaks SQL-nya adalah
CREATE TABLE tmp_table_name LIKE table_name.Ubah skema tabel temporary. DMS menerapkan perubahan DDL yang diminta ke tabel temporary.
Sintaks SQL-nya adalah
ALTER TABLE tmp_table_name XXXX.Salin seluruh data. DMS menyalin semua data dari tabel sumber 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).Uraikan binlog untuk menyinkronkan data inkremental. DMS menerapkan perubahan berkelanjutan dari binlog tabel sumber ke tabel temporary.
Sintaks SQL-nya adalah
UPDATE/INSERT/DELETE tmp_table_name.Tukar tabel. DMS mengganti nama tabel sumber menjadi nama cadangan dan tabel temporary menjadi nama tabel asli secara atomik.
Sintaks SQL-nya adalah
RENAME TABLE table_name to old_tmp_table_name, tmp_table_name to table_name.
tmp_table_name adalah contoh nama tabel temporary. Anda dapat menemukan nama tabel temporary spesifik di area progres tugas perubahan skema tanpa lock. Untuk informasi lebih lanjut, lihat Lihat progres perubahan skema 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 bantu sebelum switchover dan tabel asli setelah switchover: tp_{change_ID}_del_{original_table_name}, tp_{change_ID}_d_{original_table_name}
Deteksi penguncian tabel: tpa_xxx_xxx
ID perubahan adalah ID eksekusi mesin internal DMS. Ini bukan ID tiket atau ID tugas.
Dokumen Terkait
Setelah memahami perubahan skema tanpa lock, lakukan langkah-langkah berikut:
Aktifkan fitur perubahan skema tanpa lock untuk instans. Untuk informasi lebih lanjut, lihat Aktifkan perubahan skema tanpa lock.
Kirimkan tiket untuk perubahan skema tanpa lock. Untuk informasi lebih lanjut, lihat Gunakan tiket untuk melakukan perubahan skema tanpa lock.
(Opsional) Lihat progres tugas perubahan skema tanpa lock. Untuk informasi lebih lanjut, lihat Lihat progres perubahan skema tanpa lock.
Anda juga dapat menggunakan API untuk mengonfigurasi dan mengelola tiket perubahan skema tanpa lock:
API
Deskripsi
Membuat tiket untuk perubahan skema tanpa lock.
Mendapatkan detail tugas tiket perubahan skema tanpa lock, termasuk status eksekusi tugas dan jumlah baris data yang terpengaruh.
Pertanyaan Umum
T: Apakah perubahan skema tanpa lock memengaruhi layanan saya?
J: Perubahan skema tanpa lock biasanya tidak memengaruhi layanan Anda. Proses ini melibatkan penyalinan data, yang dapat berdampak pada performa instans.
T: Saya menerima error saat mencoba menambahkan indeks dengan
CREATE_INDEXdalam tiket perubahan skema tanpa lock. Apakah DMS tidak mendukung penambahan indeks?J: Ya, DMS mendukung penambahan indeks. Jalankan pernyataan
ALTER TABLEberikut untuk menambahkan indeks:ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ;T: Saya menerima error saat mencoba mengganti nama kolom dengan
rename columndalam tiket perubahan skema tanpa lock. Apakah DMS tidak mendukung penggantian nama kolom?J: Ya, DMS mendukung penggantian nama kolom. Jalankan pernyataan
ALTER TABLEberikut untuk mengganti nama kolom:ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name datatype;