Topik ini didasarkan pada database cloud-native PolarDB for MySQL dan menjelaskan operasi DDL umum untuk membantu Anda memahami perilaku DDL, mengevaluasi risiko operasional, serta mengurangi dampak terhadap beban kerja.
Ikhtisar operasi DDL
Dalam ekosistem MySQL, DDL merupakan kategori operasi yang sangat kompleks, mencakup operasi indeks, kunci primer, kolom, tabel, kunci asing, kolom terhitung (generated column), dan berbagai jenis lainnya. Operasi DDL tidak hanya memakan waktu dan intensif sumber daya, tetapi juga melibatkan penguncian tabel. Operasi yang tidak tepat dapat mengganggu beban kerja normal dan menyebabkan dampak serius.
PolarDB for MySQL memiliki modul DDL yang telah mencapai kemajuan signifikan dalam stabilitas kinerja dan penguncian berkat akumulasi pengalaman bertahun-tahun serta iterasi fitur berkelanjutan. Topik ini menjelaskan karakteristik perilaku operasi DDL umum di setiap versi PolarDB for MySQL dari aspek-aspek berikut:
-
Apakah tabel dikunci (DML konkuren diperbolehkan): DDL tanpa penguncian (Online DDL) hanya meminta mutex lock pada tabel saat memodifikasi metadata (umumnya berlangsung kurang dari 1 detik). Pembacaan dan penulisan pada tabel target tetap diperbolehkan selama perubahan skema, sehingga meningkatkan responsivitas dan ketersediaan di lingkungan produksi. Sebaliknya, pernyataan yang tidak mendukung Online DDL akan mengunci tabel sepanjang durasi eksekusi dan tidak mendukung penulisan konkuren. Jika operasi DDL semacam ini berlangsung lama, dampaknya terhadap operasi bisnis bisa signifikan.
-
Apakah tabel dibangun ulang (durasi): DDL semacam ini perlu membuat ulang kunci primer dan semua indeks sekunder sesuai skema tabel baru, sehingga biasanya memakan waktu lama.
CatatanKarena PolarDB for MySQL mendukung fitur parallel DDL, kinerjanya jauh lebih baik dibandingkan alat pihak ketiga seperti gh-ost atau pt-osc.
-
Apakah hanya metadata yang dimodifikasi (selesai dalam hitungan detik): Hanya metadata yang dimodifikasi tanpa perubahan pada data tabel. Waktu eksekusi operasi DDL semacam ini tidak bergantung pada ukuran tabel dan umumnya selesai dalam hitungan detik.
-
Apakah parallel DDL didukung (akselerasi multi-thread): Untuk skenario seperti membuat indeks atau membangun ulang tabel pada tabel besar, PolarDB mendukung parallel DDL yang menggunakan multi-threading untuk meningkatkan efisiensi eksekusi DDL hingga 15–20 kali lipat. Untuk informasi selengkapnya, lihat Parallel DDL.
-
Apakah kinerja terpengaruh (perubahan tanpa penguncian): Lakukan perubahan skema tanpa penguncian menggunakan tiket perubahan tanpa penguncian tidak menyebabkan gangguan layanan dan tidak memengaruhi beban kerja selama jam sepi.
CatatanKami merekomendasikan agar Anda melakukan operasi ini selama jam sepi karena dapat meningkatkan penggunaan IOPS dan CPU.
Algoritma eksekusi DDL
PolarDB for MySQL mendukung tiga algoritma eksekusi DDL berikut:
-
Algoritma INSTANT: Saat algoritma INSTANT digunakan, hanya metadata dalam kamus data yang dimodifikasi. Data yang sudah ada tidak perlu diubah atau disalin, dan tabel tidak perlu dibangun ulang. Oleh karena itu, prosesnya tidak dipengaruhi oleh ukuran tabel dan seluruh operasi DDL dapat selesai dalam hitungan detik.
-
Algoritma INPLACE: Saat algoritma INPLACE digunakan, penyalinan dan pembangunan ulang data dalam tabel diselesaikan di dalam engine, sehingga eksekusi lebih cepat. Sebagian besar operasi DDL dengan algoritma INPLACE memperbolehkan pembacaan dan penulisan konkuren serta memiliki dampak minimal terhadap beban kerja. Beberapa operasi DDL seperti RENAME TABLE dan ADD COMMENT hanya memodifikasi metadata tanpa mengubah data tabel dan selesai dalam hitungan detik.
-
Algoritma COPY: Saat algoritma COPY digunakan, semua data dalam tabel harus disalin ke tabel baru. Selama penyalinan data, kunci SNW (SHARED_NO_WRITE) dipegang pada tabel asli, sehingga hanya operasi baca yang didukung dan penulisan konkuren tidak diperbolehkan selama eksekusi DDL—berdampak signifikan terhadap beban kerja.
Operasi DDL yang memperbolehkan pembacaan dan penulisan konkuren secara kolektif disebut Online DDL, yang memiliki dampak relatif kecil terhadap beban kerja. Dalam kebanyakan kasus, Anda tidak perlu menentukan algoritma secara manual karena PolarDB secara otomatis memilih algoritma optimal dalam urutan prioritas: INSTANT, INPLACE, lalu COPY. Namun, Anda dapat menggunakan klausa ALGORITHM dan LOCK pada pernyataan ALTER TABLE untuk menyesuaikan perilaku operasi DDL:
-
Klausa ALGORITHM: Untuk menjalankan pernyataan DDL dengan algoritma tertentu, tentukan nilai ALGORITHM. Nilai yang valid adalah DEFAULT, INSTANT, INPLACE, dan COPY. Jika operasi DDL tidak mendukung algoritma yang ditentukan, kesalahan akan dikembalikan segera.
-
Klausa LOCK: Klausa LOCK digunakan untuk mengatur akses konkuren ke tabel selama eksekusi DDL. Opsi yang tersedia beserta maknanya adalah sebagai berikut:
-
DEFAULT: Kernel memperbolehkan tingkat maksimum pembacaan dan penulisan konkuren berdasarkan jenis DDL.
-
NONE: Pembacaan dan penulisan konkuren diperbolehkan selama eksekusi DDL. Kesalahan dikembalikan jika tidak didukung.
-
SHARED: Pembacaan konkuren diperbolehkan, tetapi penulisan diblokir. Kesalahan dikembalikan jika pembacaan konkuren tidak didukung.
-
EXCLUSIVE: Semua pembacaan dan penulisan konkuren dilarang selama eksekusi DDL.
-
Untuk mencegah tabel menjadi tidak dapat diakses saat mengeksekusi ALTER TABLE, Anda dapat menentukan klausa LOCK dalam pernyataan tersebut. Jika perilaku penguncian selama eksekusi DDL tidak memenuhi kondisi yang ditentukan, operasi akan segera dihentikan.
Pratinjau karakteristik eksekusi DDL dengan EXPLAIN DDL
Topik ini mencantumkan karakteristik eksekusi operasi DDL umum. Namun, karena PolarDB menyediakan banyak fitur, perilaku eksekusi DDL aktual dapat dipengaruhi oleh berbagai faktor seperti struktur tabel target, pengaturan parameter instans, dan status fitur tertentu.
Untuk meningkatkan keamanan dan prediktabilitas perubahan skema, kami sangat merekomendasikan penggunaan fitur EXPLAIN DDL guna memahami karakteristik eksekusi operasi DDL sebelum menjalankan operasi kompleks.
Anda dapat menggunakan sintaks berikut untuk melihat karakteristik eksekusi operasi DDL:
{ EXPLAIN | DESCRIBE | DESC } ALTER TABLE ...
Dengan EXPLAIN DDL, Anda dapat memperoleh informasi kunci berikut:
-
Apakah operasi DDL dapat dieksekusi dengan sukses.
-
Jenis algoritma yang digunakan:
INSTANT,INPLACE, atauCOPY. -
Apakah operasi DDL perlu membangun ulang seluruh data tabel—proses yang biasanya memakan waktu lama.
-
Apakah operasi DML konkuren diperbolehkan selama eksekusi DDL.
-
Apakah operasi DDL akan diblokir oleh transaksi yang belum dikomit.
-
Apakah operasi DDL mendukung akselerasi parallel DDL. Jika didukung, tingkat paralelisme akan ditampilkan.
Dengan memahami informasi ini terlebih dahulu, Anda dapat menilai dampak operasi DDL secara lebih akurat, memilih waktu eksekusi yang tepat, serta menghindari masalah seperti penguncian tabel dan waktu eksekusi lama yang memengaruhi beban kerja online. Untuk informasi selengkapnya, lihat EXPLAIN DDL.
Karakteristik perilaku DDL
Operasi indeks
PolarDB for MySQL 8.0.2
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Membuat indeks sekunder |
Ya |
Tidak |
Tidak |
Didukung |
|
Menghapus indeks sekunder |
Ya |
Tidak |
Ya |
N/A |
|
Mengganti nama indeks sekunder |
Ya |
Tidak |
Ya |
N/A |
|
Menambahkan indeks FULLTEXT |
Tidak |
Tidak Catatan
Saat Anda menambahkan indeks teks penuh pertama ke tabel, pembangunan ulang tabel tambahan dipicu jika tidak ada kolom FTS_DOC_ID yang ditentukan pengguna. |
Tidak |
Tidak didukung |
|
Menambahkan indeks SPATIAL |
Tidak |
Tidak |
Tidak |
Tidak didukung |
PolarDB for MySQL 8.0.1
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Membuat indeks sekunder |
Ya |
Tidak |
Tidak |
Didukung |
|
Menghapus indeks sekunder |
Ya |
Tidak |
Ya |
N/A |
|
Mengganti nama indeks sekunder |
Ya |
Tidak |
Ya |
N/A |
|
Menambahkan indeks FULLTEXT |
Tidak |
Tidak Catatan
Saat Anda menambahkan indeks teks penuh pertama ke tabel, pembangunan ulang tabel tambahan dipicu jika tidak ada kolom FTS_DOC_ID yang ditentukan pengguna. |
Tidak |
Tidak didukung |
|
Menambahkan indeks SPATIAL |
Tidak |
Tidak |
Tidak |
Tidak didukung |
PolarDB for MySQL 5.7
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Membuat indeks sekunder |
Ya |
Tidak |
Tidak |
Didukung |
|
Menghapus indeks sekunder |
Ya |
Tidak |
Ya |
N/A |
|
Mengganti nama indeks sekunder |
Ya |
Tidak |
Ya |
N/A |
|
Menambahkan indeks FULLTEXT |
Tidak |
Tidak Catatan
Saat Anda menambahkan indeks teks penuh pertama ke tabel, pembangunan ulang tabel tambahan dipicu jika tidak ada kolom FTS_DOC_ID yang ditentukan pengguna. |
Tidak |
Tidak didukung |
|
Menambahkan indeks SPATIAL |
Tidak |
Tidak |
Tidak |
Tidak didukung |
PolarDB for MySQL 5.6
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Membuat indeks sekunder |
Ya |
Tidak |
Tidak |
Tidak didukung |
|
Menghapus indeks sekunder |
Ya |
Tidak |
Ya |
N/A |
|
Menambahkan indeks FULLTEXT |
Tidak |
Tidak Catatan
Saat Anda menambahkan indeks teks penuh pertama ke tabel, pembangunan ulang tabel tambahan dipicu jika tidak ada kolom FTS_DOC_ID yang ditentukan pengguna. |
Tidak |
Tidak didukung |
|
Menambahkan indeks SPATIAL |
Tidak |
Tidak |
Tidak |
Tidak didukung |
Operasi kunci primer
PolarDB for MySQL 8.0.2
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kunci primer |
Ya |
Ya |
Tidak |
Didukung |
|
Menghapus kunci primer |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kunci primer yang ada dan menambahkan kunci primer baru |
Ya |
Ya |
Tidak |
Didukung |
PolarDB for MySQL 8.0.1
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kunci primer |
Ya |
Ya |
Tidak |
Didukung |
|
Menghapus kunci primer |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kunci primer yang ada dan menambahkan kunci primer baru |
Ya |
Ya |
Tidak |
Didukung |
PolarDB for MySQL 5.7
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kunci primer |
Ya |
Ya |
Tidak |
Didukung |
|
Menghapus kunci primer |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kunci primer yang ada dan menambahkan kunci primer baru |
Ya |
Ya |
Tidak |
Didukung |
PolarDB for MySQL 5.6
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kunci primer |
Ya |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kunci primer |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kunci primer yang ada dan menambahkan kunci primer baru |
Ya |
Ya |
Tidak |
Tidak didukung |
Dalam skenario berikut, DML konkuren hanya diperbolehkan jika parameter kluster sql_mode berisi STRICT_TRANS_TABLES atau STRICT_ALL_TABLES:
-
Menambahkan kunci primer
-
Menghapus kunci primer yang ada dan menambahkan kunci primer baru
Operasi kolom
PolarDB for MySQL 8.0.2
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kolom |
Ya |
No.1 |
Ya1 |
Didukung1 |
|
Menghapus kolom |
Ya |
Ya |
Tidak |
Didukung |
|
Mengganti nama kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengatur ulang urutan kolom |
Ya |
Ya |
Tidak |
Didukung |
|
Menetapkan nilai default kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah komentar kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah tipe kolom |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Memperpanjang panjang kolom VARCHAR |
Ya2 |
Tidak |
Ya |
N/A |
|
Mengubah set karakter dari UTF8mb3 ke UTF8mb4 |
Tidak |
No3 |
Ya3 |
Tidak didukung |
|
Menghapus nilai default kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah nilai auto-increment |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah kolom menjadi NULL |
Ya |
Ya |
Tidak |
Didukung |
|
Mengubah kolom menjadi NOT NULL |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Memodifikasi definisi kolom ENUM/SET |
Ya |
Tidak |
Ya4 |
N/A |
-
Fitur Penambahan kolom instan di akhir tabel hanya mendukung penambahan kolom di akhir tabel. Jika tabel tidak memiliki kunci primer eksplisit, atur parameter
implicit_primary_keyke OFF untuk mencegah kegagalan operasi akibat adanya kolom kunci primer implisit di akhir tabel. Penambahan kolom instan tidak didukung pada tabel terkompresi (ROW_FORMAT=COMPRESSED), tabel dengan indeks teks penuh, atau tabel temporary. Jika kluster tidak mendukung fitur ini, penambahan kolom akan menggunakan algoritma INPLACE yang memerlukan pembangunan ulang tabel penuh. Pembacaan dan penulisan konkuren tetap diperbolehkan selama proses tersebut, dan Anda dapat mempercepatnya dengan fitur parallel DDL. -
Saat memperpanjang panjang kolom VARCHAR, jumlah byte yang diperlukan untuk menyimpan panjang kolom harus tetap konsisten agar ekstensi kolom cepat didukung. Secara spesifik, kolom VARCHAR berukuran 0–255 byte hanya memerlukan satu byte untuk menyimpan panjangnya, sedangkan kolom berukuran 256 byte atau lebih memerlukan dua byte. Hanya jika ekstensi panjang VARCHAR tetap dalam rentang byte yang sama—misalnya 0–255 byte atau ≥256 byte—eksekusi ALTER TABLE hanya akan memodifikasi metadata. Artinya, saat memperpanjang panjang kolom VARCHAR dari kurang dari 256 byte menjadi 256 byte atau lebih, PolarDB secara default menggunakan DDL Copy yang mengunci tabel sepanjang durasi; hanya operasi baca yang diperbolehkan, sedangkan penulisan DML tidak didukung.
Jika Anda tidak yakin apakah rentang modifikasi VARCHAR memenuhi kondisi tersebut, gunakan
ALGORITHM=INPLACEuntuk menentukan algoritma INPLACE. Jika ekstensi kolom cepat tidak didukung, kesalahan akan dilaporkan langsung. Contoh:ALTER TABLE table_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256); ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.VARCHAR merupakan tipe penyimpanan panjang variabel, dan disk hanya menyimpan panjang aktualnya. Oleh karena itu, saat menggunakan field VARCHAR, kami merekomendasikan agar Anda langsung menetapkan panjang maksimum ke 256 byte atau lebih untuk menghindari kemungkinan penggunaan algoritma COPY saat memperpanjang field.
-
Jika kondisi berikut terpenuhi, mengubah set karakter kolom dari UTF8mb3 ke UTF8mb4 hanya memodifikasi metadata tanpa mengubah data. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel, dan tabel dikunci sepanjang durasi pembangunan ulang—hanya operasi baca yang diperbolehkan:
-
Tipe kolom adalah CHAR, VARCHAR, ENUM, atau TEXT.
-
Tidak ada indeks pada kolom yang dimodifikasi.
-
Panjang penyimpanan maksimum kolom kurang dari 256 byte atau lebih dari 255 byte baik sebelum maupun sesudah konversi set karakter.
Anda dapat menentukan ALGORITHM=INPLACE untuk memaksa DDL berjalan tanpa membangun ulang tabel. Jika operasi memerlukan algoritma COPY, kesalahan akan dikembalikan segera. Contoh:
ALTER TABLE test modify column b char(1) CHARACTER SET utf8mb4 default null,algorithm = inplace; ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. -
-
Hanya jika ukuran penyimpanan tipe data tidak berubah dan elemen ditambahkan di akhir ENUM atau SET, operasi hanya memodifikasi metadata tanpa membangun ulang seluruh tabel. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel.
PolarDB for MySQL 8.0.1
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kolom |
Ya |
No1 |
Ya1 |
Didukung1 |
|
Menghapus kolom |
Ya |
Ya |
Tidak |
Didukung |
|
Mengganti nama kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengatur ulang urutan kolom |
Ya |
Ya |
Tidak |
Didukung |
|
Menetapkan nilai default kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah komentar kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah tipe kolom |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Memperpanjang panjang kolom VARCHAR |
Ya2 |
Tidak |
Ya |
N/A |
|
Mengubah set karakter dari UTF8mb3 ke UTF8mb4 |
Tidak |
No3 |
Ya3 |
Tidak didukung |
|
Menghapus nilai default kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah nilai auto-increment |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah kolom menjadi NULL |
Ya |
Ya |
Tidak |
Didukung |
|
Mengubah kolom menjadi NOT NULL |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Memodifikasi definisi kolom ENUM/SET |
Ya |
Tidak |
Ya4 |
N/A |
-
Fitur Penambahan kolom instan di akhir tabel hanya mendukung penambahan kolom di akhir tabel. Jika tabel tidak memiliki kunci primer eksplisit, atur parameter
implicit_primary_keyke OFF untuk mencegah kegagalan operasi akibat adanya kolom kunci primer implisit di akhir tabel. Penambahan kolom instan tidak didukung pada tabel terkompresi (ROW_FORMAT=COMPRESSED), tabel dengan indeks teks penuh, atau tabel temporary. Jika kluster tidak mendukung fitur ini, penambahan kolom akan menggunakan algoritma INPLACE yang memerlukan pembangunan ulang tabel penuh. Pembacaan dan penulisan konkuren tetap diperbolehkan selama proses tersebut, dan Anda dapat mempercepatnya dengan fitur parallel DDL.Selain itu, jika tabel Anda memiliki Indeks Kolom dalam Memori (IMCI), penambahan kolom instan tidak didukung karena memerlukan pembangunan ulang IMCI. Anda dapat mengatur parameter
loose_imci_enable_add_column_instant_ddlke ON untuk mengaktifkan penambahan kolom instan. Dalam hal ini, PolarDB membangun ulang IMCI secara asinkron di latar belakang. IMCI tidak tersedia sementara selama pembangunan ulang. Untuk informasi selengkapnya, lihat Jalankan pernyataan DDL untuk membuat dan menghapus IMCI secara dinamis. -
Saat memperpanjang panjang kolom VARCHAR, jumlah byte yang diperlukan untuk menyimpan panjang kolom harus tetap konsisten agar ekstensi kolom cepat didukung. Secara spesifik, kolom VARCHAR berukuran 0–255 byte hanya memerlukan satu byte untuk menyimpan panjangnya, sedangkan kolom berukuran 256 byte atau lebih memerlukan dua byte. Hanya jika ekstensi panjang VARCHAR tetap dalam rentang byte yang sama—misalnya 0–255 byte atau ≥256 byte—eksekusi ALTER TABLE hanya akan memodifikasi metadata. Artinya, saat memperpanjang panjang kolom VARCHAR dari kurang dari 256 byte menjadi 256 byte atau lebih, PolarDB secara default menggunakan DDL Copy yang mengunci tabel sepanjang durasi; hanya operasi baca yang diperbolehkan, sedangkan penulisan DML tidak didukung.
Jika Anda tidak yakin apakah rentang modifikasi VARCHAR memenuhi kondisi tersebut, gunakan
ALGORITHM=INPLACEuntuk menentukan algoritma INPLACE. Jika ekstensi kolom cepat tidak didukung, kesalahan akan dilaporkan langsung. Contoh:ALTER TABLE table_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256); ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.VARCHAR merupakan tipe penyimpanan panjang variabel, dan disk hanya menyimpan panjang aktualnya. Oleh karena itu, saat menggunakan field VARCHAR, kami merekomendasikan agar Anda langsung menetapkan panjang maksimum ke 256 byte atau lebih untuk menghindari kemungkinan penggunaan algoritma COPY saat memperpanjang field.
-
Jika parameter
loose_innodb_support_instant_modify_charsetdiatur ke ON dan kondisi berikut terpenuhi, mengubah set karakter kolom dari UTF8mb3 ke UTF8mb4 hanya memodifikasi metadata tanpa mengubah data. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel, dan tabel dikunci sepanjang durasi pembangunan ulang—hanya operasi baca yang diperbolehkan:-
Tipe kolom adalah CHAR, VARCHAR, ENUM, atau TEXT.
-
Tidak ada indeks pada kolom yang dimodifikasi.
-
Panjang penyimpanan maksimum kolom kurang dari 256 byte atau lebih dari 255 byte baik sebelum maupun sesudah konversi set karakter.
Anda dapat menentukan ALGORITHM=INPLACE untuk memaksa DDL berjalan tanpa membangun ulang tabel. Jika operasi memerlukan algoritma COPY, kesalahan akan dikembalikan segera. Contoh:
ALTER TABLE test modify column b char(1) CHARACTER SET utf8mb4 default null,algorithm = inplace; ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. -
-
Hanya jika ukuran penyimpanan tipe data tidak berubah dan elemen ditambahkan di akhir ENUM atau SET, operasi hanya memodifikasi metadata tanpa membangun ulang seluruh tabel. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel.
PolarDB for MySQL 5.7
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kolom |
Ya |
Tidak1 |
Ya1 |
Didukung1 |
|
Menghapus kolom |
Ya |
Ya |
Tidak |
Didukung |
|
Mengganti nama kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengatur ulang urutan kolom |
Ya |
Ya |
Tidak |
Didukung |
|
Menetapkan nilai default kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah komentar kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah tipe kolom |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Memperpanjang panjang kolom VARCHAR |
Ya2 |
Tidak |
Ya |
N/A |
|
Mengubah set karakter dari UTF8mb3 ke UTF8mb4 |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus nilai default kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah nilai auto-increment |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah kolom menjadi NULL |
Ya |
Ya |
Tidak |
Didukung |
|
Mengubah kolom menjadi NOT NULL |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Memodifikasi definisi kolom ENUM/SET |
Ya |
Tidak |
Ya3 |
N/A |
-
Untuk mengaktifkan fitur Penambahan kolom instan di akhir tabel, atur parameter
loose_innodb_support_instant_add_columnke ON. Fitur ini hanya mendukung penambahan kolom di akhir tabel. Jika tabel tidak memiliki kunci primer eksplisit, atur parameterimplicit_primary_keyke OFF untuk mencegah kegagalan operasi akibat adanya kolom kunci primer implisit di akhir tabel. Penambahan kolom instan tidak didukung pada tabel terkompresi (ROW_FORMAT=COMPRESSED), tabel dengan indeks teks penuh, atau tabel temporary. Jika kluster tidak mendukung fitur ini, penambahan kolom akan menggunakan algoritma INPLACE yang memerlukan pembangunan ulang tabel penuh. Pembacaan dan penulisan konkuren tetap diperbolehkan selama proses tersebut, dan Anda dapat mempercepatnya dengan fitur parallel DDL. -
Saat memperpanjang panjang kolom VARCHAR, jumlah byte yang diperlukan untuk menyimpan panjang kolom harus tetap konsisten agar ekstensi kolom cepat didukung. Secara spesifik, kolom VARCHAR berukuran 0–255 byte hanya memerlukan satu byte untuk menyimpan panjangnya, sedangkan kolom berukuran 256 byte atau lebih memerlukan dua byte. Hanya jika ekstensi panjang VARCHAR tetap dalam rentang byte yang sama—misalnya 0–255 byte atau ≥256 byte—eksekusi ALTER TABLE hanya akan memodifikasi metadata. Artinya, saat memperpanjang panjang kolom VARCHAR dari kurang dari 256 byte menjadi 256 byte atau lebih, PolarDB secara default menggunakan DDL Copy yang mengunci tabel sepanjang durasi; hanya operasi baca yang diperbolehkan, sedangkan penulisan DML tidak didukung.
Jika Anda tidak yakin apakah rentang modifikasi VARCHAR memenuhi kondisi tersebut, gunakan
ALGORITHM=INPLACEuntuk menentukan algoritma INPLACE. Jika ekstensi kolom cepat tidak didukung, kesalahan akan dilaporkan langsung. Contoh:ALTER TABLE table_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256); ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.VARCHAR merupakan tipe penyimpanan panjang variabel, dan disk hanya menyimpan panjang aktualnya. Oleh karena itu, saat menggunakan field VARCHAR, kami merekomendasikan agar Anda langsung menetapkan panjang maksimum ke 256 byte atau lebih untuk menghindari kemungkinan penggunaan algoritma COPY saat memperpanjang field.
-
Hanya jika ukuran penyimpanan tipe data tidak berubah dan elemen ditambahkan di akhir ENUM atau SET, operasi hanya memodifikasi metadata tanpa membangun ulang seluruh tabel. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel.
PolarDB for MySQL 5.6
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kolom |
Ya |
No1 |
Ya1 |
Tidak didukung |
|
Menghapus kolom |
Ya |
Ya |
Tidak |
Tidak didukung |
|
Mengganti nama kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengatur ulang urutan kolom |
Ya |
Ya |
Tidak |
Tidak didukung |
|
Menetapkan nilai default kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah komentar kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah tipe kolom |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Memperpanjang panjang kolom VARCHAR |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mengubah set karakter dari UTF8mb3 ke UTF8mb4 |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus nilai default kolom |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah nilai auto-increment |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah kolom menjadi NULL |
Ya |
Ya |
Tidak |
Tidak didukung |
|
Mengubah kolom menjadi NOT NULL |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Memodifikasi definisi kolom ENUM/SET |
Ya |
Tidak |
Ya2 |
N/A |
-
Untuk mengaktifkan fitur Penambahan kolom instan di akhir tabel, atur parameter
loose_innodb_support_instant_add_columnke ON. Fitur ini hanya mendukung penambahan kolom di akhir tabel. Jika tabel tidak memiliki kunci primer eksplisit, atur parameterimplicit_primary_keyke OFF untuk mencegah kegagalan operasi akibat adanya kolom kunci primer implisit di akhir tabel. Penambahan kolom instan tidak didukung pada tabel terkompresi (ROW_FORMAT=COMPRESSED), tabel dengan indeks teks penuh, tabel temporary, atau tabel partisi. Jika kluster tidak mendukung fitur ini, penambahan kolom akan menggunakan algoritma INPLACE yang memerlukan pembangunan ulang tabel penuh. Pembacaan dan penulisan konkuren tetap diperbolehkan selama proses tersebut.CatatanFitur penambahan kolom instan PolarDB for MySQL berada dalam tahap rilis canary. Untuk menggunakannya, buka Quota Center, gunakan Quota ID
polardb_mysql_iac_56untuk menemukan kuota, lalu klik Apply di kolom Actions untuk mengaktifkan fitur ini. -
Hanya jika ukuran penyimpanan tipe data tidak berubah dan elemen ditambahkan di akhir ENUM atau SET, operasi hanya memodifikasi metadata tanpa membangun ulang seluruh tabel. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel.
Operasi tabel
PolarDB for MySQL 8.0.2
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Mengubah ROW_FORMAT |
Ya |
Ya |
Tidak |
Didukung |
|
Mengubah KEY_BLOCK_SIZE |
Ya |
Ya |
Tidak |
Didukung |
|
Mengonfigurasi statistik persisten |
Ya |
Tidak |
Ya |
N/A |
|
Mendeklarasikan set karakter |
Ya |
Tidak |
Ya |
N/A |
|
Mengonversi set karakter |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mengoptimalkan tabel |
Ya |
Ya Catatan
Saat |
Tidak |
Didukung |
|
Membangun ulang tabel |
Ya |
Ya |
Tidak |
Didukung |
|
Mengganti nama tabel |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah komentar tabel |
Ya |
Tidak |
Ya |
N/A |
|
Membuat tabel (CREATE TABLE) |
\ |
\ |
Ya |
N/A |
PolarDB for MySQL 8.0.1
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Mengubah ROW_FORMAT |
Ya |
Ya |
Tidak |
Didukung |
|
Mengubah KEY_BLOCK_SIZE |
Ya |
Ya |
Tidak |
Didukung |
|
Mengonfigurasi statistik persisten |
Ya |
Tidak |
Ya |
N/A |
|
Mendeklarasikan set karakter |
Ya |
Tidak |
Ya |
N/A |
|
Mengonversi set karakter |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mengoptimalkan tabel |
Ya |
Ya Catatan
Saat |
Tidak |
Didukung |
|
Membangun ulang tabel |
Ya |
Ya |
Tidak |
Didukung |
|
Mengganti nama tabel |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah komentar tabel |
Ya |
Tidak |
Ya |
N/A |
|
Membuat tabel (CREATE TABLE) |
\ |
\ |
Ya |
N/A |
PolarDB for MySQL 5.7
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Mengubah ROW_FORMAT |
Ya |
Ya |
Tidak |
Didukung |
|
Mengubah KEY_BLOCK_SIZE |
Ya |
Ya |
Tidak |
Didukung |
|
Mengonfigurasi statistik persisten |
Ya |
Tidak |
Ya |
N/A |
|
Mendeklarasikan set karakter |
Ya |
Tidak |
Ya |
N/A |
|
Mengonversi set karakter |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mengoptimalkan tabel |
Ya |
Ya Catatan
Saat |
Tidak |
Didukung |
|
Membangun ulang tabel |
Ya |
Ya |
Tidak |
Didukung |
|
Mengganti nama tabel |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah komentar tabel |
Ya |
Tidak |
Ya |
N/A |
|
Membuat tabel (CREATE TABLE) |
\ |
\ |
Ya |
N/A |
PolarDB for MySQL 5.6
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Mengubah ROW_FORMAT |
Ya |
Ya |
Tidak |
Tidak didukung |
|
Mengubah KEY_BLOCK_SIZE |
Ya |
Ya |
Tidak |
Tidak didukung |
|
Mengonfigurasi statistik persisten |
Ya |
Tidak |
Ya |
N/A |
|
Mendeklarasikan set karakter |
Ya |
Tidak |
Ya |
N/A |
|
Mengonversi set karakter |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mengoptimalkan tabel |
Ya |
Ya Catatan
Saat |
Tidak |
Tidak didukung |
|
Membangun ulang tabel |
Ya |
Ya |
Tidak |
Tidak didukung |
|
Mengganti nama tabel |
Ya |
Tidak |
Ya |
N/A |
|
Mengubah komentar tabel |
Ya |
Tidak |
Ya |
N/A |
|
Membuat tabel (CREATE TABLE) |
\ |
\ |
Ya |
N/A |
Saat menjalankan pernyataan CREATE TABLE secara batch, kami merekomendasikan agar Anda membaginya menjadi batch yang lebih kecil dan mengeksekusinya selama jam sepi, serta menghindari jendela pemeliharaan seperti skala keluar kluster. Eksekusi intensif dapat secara singkat menduduki sumber daya metadata lock (MDL), meskipun tidak berdampak langsung terhadap data atau beban kerja yang ada.
Operasi kolom yang dihasilkan
PolarDB for MySQL 8.0.2
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kolom STORED |
Tidak Catatan
Menambahkan ekspresi kolom STORED melibatkan layer SQL/Server, sehingga Online DDL tidak didukung saat menambahkan kolom STORED. |
Ya |
Tidak |
Tidak didukung |
|
Mengatur ulang urutan kolom STORED |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kolom STORED |
Ya |
Ya |
Tidak |
Didukung |
|
Menambahkan kolom VIRTUAL |
Ya |
Tidak |
Ya |
N/A |
|
Mengatur ulang urutan kolom VIRTUAL |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kolom VIRTUAL |
Ya |
Tidak |
Ya |
N/A |
PolarDB for MySQL 8.0.1
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kolom STORED |
Tidak Catatan
Menambahkan ekspresi kolom STORED melibatkan layer SQL/Server, sehingga Online DDL tidak didukung saat menambahkan kolom STORED. |
Ya |
Tidak |
Tidak didukung |
|
Mengatur ulang urutan kolom STORED |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kolom STORED |
Ya |
Ya |
Tidak |
Didukung |
|
Menambahkan kolom VIRTUAL |
Ya |
Tidak |
Ya |
N/A |
|
Mengatur ulang urutan kolom VIRTUAL |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kolom VIRTUAL |
Ya |
Tidak |
Ya |
N/A |
PolarDB for MySQL 5.7
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kolom STORED |
Tidak Catatan
Menambahkan ekspresi kolom STORED melibatkan layer SQL/Server, sehingga Online DDL tidak didukung saat menambahkan kolom STORED. |
Ya |
Tidak |
Tidak didukung |
|
Mengatur ulang urutan kolom STORED |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kolom STORED |
Ya |
Ya |
Tidak |
Didukung |
|
Menambahkan kolom VIRTUAL |
Ya |
Tidak |
Ya |
N/A |
|
Mengatur ulang urutan kolom VIRTUAL |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Menghapus kolom VIRTUAL |
Ya |
Tidak |
Ya |
N/A |
PolarDB for MySQL 5.6
PolarDB for MySQL 5.6 tidak mendukung kolom terhitung.
Operasi kunci asing
PolarDB for MySQL 8.0.2
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kunci asing |
Ya1 |
Tidak1 |
Ya1 |
N/A |
|
Menghapus kunci asing |
Ya1 |
Tidak1 |
Ya1 |
N/A |
PolarDB for MySQL 8.0.1
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kunci asing |
Ya1 |
Tidak1 |
Ya1 |
N/A |
|
Menghapus kunci asing |
Ya1 |
Tidak1 |
Ya1 |
N/A |
PolarDB for MySQL 5.7
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kunci asing |
Ya1 |
Tidak1 |
Ya1 |
N/A |
|
Menghapus kunci asing |
Ya1 |
Tidak1 |
Ya1 |
N/A |
PolarDB for MySQL 5.6
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan kunci asing |
Ya1 |
No1 |
Ya1 |
N/A |
|
Menghapus kunci asing |
Ya1 |
Tidak1 |
Ya1 |
N/A |
DDL INPLACE hanya didukung saat sakelar foreign_key_checks dinonaktifkan dan hanya metadata yang dimodifikasi. Jika tidak, hanya DDL COPY yang didukung, dan tabel dikunci sepanjang durasi.
Operasi tabel partisi
PolarDB for MySQL 8.0.2
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan partisi (ADD) |
Ya1 |
No2 |
Ya |
Tidak didukung |
|
Menghapus partisi (DROP) |
Ya1 |
No2 |
Tidak |
Tidak didukung |
|
Membuang ruang tabel partisi (DISCARD) |
Tidak |
Tidak |
Tidak |
Tidak didukung |
|
Mengimpor ruang tabel partisi (IMPORT) |
Tidak |
Tidak |
Tidak |
Tidak didukung |
|
Memotong partisi (TRUNCATE) |
Ya |
Tidak |
Tidak |
Tidak didukung |
|
Menggabungkan partisi (COALESCE) |
Tidak |
Ya3 |
Tidak |
Tidak didukung |
|
Mendistribusikan ulang partisi (REORGANIZE) |
Ya1 |
No7 |
Tidak |
Tidak didukung |
|
Menukar partisi (EXCHANGE) |
Ya1 |
Tidak |
Ya |
Tidak didukung |
|
Menganalisis partisi (ANALYZE) |
Ya |
Tidak |
No8 |
Tidak didukung |
|
Memeriksa partisi (CHECK) |
Ya |
Tidak |
No9 |
Tidak didukung |
|
Mengoptimalkan partisi (OPTIMIZE) |
Ya4 |
Ya4 |
Tidak |
Didukung4 |
|
Membangun ulang partisi (REBUILD) |
Ya1 |
No7 |
Tidak |
Tidak didukung |
|
Memperbaiki partisi (REPAIR) |
Ya |
Tidak10 |
Tidak |
Tidak didukung |
|
Mengonversi tabel menjadi partisi |
Tidak |
Ya |
Ya5 |
Tidak didukung |
|
Mengonversi partisi menjadi tabel |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Membuat PARTIAL INDEX |
Ya |
No6 |
Tidak |
Didukung |
-
Memperkenalkan kunci metadata tingkat partisi (MDL). Setelah Anda mengatur parameter
loose_partition_level_mdl_enabledke true, operasi DDL tidak memengaruhi DML pada partisi yang tidak terlibat. Untuk informasi selengkapnya, lihat Pemeliharaan partisi online. -
Partisi RANGE dan LIST tidak memerlukan pembangunan ulang tabel saat menambahkan atau menghapus partisi. Partisi HASH dan KEY memerlukan pembangunan ulang tabel saat menambahkan partisi. Menghapus partisi dari partisi HASH dan KEY tidak didukung.
-
Hanya partisi HASH dan KEY yang didukung.
-
Saat menjalankan operasi OPTIMIZE PARTITION pada tabel di engine InnoDB, seluruh tabel partisi dibangun ulang. Pembacaan dan penulisan pada tabel target tetap didukung selama proses tersebut. Anda dapat mengatur parameter
innodb_parallel_build_primary_indexke ON dan menggunakan fitur Parallel DDL untuk mempercepat pembangunan ulang. -
Konversi instan hanya mendukung Mengonversi tabel non-partisi menjadi tabel terpartisi rentang.
-
PolarDB for MySQL mendukung pembuatan dan penghapusan indeks pada granularitas partisi. Untuk informasi selengkapnya, lihat Indeks parsial.
-
Mendistribusikan ulang atau membangun ulang partisi hanya membangun ulang partisi yang ditentukan yang memerlukan redistribusi atau pembangunan ulang. Partisi lain tidak terpengaruh.
-
Menganalisis partisi hanya memodifikasi statistik dan tidak memodifikasi metadata atau data tabel.
-
Memeriksa partisi tidak memodifikasi metadata atau data.
-
Memperbaiki partisi hanya membangun ulang partisi yang ditentukan yang perlu diperbaiki.
PolarDB for MySQL 8.0.1
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan partisi (ADD) |
Tidak |
No.1 |
Ya |
Tidak didukung |
|
Menghapus partisi (DROP) |
Tidak |
No2 |
Tidak |
Tidak didukung |
|
Membuang ruang tabel partisi (DISCARD) |
Tidak |
Tidak |
Tidak |
Tidak didukung |
|
Mengimpor ruang tabel partisi (IMPORT) |
Tidak |
Tidak |
Tidak |
Tidak didukung |
|
Memotong partisi (TRUNCATE) |
Ya |
Tidak |
Tidak |
Tidak didukung |
|
Menggabungkan partisi (COALESCE) |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mendistribusikan ulang partisi (REORGANIZE) |
Tidak |
Tidak4 |
Tidak |
Tidak didukung |
|
Menukar partisi (EXCHANGE) |
Ya |
Ya |
Ya |
Tidak didukung |
|
Menganalisis partisi (ANALYZE) |
Ya |
Ya |
Tidak5 |
Tidak didukung |
|
Memeriksa partisi (CHECK) |
Ya |
Tidak |
No6 |
Tidak didukung |
|
Mengoptimalkan partisi (OPTIMIZE) |
Ya3 |
Ya3 |
Tidak |
Didukung3 |
|
Membangun ulang partisi (REBUILD) |
Tidak |
Tidak4 |
Tidak |
Tidak didukung |
|
Memperbaiki partisi (REPAIR) |
Ya |
No4 |
Tidak |
Tidak didukung |
|
Mengonversi tabel menjadi partisi |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mengonversi partisi menjadi tabel |
Tidak |
Ya |
Tidak |
Tidak didukung |
-
Partisi RANGE dan LIST tidak memerlukan pembangunan ulang tabel saat menambahkan partisi. Partisi HASH dan KEY memerlukan pembangunan ulang tabel saat menambahkan partisi.
-
Partisi HASH dan KEY tidak didukung.
-
Saat menjalankan operasi OPTIMIZE PARTITION pada tabel di engine InnoDB, seluruh tabel partisi dibangun ulang. Pembacaan dan penulisan pada tabel target tetap didukung selama proses tersebut. Anda dapat mengatur parameter
innodb_parallel_build_primary_indexke ON dan menggunakan fitur Parallel DDL untuk mempercepat pembangunan ulang. -
Mendistribusikan ulang, membangun ulang, dan memperbaiki partisi hanya membangun ulang partisi yang ditentukan yang memerlukan redistribusi, pembangunan ulang, atau perbaikan. Partisi lain tidak terlibat.
-
Menganalisis partisi hanya memodifikasi statistik dan tidak memodifikasi metadata atau data tabel.
-
Memeriksa partisi tidak memodifikasi metadata atau data.
PolarDB for MySQL 5.7
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan partisi (ADD) |
Tidak |
Tidak1 |
Ya |
Tidak didukung |
|
Menghapus partisi (DROP) |
Tidak |
Tidak1 |
Tidak |
Tidak didukung |
|
Membuang ruang tabel partisi (DISCARD) |
Tidak |
Tidak |
Tidak |
Tidak didukung |
|
Mengimpor ruang tabel partisi (IMPORT) |
Tidak |
Tidak |
Tidak |
Tidak didukung |
|
Memotong partisi (TRUNCATE) |
Ya |
Tidak |
Tidak |
Tidak didukung |
|
Menggabungkan partisi (COALESCE) |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mendistribusikan ulang partisi (REORGANIZE) |
Tidak |
No.2 |
Tidak |
Tidak didukung |
|
Menukar partisi (EXCHANGE) |
Ya |
Tidak |
Ya |
Tidak didukung |
|
Menganalisis partisi (ANALYZE) |
Ya |
Tidak |
No3 |
Tidak didukung |
|
Memeriksa partisi (CHECK) |
Ya |
Tidak |
No4 |
Tidak didukung |
|
Mengoptimalkan partisi (OPTIMIZE) |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Membangun ulang partisi (REBUILD) |
Tidak |
Tidak2 |
Tidak |
Tidak didukung |
|
Memperbaiki partisi (REPAIR) |
Ya |
No2 |
Tidak |
Tidak didukung |
|
Mengonversi tabel menjadi partisi |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mengonversi partisi menjadi tabel |
Tidak |
Ya |
Tidak |
Tidak didukung |
-
Partisi RANGE dan LIST tidak memerlukan pembangunan ulang tabel saat menambahkan atau menghapus partisi. Partisi HASH dan KEY memerlukan pembangunan ulang tabel saat menambahkan partisi. Menghapus partisi dari partisi HASH dan KEY tidak didukung.
-
Mendistribusikan ulang, membangun ulang, dan memperbaiki partisi hanya membangun ulang partisi yang ditentukan yang memerlukan redistribusi, pembangunan ulang, atau perbaikan. Partisi lain tidak terlibat.
-
Menganalisis partisi hanya memodifikasi statistik dan tidak memodifikasi metadata atau data tabel.
-
Memeriksa partisi tidak memodifikasi metadata atau data.
PolarDB for MySQL 5.6
|
Operasi |
DML konkuren diperbolehkan |
Membangun ulang tabel |
Hanya metadata |
Parallel DDL didukung |
|
Menambahkan partisi (ADD) |
Tidak |
Tidak1 |
Ya |
Tidak didukung |
|
Menghapus partisi (DROP) |
Tidak |
Tidak1 |
Tidak |
Tidak didukung |
|
Membuang ruang tabel partisi (DISCARD) |
Tidak |
Tidak |
Tidak |
Tidak didukung |
|
Mengimpor ruang tabel partisi (IMPORT) |
Tidak |
Tidak |
Tidak |
Tidak didukung |
|
Memotong partisi (TRUNCATE) |
Ya |
Tidak |
Tidak |
Tidak didukung |
|
Menggabungkan partisi (COALESCE) |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mendistribusikan ulang partisi (REORGANIZE) |
Tidak |
No2 |
Tidak |
Tidak didukung |
|
Menukar partisi (EXCHANGE) |
Ya |
Tidak |
Ya |
Tidak didukung |
|
Menganalisis partisi (ANALYZE) |
Ya |
Tidak |
No3 |
Tidak didukung |
|
Memeriksa partisi (CHECK) |
Ya |
Tidak |
No.4 |
Tidak didukung |
|
Mengoptimalkan partisi (OPTIMIZE) |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Membangun ulang partisi (REBUILD) |
Tidak |
No2 |
Tidak |
Tidak didukung |
|
Memperbaiki partisi (REPAIR) |
Ya |
No2 |
Tidak |
Tidak didukung |
|
Mengonversi tabel menjadi partisi |
Tidak |
Ya |
Tidak |
Tidak didukung |
|
Mengonversi partisi menjadi tabel |
Tidak |
Ya |
Tidak |
Tidak didukung |
-
Partisi RANGE dan LIST tidak memerlukan pembangunan ulang tabel saat menambahkan atau menghapus partisi. Partisi HASH dan KEY memerlukan pembangunan ulang tabel saat menambahkan partisi. Menghapus partisi dari partisi HASH dan KEY tidak didukung.
-
Mendistribusikan ulang, membangun ulang, dan memperbaiki partisi hanya membangun ulang partisi yang ditentukan yang memerlukan redistribusi, pembangunan ulang, atau perbaikan. Partisi lain tidak terlibat.
-
Menganalisis partisi hanya memodifikasi statistik dan tidak memodifikasi metadata atau data tabel.
-
Memeriksa partisi tidak memodifikasi metadata atau data.
Metode eksekusi DDL
-
Saat PolarDB for MySQL menggunakan algoritma INPLACE atau INSTANT untuk menjalankan operasi DDL, kami merekomendasikan metode kernel (Online DDL) karena lebih cepat dan stabil.
-
Saat PolarDB for MySQL menggunakan algoritma COPY, tabel dikunci sepanjang durasi dan tidak dapat dibaca atau ditulis selama eksekusi. Dalam kasus ini, pertimbangkan penggunaan alat pihak ketiga seperti perubahan tanpa penguncian DMS atau gh-ost. Alat ini memperbolehkan pembacaan dan penulisan selama eksekusi DDL, tetapi biasanya lebih lambat. Pada tabel besar atau dalam skenario konkurensi tinggi, eksekusi dapat gagal jika terdapat terlalu banyak data inkremental.
Tabel berikut menjelaskan perbedaan antara menjalankan operasi DDL dengan metode kernel dan dengan alat pihak ketiga:
|
Metode eksekusi |
Pembacaan dan penulisan konkuren diperbolehkan |
Kecepatan eksekusi |
Binlog diperlukan |
Akselerasi paralel |
|
Kernel (Online DDL) |
Ya |
Cepat |
Tidak |
Didukung |
|
Alat pihak ketiga (perubahan tanpa penguncian DMS, gh-ost, dll.) |
Ya |
Lambat |
Ya |
Tidak didukung |
Bahkan jika Anda menggunakan alat pihak ketiga untuk menjalankan operasi DDL, kunci MDL-X tetap diperoleh selama pergantian tabel (modifikasi metadata), yang menyebabkan penguncian tabel singkat. Anda dapat mengaktifkan fitur Pernyataan DDL Nonblocking atau fitur DDL Preemptive untuk menghindari masalah penguncian tabel.
Hubungi kami
Jika Anda memiliki pertanyaan tentang operasi DDL, Hubungi kami.