全部产品
Search
文档中心

PolarDB:Apa itu fitur Modifikasi Kolom Seketika dari PolarDB?

更新时间:Jul 03, 2025

Untuk memodifikasi tipe data kolom, MySQL menggunakan algoritma COPY yang membangun ulang seluruh tabel. Selama proses ini, tabel hanya dapat dibaca dan tidak mengizinkan operasi penulisan bersamaan. Algoritma ini juga lambat karena berjalan pada satu thread. Hal ini menjadi kendala bagi pengguna MySQL dengan dataset besar. Untuk mengatasi masalah ini, PolarDB for MySQL menyediakan fitur Modifikasi Kolom Seketika, yang memungkinkan modifikasi cepat tipe kolom tanpa bergantung pada ukuran tabel. Fitur ini hanya memodifikasi metadata tabel. Topik ini menjelaskan cara menggunakan fitur Modifikasi Kolom Seketika.

Prasyarat

Kluster Anda harus menjalankan PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.28 atau lebih baru. Periksa versi mesin database kluster sebelum melakukan operasi untuk memastikan bahwa versi memenuhi persyaratan.

Parameter

Parameter

Tingkat

Deskripsi

loose_innodb_polar_instant_modify_column_enable

Global

Menentukan apakah fitur Modifikasi Kolom Seketika diaktifkan. Nilai valid:

  • ON

  • OFF (default)

loose_innodb_polar_instant_modify_column_max_times

Global

Jumlah maksimum kali fitur Modifikasi Kolom Seketika dapat memodifikasi tipe kolom sebuah tabel.

Rentang nilai: 1 hingga 64. Nilai default: 16.

Catatan
  • Fitur Modifikasi Kolom Seketika dari PolarDB for MySQL sedang dalam rilis canary. Untuk menggunakan fitur ini, kunjungi Quota Center, temukan kuota dengan ID polarm_82_instant_modify_column, lalu klik Apply.

Batasan

  • Fitur Modifikasi Kolom Seketika hanya dapat digunakan untuk memodifikasi panjang tipe kolom tertentu. Properti kolom lainnya tidak dapat dimodifikasi.

    • Tipe bilangan bulat: Fitur ini hanya mendukung penambahan panjang kolom antara tipe TINYINT, SMALLINT, MEDIUMINT, INT, dan BIGINT.

      Contoh: Anda dapat mengubah kolom dari tipe INT menjadi BIGINT, tetapi tidak dari BIGINT ke INT.

    • Tipe string:

      • Anda dapat mengubah kolom string dari tipe VARCHAR(N) menjadi VARCHAR(N+M), di mana N dan M adalah bilangan bulat positif lebih besar dari 0.

        Contoh: Anda dapat mengubah kolom string dari tipe VARCHAR(50) menjadi VARCHAR(300), tetapi tidak dari VARCHAR(300) ke VARCHAR(50).

      • Anda dapat mengubah kolom string dari tipe CHAR(N) menjadi CHAR(N+M), di mana N dan M adalah bilangan bulat positif lebih besar dari 0.

        Contoh: Anda dapat mengubah kolom string dari tipe CHAR(30) menjadi CHAR(50), tetapi tidak dari CHAR(50) ke CHAR(30).

  • Fitur ini hanya mendukung tabel dengan format baris COMPACT atau DYNAMIC.

  • Kolom tempat indeks dibuat tidak dapat dimodifikasi menggunakan fitur ini.

  • Fitur Instant Modify Column tidak mendukung tabel terpartisi. Lihat tabel terpartisi.

  • Kolom tabel dengan indeks teks penuh atau indeks spasial tidak dapat dimodifikasi menggunakan fitur ini.

  • Operasi Modifikasi Kolom Seketika tidak dapat disertakan dalam pernyataan SQL yang sama dengan operasi DDL lainnya.

Catatan

Sebelum menjalankan operasi DDL, gunakan fitur EXPLAIN DDL untuk memeriksa apakah operasi mendukung algoritma INSTANT.

Penggunaan

Tentukan algoritma INSTANT untuk memaksa penggunaan fitur Modifikasi Kolom Seketika (direkomendasikan)

CREATE TABLE t(a int);
SHOW CREATE TABLE t;
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- Tentukan penggunaan algoritma INSTANT untuk memodifikasi tipe kolom dengan cepat.
ALTER TABLE t modify COLUMN a bigint DEFAULT NULL,algorithm=INSTANT;
Catatan

Jika kolom tidak dapat ditambahkan menggunakan fitur Modifikasi Kolom Seketika, pesan kesalahan berikut akan dikembalikan: ERROR 1846 (0A000): ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY/INPLACE. Dalam hal ini, pastikan parameter loose_innodb_polar_instant_modify_column_enable disetel ke ON dan verifikasi apakah operasi tersebut dibatasi. Informasi lebih lanjut tentang batasan fitur ini dapat ditemukan di bagian "Batasan".

Jangan tentukan algoritma atau tentukan algoritma default untuk PolarDB for MySQL memilih metode eksekusi optimal

Jika Anda tidak menentukan algoritma, atau Anda menentukan algoritma default, sistem akan memilih algoritma optimal berdasarkan prioritas algoritma .

ALTER TABLE test.test_table MODIFY COLUMN test_column bigint, ALGORITHM=DEFAULT;
ALTER TABLE test.test_table MODIFY COLUMN test_column bigint;
Catatan

PolarDB for MySQL mengevaluasi dan memilih algoritma DDL berdasarkan urutan preferensi berikut:

  • Algoritma INSTANT: Hanya memodifikasi metadata dalam kamus data tanpa memengaruhi data aktual dalam tabel. Operasi DDL dapat diselesaikan dalam hitungan detik, terlepas dari ukuran tabel.

  • Algoritma INPLACE: Memungkinkan akses baca dan tulis bersamaan selama operasi DDL untuk meminimalkan gangguan terhadap operasi bisnis. DDL paralel dapat digunakan untuk mempercepat operasi.

  • Algoritma COPY: Membangun ulang seluruh tabel. Selama proses ini, tabel hanya dapat dibaca dan tidak mengizinkan akses tulis, yang sangat memengaruhi operasi bisnis.

Lihat informasi tentang kolom yang dimodifikasi menggunakan fitur Modifikasi Kolom Seketika

Tabel INNODB_INSTANT_COLUMNS dalam database INFORMATION_SCHEMA mencatat semua kolom yang telah dimodifikasi menggunakan fitur Modifikasi Kolom Seketika dalam kluster saat ini. Hanya kolom yang dimodifikasi menggunakan fitur ini yang termasuk dalam tabel ini. Skema tabel INNODB_INSTANT_COLUMNS:

SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_INSTANT_COLUMNS;
***************************[ 1. row ]***************************
Table        | INNODB_INSTANT_COLUMNS
Create Table | CREATE TEMPORARY TABLE `INNODB_INSTANT_COLUMNS` (
  `TABLE_ID` bigint(21) unsigned NOT NULL DEFAULT '0',
  `TABLE_NAME` varchar(193) NOT NULL DEFAULT '',
  `SCHEMA_NAME` varchar(193) NOT NULL DEFAULT '',
  `COLUMN_NAME` varchar(193) NOT NULL DEFAULT '',
  `MTYPE` int(11) NOT NULL DEFAULT '0',
  `PRTYPE` int(11) NOT NULL DEFAULT '0',
  `LEN` int(11) NOT NULL DEFAULT '0',
  `HAS_DEFAULT` int(1) NOT NULL DEFAULT '0',
  `DEFAULT_VALUE` mediumblob,
  `CURRENT_VERSION` int(11) NOT NULL DEFAULT '0',
  `OLD_VERSION_INFO` blob
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Tabel berikut menjelaskan bidang yang dikembalikan dari pernyataan sebelumnya.

Nama kolom

Deskripsi

TABLE_ID

ID tabel.

TABLE_NAME

Nama tabel.

SCHEMA_NAME

Nama skema.

COLUMN_NAME

Nama kolom.

MTYPE

Tipe kolom.

PRTYPE

Tipe kolom presisi atau atribut.

LEN

Panjang kolom.

HAS_DEFAULT

Apakah kolom memiliki nilai default.

DEFAULT_VALUE

Nilai default kolom.

CURRENT_VERSION

Informasi versi kolom.

OLD_VERSION_INFO

Informasi tipe historis kolom.

Tabel INFORMATION_SCHEMA.INNODB_INSTANT_COLUMNS melacak kolom yang dimodifikasi menggunakan fitur Modifikasi Kolom Seketika. Anda dapat menanyakan tabel dengan menjalankan pernyataan berikut:

SELECT * FROM INFORMATION_SCHEMA.INNODB_INSTANT_COLUMNS;
Catatan

Jika Anda melakukan operasi DDL yang memerlukan pembangunan ulang tabel, seperti operasi DROP COLUMN pada kolom yang sebelumnya dimodifikasi menggunakan fitur Modifikasi Kolom Seketika, sistem akan menghapus informasi kolom terkait dari tabel INNODB_INSTANT_COLUMNS.