All Products
Search
Document Center

Data Management:Perubahan skema tanpa lock

Last Updated:Mar 28, 2026

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-Copy atau In-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-OnlineDDL mendukung berbagai operasi DDL seperti add column, drop column, r************, add index, dan modify index, fitur ini tidak mencakup beberapa operasi umum, termasuk modify column type, m*******************, dan modify character set.

Kasus Penggunaan

  • Mengubah skema tabel database.

  • Memodifikasi set karakter dan aturan pengurutan tabel atau melakukan koreksi zona waktu.

  • Menggunakan operasi OPTIMIZE TABLE untuk 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-Online dan OSC, 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.

    Catatan

    Tautan 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:

  1. 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.

  2. Modifikasi skema tabel temporary. DMS memodifikasi skema tabel temporary sesuai dengan perubahan yang ditentukan.

    Sintaksis SQL: ALTER TABLE tmp_table_name XXXX.

  3. 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).

  4. 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.

  5. 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.

Catatan

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} atau tp_{ChangeID}_g_{OriginalTableName}

  • Tabel heartbeat: tp_{ChangeID}_ogl_{OriginalTableName} atau tp_{ChangeID}_l_{OriginalTableName}

  • Tabel bantu sebelum switch dan tabel asli setelah switch: tp_{ChangeID}_del_{OriginalTableName} atau tp_{ChangeID}_d_{OriginalTableName}

  • Tabel deteksi penguncian tabel: tpa_xxx_xxx

Catatan

ID perubahan adalah ID eksekusi internal mesin DMS, bukan ID tiket atau ID tugas.

Referensi

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_INDEX dalam tiket perubahan tanpa lock, tetapi gagal. Apakah DMS tidak mendukung penambahan indeks?

    A: DMS mendukung penambahan indeks. Anda dapat menjalankan pernyataan ALTER TABLE berikut untuk menambahkan indeks:

    ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ;
  • Q: Saya mencoba mengganti nama kolom menggunakan pernyataan rename column dalam tiket perubahan tanpa lock, tetapi gagal. Apakah DMS tidak mendukung penggantian nama kolom?

    A: DMS mendukung penggantian nama kolom. Anda dapat menjalankan pernyataan ALTER TABLE berikut untuk mengganti nama kolom:

    ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name datatype;