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.
CatatanTugas 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.
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.Modifikasi struktur tabel temporary: Anda dapat memodifikasi struktur tabel temporary tersebut.
Sintaks SQL-nya adalah
ALTER TABLE tmp_table_name XXXX.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).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.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.
`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`
ID perubahan adalah ID eksekusi dari mesin internal DMS. Ini bukan nomor tiket atau nomor tugas.
Referensi
Anda dapat melakukan operasi berikut:
Aktifkan fitur evolusi skema tanpa lock untuk instans. Untuk informasi selengkapnya, lihat Aktifkan evolusi skema tanpa lock.
Kirimkan tiket evolusi skema tanpa lock. Untuk informasi selengkapnya, lihat Lakukan evolusi skema tanpa lock menggunakan tiket.
(Opsional) Lihat progres tugas perubahan tanpa lock. Untuk informasi selengkapnya, lihat Lihat progres perubahan tanpa lock.
Anda juga dapat menggunakan operasi API untuk mengonfigurasi dan mengelola tiket evolusi skema tanpa lock:
API
Deskripsi
Membuat tiket perubahan tanpa lock.
Menanyakan detail tiket perubahan tanpa lock, termasuk status eksekusi dan jumlah baris data yang terpengaruh.
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_INDEXdalam tiket perubahan tanpa lock. Apakah DMS tidak mendukung penambahan indeks?A: DMS mendukung penambahan indeks. Anda dapat menggunakan pernyataan
ALTER TABLEberikut untuk menambahkan indeks:ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ;Q: Saya menerima error saat mencoba mengganti nama bidang dengan menjalankan
rename columndalam tiket perubahan tanpa lock. Apakah DMS tidak mendukung penggantian nama bidang?A: DMS mendukung penggantian nama bidang. Anda dapat menggunakan pernyataan
ALTER TABLEberikut untuk mengganti nama bidang:ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name datatype;