Perubahan DDL tanpa lock mencegah penguncian tabel selama perubahan skema, sehingga menghindari gangguan bisnis dan keterlambatan replikasi yang disebabkan oleh operasi DDL Online native.
Latar Belakang
Saat melakukan perubahan skema pada tabel besar, Anda harus mempertimbangkan risiko penguncian tabel yang memblokir operasi tulis.
-
Pada MySQL 5.5 dan versi sebelumnya, DDL mendukung dua algoritma eksekusi: Table-Copy dan In-Place.
-
Table-Copy: Menyalin data ke tabel temporary, mengunci tabel sumber, dan memblokir operasi tulis hingga perubahan selesai.
-
In-Place (tersedia sejak MySQL 5.5): Mengizinkan operasi baca dan tulis selama eksekusi, tetapi hanya mendukung operasi terkait indeks.
-
-
Versi MySQL 5.6 dan yang lebih baru juga memperkenalkan Innodb-OnlineDDL. Untuk informasi selengkapnya tentang Innodb-OnlineDDL, lihat Innodb-OnlineDDL.
Innodb-OnlineDDL mencakup berbagai jenis DDL, seperti menambah atau menghapus kolom, mengganti nama kolom, serta menambah atau memodifikasi indeks. Namun, fitur ini tidak mendukung beberapa jenis 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 selengkapnya, 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
-
Fitur perubahan skema tanpa lock dari DMS memungkinkan Anda mengontrol kecepatan eksekusi, membantu mencegah keterlambatan replikasi dan meminimalkan dampak terhadap performa database. Fitur ini juga mendukung perubahan yang biasanya akan mengunci tabel jika menggunakan DDL Online native.
-
Berbeda dengan pt-online-schema-change dan OSC, fitur perubahan skema tanpa lock dari 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 dari DMS sangat kompatibel dengan DTS dan tidak mengganggu tautan replikasi DTS tingkat tabel.
CatatanTautan replikasi DTS harus telah dijalankan ulang setelah 14 Februari 2020.
-
Tabel berikut membandingkan kemampuan DDL Online native MySQL dengan fitur perubahan skema tanpa lock dari DMS:
Operasi
MySQL 5.5 dan sebelumnya
MySQL 5.6 dan seterusnya
Perubahan skema tanpa lock DMS
Menambah kolom
❌
✅
✅
Menghapus kolom
❌
✅
✅
Mengganti nama kolom
❌
✅
✅
Menambah indeks
❌
✅
✅
Memodifikasi indeks
❌
✅
✅
Defragmentasi tabel
❌
✅
✅
Memodifikasi tipe kolom
❌
❌
✅
Memodifikasi panjang kolom
❌
❌
✅
Memodifikasi set karakter
❌
❌
✅
Mengonversi set karakter
❌
❌
✅
Menyesuaikan zona waktu
❌
❌
✅
Meredam atau menghilangkan keterlambatan replika baca
❌
❌
✅
Menambah kunci unik
✅
✅
✅
Menambah constraint
✅
✅
✅
PentingSaat Anda menambahkan kunci unik atau constraint menggunakan fitur perubahan skema tanpa lock dari DMS, perlu diperhatikan bahwa data apa pun di 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 dari 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:
-
Membuat tabel temporary. DMS membuat tabel baru yang meniru skema tabel sumber.
Sintaks SQL-nya adalah
CREATE TABLE tmp_table_name LIKE table_name. -
Mengubah skema tabel temporary. DMS menerapkan perubahan DDL yang diminta ke tabel temporary.
Sintaks SQL-nya adalah
ALTER TABLE tmp_table_name XXXX. -
Menyalin 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). -
Mengurai binlog untuk menyinkronkan data inkremental. DMS menerapkan perubahan yang sedang berlangsung dari binlog tabel sumber ke tabel temporary.
Sintaks SQL-nya adalah
UPDATE/INSERT/DELETE tmp_table_name. -
Menukar 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 selengkapnya, lihat Melihat 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 alih bencana dan tabel asli setelah alih bencana: 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 untuk mesin internal DMS. Ini bukan ID tiket atau ID tugas.
Dokumen Terkait
-
Untuk memulai perubahan skema tanpa lock:
-
Aktifkan fitur perubahan skema tanpa lock untuk sebuah instans. Untuk informasi selengkapnya, lihat Mengaktifkan perubahan skema tanpa lock.
-
Kirimkan tiket untuk perubahan skema tanpa lock. Untuk informasi selengkapnya, lihat Menggunakan tiket untuk melakukan perubahan skema tanpa lock.
-
(Opsional) Lihat progres tugas perubahan skema tanpa lock. Untuk informasi selengkapnya, lihat Melihat 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: Secara normal, perubahan skema tanpa lock tidak memengaruhi layanan Anda. Namun, proses penyalinan data 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;