Fitur Instant ADD COLUMN pada ApsaraDB RDS for MySQL memungkinkan penambahan kolom secara cepat hanya dengan memodifikasi metadata. Metode ini menghindari pembangunan ulang tabel secara penuh, menyelesaikan operasi dalam hitungan detik terlepas dari ukuran tabel, serta menggunakan sumber daya sistem yang minimal. Fitur ini tidak mengunci tabel atau mengganggu operasi bisnis, sehingga ideal untuk skenario yang memerlukan ekstensi skema secara berkala dan kelangsungan bisnis tingkat tinggi.
Cara kerja
Instant ADD COLUMN pada ApsaraDB RDS for MySQL mengoptimalkan operasi ADD COLUMN dengan memodifikasi metadata di kamus data. Fitur ini menghindari penyalinan data penuh atau pembangunan ulang tabel yang biasanya diperlukan oleh operasi DDL tradisional, serta menambahkan kolom dalam hitungan detik, terlepas dari ukuran tabel.
Tabel berikut membandingkan keunggulan utama Instant ADD COLUMN dibandingkan metode tradisional.
Item perbandingan | Metode tradisional (algoritma COPY atau INPLACE) | Penambahan kolom instan (algoritma INSTANT) |
Waktu penambahan kolom | Memerlukan pembangunan ulang tabel secara penuh, yang memakan waktu sebanding dengan ukuran tabel. | Hanya memodifikasi metadata, sehingga operasi selesai dalam hitungan detik. |
Konsumsi resource | Sementara waktu mengonsumsi sumber daya sistem yang signifikan, seperti I/O dan memori. | Mengonsumsi tambahan sumber daya yang dapat diabaikan. |
Dampak terhadap bisnis | Berpotensi menghambat operasi online selama transaksi jangka panjang atau dalam skenario konkurensi tinggi. | Tidak menyebabkan penguncian atau penghambatan tabel. |
Batasan ukuran tabel | Lambat saat menambahkan kolom ke tabel besar. | Menambahkan kolom secara cepat ke tabel dengan ukuran apa pun. |
Prasyarat
Untuk menggunakan fitur Instant ADD COLUMN, instans Anda harus memenuhi persyaratan versi berikut. Jika versi mesin minor Anda tidak didukung, Anda dapat memperbarui versi mesin minor.
MySQL 8.4
MySQL 8.0
MySQL 5.7 dengan versi mesin minor 20250331 atau lebih baru.
Batasan berikut berlaku saat Anda menggunakan fitur Instant ADD COLUMN:
Batasan engine: Hanya engine InnoDB yang didukung.
Batasan jenis tabel: Tabel terkompresi, tabel dengan indeks teks penuh, dan tabel temporary tidak didukung.
Batasan operasi: Anda tidak dapat menggabungkan beberapa operasi dalam satu pernyataan, seperti menambahkan kolom dan membuat indeks sekaligus.
Batasan instansi hanya baca: Jika Anda menggunakan Instant ADD COLUMN pada instans utama berkeandalan tinggi yang memiliki instansi hanya baca, Anda harus mengatur parameter loose_innodb_instant_ddl_enabled ke ON baik pada instans utama maupun semua instansi hanya bacanya. Jika tidak, replikasi ke instansi hanya baca akan terputus.
Posisi default kolom:
Versi MySQL
Versi mesin minor
Posisi kolom
5.7
20250331 atau lebih baru
Kolom baru ditambahkan sebagai kolom terakhir secara default.
8.0
Sebelum 20230630
Kolom baru ditambahkan sebagai kolom terakhir secara default.
20230630 atau lebih baru
Anda dapat menentukan posisi kolom baru.
8.4
Versi mesin minor apa pun
Anda dapat menentukan posisi kolom baru.
Saat menggunakan Instant ADD COLUMN untuk instans dengan versi berikut, Anda harus memastikan bahwa tabel data tidak mengandung kunci primer implisit:
MySQL 8.4
MySQL 8.0 dengan versi mesin minor sebelum 20230630
MySQL 5.7
Aktifkan penambahan kolom instan
MySQL 8.0 dan 8.4 telah mengaktifkan Instant ADD COLUMN secara default. Anda dapat langsung menggunakan fitur ini tanpa mengubah parameter apa pun. Untuk MySQL 5.7, ikuti langkah-langkah berikut untuk mengaktifkan Instant ADD COLUMN:
Buka halaman Instances, pilih wilayah, lalu klik ID instans target.
Di panel navigasi sebelah kiri, klik Parameters.
Di tab Editable Parameters, temukan parameter
loose_innodb_instant_ddl_enabled. Pada kolom Running Parameter Value, atur nilainya menjadi ON.CatatanPerubahan pada parameter
loose_innodb_instant_ddl_enabledberlaku langsung tanpa perlu restart instans.Klik Apply Changes. Pada kotak dialog yang muncul, tentukan kapan perubahan akan diterapkan, lalu klik OK.
Operasi terkait
Gunakan penambahan kolom instan
Gunakan
ALGORITHM=INSTANTuntuk secara eksplisit mengaktifkan Instant ADD COLUMN:ALTER TABLE <table_name> ADD COLUMN <column_name> <data_type> <constraints>, ALGORITHM = INSTANT;Jika Anda tidak menentukan klausa
ALGORITHM, ApsaraDB RDS for MySQL akan memilih algoritma optimal pada waktu proses:ALTER TABLE <table_name> ADD COLUMN <column_name> <data_type> <constraints>;
Lihat tabel yang telah dimodifikasi
MySQL 5.7:
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE INSTANT_COLS > 0;MySQL 8.0 dan 8.4:
-- Untuk versi mesin minor sebelum 20230630 SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE INSTANT_COLS > 0; -- Untuk versi mesin minor 20230630 dan seterusnya SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE TOTAL_ROW_VERSIONS > 0;
Lihat kolom yang telah ditambahkan
MySQL 5.7:
Pada MySQL 5.7, tabel
INNODB_SYS_INSTANT_COLUMNSditambahkan ke databaseINFORMATION_SCHEMA. Anda dapat menjalankan pernyataan SQL berikut untuk melihat kolom yang ditambahkan menggunakan fitur Instant ADD COLUMN.SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS WHERE TABLE_ID = (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME = "<database_name>/<table_name>");MySQL 8.0 dan 8.4:
Jalankan pernyataan SQL berikut untuk melihat informasi kolom suatu tabel. Nilai 1 pada kolom
HAS_DEFAULTmenunjukkan bahwa kolom tersebut ditambahkan menggunakan fitur Instant ADD COLUMN.SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");
FAQ
Q1: Instans saya memenuhi persyaratan untuk Instant ADD COLUMN, tetapi saya tetap menerima error berikut saat mencoba menambahkan kolom: "Feature not supported: 1845 ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE"
A:
Penyebab: Jika suatu tabel tidak memiliki kunci primer atau kunci unik, ApsaraDB RDS for MySQL akan menambahkan kunci primer implisit di akhir tabel untuk memastikan efisiensi replikasi. Hal ini secara efektif mengubah pernyataan ADD COLUMN menjadi operasi berbasis posisi, karena kunci primer implisit harus tetap berada di kolom terakhir. Namun, instans MySQL 5.7 dan MySQL 8.0 dengan versi mesin minor sebelum 20230630 tidak mendukung penambahan kolom berbasis posisi dengan ALGORITHM=INSTANT. Konflik ini menyebabkan error tersebut.
Solusi: Saat menggunakan Instant ADD COLUMN pada instans MySQL 5.7 atau MySQL 8.0 dengan versi mesin minor sebelum 20230630, pastikan tabel target tidak memiliki kunci primer implisit.