Pernyataan ALTER TABLE langsung mengunci tabel selama proses perubahan, sehingga memblokir operasi baca dan tulis. Meskipun DDL online MySQL mengurangi dampak ini pada primary, perintah tersebut tetap dieksekusi secara berurutan pada replica, yang dapat menyebabkan keterlambatan replikasi dan memengaruhi beban kerja produksi.
Data Management Service (DMS) mengatasi masalah ini melalui fitur perubahan skema tanpa lock. DMS membuat tabel temporary dengan skema baru, mereplikasi data penuh serta data log biner inkremental ke dalamnya, lalu mengganti tabel asli dengan tabel temporary tersebut—sehingga tabel Anda tetap tersedia sepanjang proses.
Prasyarat
Sebelum memulai, pastikan bahwa:
Instans database dikelola dalam mode Stable Change atau Security Collaboration di DMS. Lihat Control modes.
Fitur perubahan skema tanpa kunci diaktifkan untuk instansiasi basis data. Lihat Aktifkan fitur perubahan skema tanpa kunci.
Contoh berikut menggunakan instans ApsaraDB RDS for MySQL dalam lingkungan pengembangan simulasi.
Cara kerja
Perubahan skema tanpa lock berjalan dalam tiga tahap:
Pembuatan tabel temporary — DMS membuat satu atau beberapa tabel temporary yang menggunakan skema baru.
Sinkronisasi data — DMS menyalin semua baris yang ada (data penuh) dan terus menerapkan perubahan masuk (data log biner inkremental) ke tabel temporary hingga sinkron dengan tabel sumber.
Pertukaran tabel — DMS mengganti tabel asli dengan tabel temporary yang telah disinkronkan, lalu menghapus tabel temporary tersebut.
Saat perubahan skema tanpa lock sedang berjalan, dua tabel temporary terlihat di database. Setelah pertukaran selesai, kedua tabel temporary tersebut dihapus.
Ajukan dan eksekusi perubahan skema tanpa lock
Contoh berikut mengubah tipe data kolom long_text_a pada tabel big_table dari varchar(1024) menjadi text.
Langkah 1: Ajukan tiket (pengguna biasa)
Masuk ke DMS console V5.0DMS console V5.0DMS console V5.0 sebagai pengguna biasa.
Pada bilah navigasi atas, pilih Database Development > Data Change > Lockless Change.
Dalam mode simple, arahkan kursor ke ikon
di pojok kiri atas dan pilih All functions > Database Development > Data Change > Lockless Change.Konfigurasikan parameter berikut dan klik Submit. Untuk bidang SQL statements for change, masukkan:
Parameter Deskripsi Database Wajib diisi. Database yang akan diubah. Pada contoh ini, dipilih database poc_devdalam mode Secure Collaboration.Reason Category Wajib diisi. Alasan perubahan, digunakan untuk mencari tiket nanti. Business background Wajib diisi. Tujuan perubahan, untuk mengurangi komunikasi yang tidak perlu. Execution method Wajib diisi. Cara mengeksekusi tiket setelah disetujui. Pilih Last Auditor Execute. Affected rows Wajib diisi. Perkiraan jumlah baris yang terpengaruh. Untuk mendapatkan jumlah pasti, jalankan kueri COUNTdi SQL Console sebelum mengajukan.SQL statements for change Wajib diisi. Pernyataan DDL yang akan dieksekusi. Pada contoh ini, pernyataan tersebut mengubah tipe data long_text_adarivarchar(1024)menjaditext.SQL Statements for Rollback Opsional. SQL untuk membatalkan perubahan jika diperlukan. Change stakeholder Opsional. Pengguna lain yang dapat melihat detail tiket dan membantu proses persetujuan. Pengguna yang tidak tercantum tidak dapat melihat tiket, kecuali administrator DMS dan DBA. ALTER TABLE `big_table` MODIFY COLUMN `long_text_a` text NULL AFTER `name`;Pada halaman Ticket Details, tinjau tiket tersebut.
DMS menjalankan Pemeriksaan Awal pada pernyataan SQL secara otomatis. Pemeriksaan Awal mencakup sintaksis SQL, kesesuaian jenis pernyataan dengan aturan keamanan Anda, izin pengirim, serta perkiraan jumlah baris yang akan dipindai. Anda hanya dapat mengubah detail tiket sebelum mengajukan untuk persetujuan.
Setelah Pemeriksaan Awal berhasil, klik Submit for Approval, lalu klik OK pada dialog konfirmasi.
PentingSetelah Anda mengajukan tiket untuk persetujuan, detail tiket tidak dapat diubah lagi.
Langkah 2: Setujui tiket (administrator DMS)
Masuk ke DMS console V5.0DMS console V5.0DMS console V5.0 sebagai administrator DMS.
Pada halaman utama, klik Pending Tickets di bagian My Tickets.
Pada halaman My Tickets, temukan tiket tersebut dan klik nomornya di kolom Ticket Number.
Pada panel Ticket Details, tinjau informasi perubahan dan klik Approve.
Masukkan komentar dan klik Submit.
Langkah 3: Eksekusi tiket (pengguna biasa)
Masuk ke DMS console V5.0DMS console V5.0DMS console V5.0 sebagai pengguna biasa.
Pada bagian Execute di panel Ticket Details, klik Execute Change.
Konfigurasikan parameter eksekusi dan klik Confirm Execution.
DMS segera memulai tugas setelah Anda mengklik Confirm Execution.
Parameter Deskripsi Bawaan Execute strategy Waktu menjalankan tugas. Opsi Running immediately akan segera memulai tugas setelah Anda mengonfirmasi, sedangkan opsi Schedule menjalankan tugas pada waktu yang Anda tentukan. Running immediately Transaction control Apakah akan rollback saat gagal. on: jika suatu pernyataan gagal, semua pernyataan DML dalam transaksi yang sama akan di-rollback (pernyataan DDL tidak dapat di-rollback). off: pernyataan dijalankan satu per satu; jika salah satu gagal, transaksi berhenti, tetapi pernyataan yang sudah dieksekusi tidak di-rollback. off Data backup Apakah akan menghasilkan skrip backup. on: DMS menghasilkan skrip INSERTuntuk mencadangkan baris yang terpengaruh oleh pernyataanUPDATEatauDELETE. off: tidak ada skrip backup yang dihasilkan.on
Memantau progres dan memverifikasi skema
Sebagai administrator DMS, arahkan kursor ke nama database di bagian Basic Information dan klik Query untuk membuka SQL Console.
Di SQL Console, jalankan pernyataan berikut untuk menampilkan semua tabel di database:
Saat perubahan skema tanpa lock sedang berjalan, dua tabel temporary muncul dalam hasil.
SHOW TABLES;Pada bilah navigasi atas, pilih O&M > Task.
Dalam mode simple, arahkan kursor ke ikon
di pojok kiri atas dan pilih All functions > O&M > Task.Klik nomor tugas untuk membuka dialog Execution details.
Klik Progress di kolom Operation untuk melihat pesan Lock-Free structure change dan memantau progres real-time perubahan skema tanpa lock.
Setelah tugas selesai, verifikasi skema. Tabel
big_tablekini menggunakan skema baru, dan tabel temporary telah dihapus.