Perubahan DDL tanpa lock mencegah penguncian tabel selama modifikasi skema, sehingga menghindari gangguan operasi bisnis akibat tabel terkunci dan menghilangkan latensi primary/standby yang dapat terjadi dengan Online DDL native. Anda dapat mengirimkan perubahan tanpa lock selama jam sepi.
Latar Belakang
Saat memodifikasi skema tabel besar, Anda berisiko mengunci tabel tersebut, yang memblokir operasi tulis dari aplikasi Anda.
Pada MySQL 5.5 dan versi sebelumnya, operasi Data Definition Language (DDL) menggunakan salah satu dari dua algoritma:
Table-CopyatauIn-Place.Table-Copy: Algoritma ini membuat tabel temporary untuk menyelesaikan perubahan. Selama proses ini, tabel asli dikunci sehingga mencegah operasi tulis.In-Place: Diperkenalkan pada MySQL 5.5, algoritma ini memungkinkan operasi baca dan tulis selama perubahan, tetapi hanya mendukung operasi terkait indeks.
Pada MySQL 5.6 dan versi setelahnya, DDL juga mencakup
Innodb-OnlineDDL. Untuk informasi lebih lanjut tentang Innodb-OnlineDDL, lihat Innodb-OnlineDDL.Meskipun
Innodb-OnlineDDLmendukung berbagai operasi DDL sepertiadd column,drop column,r************,add index, danmodify index, fitur ini tidak mencakup beberapa operasi umum, termasukmodify column type,m*******************, danmodify character set.
Kasus Penggunaan
Mengubah skema tabel database.
Memodifikasi set karakter dan aturan pengurutan tabel atau melakukan koreksi zona waktu.
Menggunakan operasi
OPTIMIZE TABLEuntuk mereklaim ruang tabel dan mengurangi fragmentasi tanpa mengunci tabel. Untuk informasi lebih lanjut, lihat Reklaim ruang terfragmentasi dengan perubahan skema tanpa lock.
Jenis database yang didukung
ApsaraDB RDS for MySQL, PolarDB for MySQL, MyBase for MySQL, dan sumber MySQL lainnya.
Fitur utama
Dibandingkan dengan operasi database native, perubahan skema tanpa lock DMS memungkinkan Anda mengontrol kecepatan eksekusi perubahan. Hal ini meminimalkan dampak terhadap performa database, membantu mencegah latensi primary/standby, serta mendukung banyak skenario di mana Online DDL native akan mengunci tabel.
Dibandingkan dengan alat lain seperti
PT-OnlinedanOSC, perubahan skema tanpa lock DMS tidak bergantung pada trigger. Eksekusi asinkronnya memiliki dampak minimal terhadap database dan dapat dihentikan secara aman kapan saja.Perubahan skema tanpa lock DMS kompatibel dengan DTS. Jika tabel yang sedang dimodifikasi memiliki tautan replikasi tingkat tabel DTS, penggunaan perubahan skema tanpa lock DMS tidak mengganggu replikasi DTS.
CatatanTautan replikasi DTS harus telah dijalankan ulang setelah 14 Februari 2020.
Tabel berikut membandingkan kemampuan MySQL Online DDL native dan perubahan skema tanpa lock DMS.
Operasi
MySQL 5.5 dan sebelumnya
MySQL 5.6 dan setelahnya
Perubahan skema tanpa lock DMS
Add column
N
Y
Y
Drop column
N
Y
Y
Rename column
N
Y
Y
Add index
N
Y
Y
Modify index
N
Y
Y
Defragmentation
N
Y
Y
Modify column type
N
N
Y
Modify column length
N
N
Y
Modify character set
N
N
Y
Convert character
N
N
Y
Time zone correction
N
N
Y
Mitigate or eliminate standby latency
N
N
Y
Add unique key
Y
Y
N
Add constraint
Y
Y
N
N: Tidak didukung.
Y: Didukung.
Untuk perbandingan antara perubahan skema tanpa lock DMS dan solusi lainnya, lihat Perbandingan solusi perubahan skema tanpa lock.
Catatan penggunaan
DMS mendukung perubahan skema pada 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 (;).
Selama perubahan skema tanpa lock pada tabel yang hanya memiliki primary key atau unique key, Anda tidak dapat memperbarui kunci-kunci tersebut. Melakukannya menyebabkan tugas perubahan gagal.
Cara kerja
Saat Anda mengirimkan tiket perubahan skema tanpa lock, DMS secara otomatis menjalankan langkah-langkah berikut untuk mengeksekusi perubahan tanpa mengunci tabel:
Buat tabel temporary. DMS membuat tabel temporary di database target yang mencerminkan skema tabel asli untuk mempersiapkan penyalinan data.
Sintaksis SQL:
CREATE TABLE tmp_table_name LIKE table_name.Modifikasi skema tabel temporary. DMS memodifikasi skema tabel temporary sesuai dengan perubahan yang ditentukan.
Sintaksis SQL:
ALTER TABLE tmp_table_name XXXX.Salin data lengkap. DMS menyinkronkan semua data dari tabel asli ke tabel temporary.
Sintaksis SQL:
INSERT IGNORE INTO tmp_table_name (SELECT %s FROM table_name FORCE INDEX (%s) WHERE XXX LOCK IN SHARE MODE).Uraikan binlog dan sinkronkan data inkremental. DMS menyinkronkan perubahan yang dilakukan pada tabel asli selama proses penyalinan ke tabel temporary.
Sintaksis SQL:
UPDATE/INSERT/DELETE tmp_table_name.Tukar tabel. DMS mengganti nama tabel asli sebagai cadangan dan tabel temporary menggantikan tabel asli.
Sintaksis SQL:
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 aktual tabel temporary di bagian progres tugas perubahan tanpa lock. Untuk informasi lebih lanjut, lihat Lihat progres perubahan tanpa lock.
Format berikut digunakan untuk nama tabel temporary:
Tabel data:
tp_{ChangeID}_ogt_{OriginalTableName}atautp_{ChangeID}_g_{OriginalTableName}Tabel heartbeat:
tp_{ChangeID}_ogl_{OriginalTableName}atautp_{ChangeID}_l_{OriginalTableName}Tabel bantu sebelum switch dan tabel asli setelah switch:
tp_{ChangeID}_del_{OriginalTableName}atautp_{ChangeID}_d_{OriginalTableName}Tabel deteksi penguncian tabel:
tpa_xxx_xxx
ID perubahan adalah ID eksekusi internal mesin DMS, bukan ID tiket atau ID tugas.
Referensi
Setelah memahami latar belakang dan prinsip perubahan skema tanpa lock, Anda dapat melakukan operasi berikut:
Aktifkan fitur perubahan skema tanpa lock untuk instans Anda. Untuk informasi lebih lanjut, lihat Aktifkan perubahan skema tanpa lock.
Kirimkan tiket perubahan skema tanpa lock. Untuk informasi lebih lanjut, lihat Lakukan perubahan skema tanpa lock menggunakan tiket.
(Opsional) Lihat progres tugas perubahan tanpa lock. Untuk informasi lebih lanjut, lihat Lihat progres perubahan tanpa lock.
Anda juga dapat menggunakan API untuk mengonfigurasi dan mengelola tiket perubahan skema tanpa lock:
API
Deskripsi
Membuat tiket perubahan tanpa lock.
Mengambil detail tugas perubahan tanpa lock, termasuk status eksekusi dan jumlah baris data yang terpengaruh.
FAQ
Q: Apakah perubahan skema tanpa lock memengaruhi bisnis saya?
A: Dalam kondisi normal, proses ini tidak memengaruhi operasi bisnis Anda. Namun, karena melibatkan penyalinan data, proses ini mungkin sedikit memengaruhi performa instans.
Q: Saya mencoba menambahkan indeks menggunakan pernyataan
CREATE_INDEXdalam tiket perubahan tanpa lock, tetapi gagal. Apakah DMS tidak mendukung penambahan indeks?A: DMS mendukung penambahan indeks. Anda dapat menjalankan pernyataan
ALTER TABLEberikut untuk menambahkan indeks:ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ;Q: Saya mencoba mengganti nama kolom menggunakan pernyataan
rename columndalam tiket perubahan tanpa lock, tetapi gagal. Apakah DMS tidak mendukung penggantian nama kolom?A: DMS mendukung penggantian nama kolom. Anda dapat menjalankan pernyataan
ALTER TABLEberikut untuk mengganti nama kolom:ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name datatype;