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
Mengubah skema tabel database.
Mengubah set karakter dan aturan pengurutan tabel, atau menyesuaikan zona waktu.
Memulihkan ruang tabel dan mengurangi fragmentasi menggunakan operasi OPTIMIZE TABLE tanpa menyebabkan penguncian tabel. Untuk informasi lebih lanjut, lihat Gunakan perubahan skema tanpa penguncian untuk memulihkan ruang terfragmentasi.
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.
CatatanTautan 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.
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.Ubah skema tabel sementara: Skema tabel sementara dimodifikasi sesuai spesifikasi.
Sintaks SQL-nya adalah
ALTER TABLE tmp_table_name XXXX.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).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.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.
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`
ID perubahan adalah ID eksekusi mesin internal DMS. Ini bukan nomor tiket atau nomor tugas.
Referensi
Setelah memahami latar belakang dan prinsip kerja perubahan skema tanpa penguncian, Anda dapat melakukan operasi berikut:
Aktifkan fitur perubahan skema tanpa penguncian untuk sebuah instans. Untuk informasi lebih lanjut, lihat Aktifkan perubahan skema tanpa penguncian.
Kirimkan tiket perubahan skema tanpa penguncian. Untuk informasi lebih lanjut, lihat Gunakan tiket perubahan tanpa penguncian untuk melakukan perubahan skema tanpa penguncian.
(Opsional) Lihat progres tugas perubahan tanpa penguncian. Untuk informasi lebih lanjut, lihat Lihat progres perubahan tanpa penguncian.
Anda juga dapat menggunakan operasi API untuk mengonfigurasi dan mengelola tiket perubahan skema tanpa penguncian:
API
Deskripsi
Operasi API ini digunakan untuk membuat tiket perubahan tanpa penguncian.
Operasi API ini digunakan untuk mendapatkan detail tugas perubahan tanpa penguncian, termasuk status eksekusi dan jumlah baris data yang terpengaruh.
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` ) ;