AliSQL mendukung modifikasi tipe kolom instan. Fitur ini hanya memodifikasi metadata tanpa menyalin seluruh tabel, sehingga secara signifikan mengurangi waktu modifikasi dan meningkatkan efisiensi operasional.
Fitur
Latar belakang: Mulai dari versi 8.0, MySQL komunitas mendukung INSTANT DDL. Menambah atau menghapus kolom hanya memerlukan perubahan metadata dan tidak melibatkan penyalinan data, sehingga operasi DDL dapat diselesaikan dalam hitungan detik. Namun, untuk modifikasi tipe kolom, MySQL komunitas versi 8.0 hanya mendukung metode COPY DDL, yang memakan waktu lama. AliSQL memperluas MySQL komunitas dengan mendukung modifikasi tipe kolom instan menggunakan algoritma INSTANT DDL.
Pengantar: Fitur modifikasi tipe kolom instan pada AliSQL menghindari penyalinan data saat mengubah tipe kolom. Fitur ini memanfaatkan kerangka eksekusi INSTANT DDL dari MySQL komunitas. Operasi ini hanya mengubah metadata, prosesnya identik dengan operasi INSTANT DDL lainnya, dan selesai dalam hitungan detik.
Prasyarat
Untuk menggunakan fitur ini, instans RDS Anda harus memenuhi salah satu persyaratan versi berikut. Jika versi Anda tidak memenuhi persyaratan, Anda dapat upgrade versi mesin utama atau upgrade versi mesin minor:
MySQL 8.4
MySQL 8.0 dengan versi mesin minor 20251031 atau lebih baru
Fitur ini memiliki batasan berikut:
Mesin penyimpanan: Fitur ini hanya mendukung mesin penyimpanan InnoDB.
Kolom indeks: Anda tidak dapat memodifikasi kolom indeks.
Tipe kolom: Anda hanya dapat melakukan modifikasi tipe kolom dan ekstensi panjang berikut:
Memperluas tipe integer (modifikasi tipe kolom):
TINYINT,SMALLINT,MEDIUMINT,INT, danBIGINThanya dapat diubah dari tipe yang lebih kecil ke tipe yang lebih besar. Misalnya, mengubahINTmenjadiBIGINTdidukung, tetapi mengubahBIGINTmenjadiINTtidak didukung.Memperpanjang tipe string (ekstensi panjang): Anda dapat menambah panjang tipe
CHARdanVARCHAR. Misalnya, untuk memodifikasi kolom dari CHAR(M) menjadi CHAR(N), N harus lebih besar dari M.
Batasan lainnya: Anda tidak dapat memodifikasi kolom yang merupakan bagian dari kunci partisi.
Manajemen parameter
Parameter
Parameter berikut mengontrol fitur modifikasi tipe kolom instan:
Parameter | Deskripsi |
|
|
|
|
|
|
Memodifikasi parameter
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS tersebut dan klik ID instansnya.
Di panel navigasi kiri, klik Parameter Settings.
Di tab Modifiable Parameters, cari parameter yang ingin dimodifikasi dan atur nilainya.
Klik OK, lalu klik Submit Parameters. Di kotak dialog yang muncul, pilih rentang waktu agar perubahan diterapkan.
Penggunaan
Untuk mengaktifkan modifikasi tipe kolom instan, atur ketiga parameter berikut ke nilai ON di Konsol:
loose_rds_upgrade_datatype_online_enableloose_rds_upgrade_datatype_instant_enableloose_innodb_instant_ddl_enabled
Contoh berikut menggunakan tabel bernama t1 dengan struktur sebagai berikut:
CREATE TABLE `t1` (
`id` int NOT NULL,
`c1` char(10) DEFAULT NULL,
`c2` varchar(10) DEFAULT NULL,
`c3` char(100) DEFAULT NULL,
`c4` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;Memodifikasi tipe kolom dengan algoritma INSTANT
Anda dapat menentukan algoritma INSTANT baik untuk modifikasi tipe kolom maupun ekstensi panjang:
Modifikasi tipe kolom: Tentukan algoritma INSTANT untuk mengubah tipe kolom
c1menjadibigint.Ekstensi panjang: Tentukan algoritma INSTANT untuk memperpanjang panjang kolom
c2danc3.
Jika Anda menentukan algoritma sebagai INPLACE, operasi tersebut akan melakukan modifikasi tipe kolom online, bukan instan.
-- Modifikasi tipe kolom: Tentukan algoritma INSTANT untuk memodifikasi tipe kolom c1.
ALTER TABLE `t1` MODIFY `c1` bigint DEFAULT NULL, ALGORITHM=INSTANT;
-- Lihat hasil modifikasi.
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int NOT NULL,
`c1` bigint DEFAULT NULL,
`c2` char(10) DEFAULT NULL,
`c3` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
1 row in set (0.00 sec)
-- Ekstensi panjang: Tentukan algoritma INSTANT untuk memperpanjang panjang kolom c2 dan c3.
ALTER TABLE `t1` MODIFY `c2` char(20) DEFAULT NULL, ALGORITHM=INSTANT;
ALTER TABLE `t1` MODIFY `c3` varchar(100) DEFAULT NULL, ALGORITHM=INSTANT;
-- Lihat hasil modifikasi.
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int NOT NULL,
`c1` bigint DEFAULT NULL,
`c2` char(20) DEFAULT NULL,
`c3` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
1 row in set (0.00 sec)
Memodifikasi tipe kolom tanpa menentukan algoritma
Jika Anda tidak menentukan algoritma, sistem akan secara otomatis memilih algoritma yang paling sesuai untuk memodifikasi tipe kolom.
ALTER TABLE `t1` MODIFY `c1` bigint DEFAULT NULL;Menampilkan kolom yang dimodifikasi secara instan
Anda dapat memeriksa bidang PARENT_PHYSICAL_POSITION di tabel INFORMATION_SCHEMA.INNODB_COLUMNS untuk mengidentifikasi kolom mana yang dimodifikasi secara instan. Nilai -1 menunjukkan kolom standar, sedangkan nilai lainnya menunjukkan kolom yang dimodifikasi secara instan.
-- Kueri tabel INNODB_TABLES untuk menemukan TABLE_ID dari tabel contoh.
SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = 'demo/t1';
+----------+---------+------+--------+-------+------------+---------------+------------+--------------+--------------------+-----------------------+-----------------------+---------------------+
| TABLE_ID | NAME | FLAG | N_COLS | SPACE | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE | INSTANT_COLS | TOTAL_ROW_VERSIONS | INITIAL_COLUMN_COUNTS | CURRENT_COLUMN_COUNTS | TOTAL_COLUMN_COUNTS |
+----------+---------+------+--------+-------+------------+---------------+------------+--------------+--------------------+-----------------------+-----------------------+---------------------+
| 2197 | demo/t1 | 33 | 7 | 1129 | Dynamic | 0 | Single | 0 | 3 | 4 | 4 | 7 |
+----------+---------+------+--------+-------+------------+---------------+------------+--------------+--------------------+-----------------------+-----------------------+---------------------+
1 row in set (0.00 sec)
-- Gunakan TABLE_ID untuk mengambil informasi kolom dari tabel INNODB_COLUMNS.
-- Di hasil kueri, Anda dapat menemukan kolom yang dimodifikasi secara instan di bidang PARENT_PHYSICAL_POSITION (di mana nilainya bukan -1).
SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = 2197;
+----------+------+-----+-------+---------+-----+-------------+---------------+---------------+-----------------+--------------+------------------+--------------------------+
| TABLE_ID | NAME | POS | MTYPE | PRTYPE | LEN | HAS_DEFAULT | DEFAULT_VALUE | VERSION_ADDED | VERSION_DROPPED | PHYSICAL_POS | VERSION_MODIFIED | PARENT_PHYSICAL_POSITION |
+----------+------+-----+-------+---------+-----+-------------+---------------+---------------+-----------------+--------------+------------------+--------------------------+
| 2197 | id | 0 | 6 | 1283 | 4 | 0 | NULL | 0 | 0 | 0 | 0 | -1 |
| 2197 | c1 | 1 | 6 | 1032 | 8 | 1 | NULL | 1 | 0 | 6 | 0 | 3 |
| 2197 | c2 | 2 | 13 | 2162942 | 60 | 1 | NULL | 2 | 0 | 7 | 0 | 4 |
| 2197 | c3 | 3 | 12 | 2166799 | 300 | 1 | NULL | 3 | 0 | 8 | 0 | 5 |
+----------+------+-----+-------+---------+-----+-------------+---------------+---------------+-----------------+--------------+------------------+--------------------------+
4 rows in set (0.02 sec)