Topik ini menjelaskan operasi Data Definition Language (DDL) umum dalam database cloud-native PolarDB for MySQL. Panduan ini membantu Anda memahami perilaku DDL, menilai risiko operasional, serta mengurangi dampak terhadap bisnis Anda.
Ikhtisar operasi DDL
Dalam ekosistem MySQL, operasi DDL bersifat kompleks dan mencakup berbagai jenis, seperti operasi indeks, kunci primer, kolom, tabel, kunci asing, dan kolom terhasil. Operasi DDL umumnya memakan waktu lama, intensif sumber daya, dan melibatkan penguncian tabel. Jika tidak ditangani dengan benar, operasi ini dapat mengganggu operasi bisnis dan menyebabkan kegagalan bencana.
Modul DDL PolarDB for MySQL telah mengalami peningkatan signifikan selama bertahun-tahun pengembangan untuk meningkatkan performa dan stabilitas penguncian. Topik ini menjelaskan perilaku operasi DDL umum di berbagai versi PolarDB for MySQL berdasarkan aspek-aspek berikut:
Mengizinkan DML konkuren (tanpa penguncian): Pernyataan DDL tanpa penguncian (Online DDL) hanya meminta kunci eksklusif pada tabel saat memodifikasi metadata. Kunci ini biasanya berlangsung kurang dari satu detik. Selama evolusi skema, Anda dapat membaca dan menulis ke tabel target, sehingga meningkatkan kecepatan respons dan ketersediaan di lingkungan produksi. Sebaliknya, pernyataan yang tidak mendukung Online DDL mengunci tabel selama durasi operasi dan mencegah operasi tulis konkuren. Jika operasi DDL berjalan lama, hal ini dapat berdampak signifikan terhadap bisnis Anda.
Membangun ulang tabel (waktu eksekusi lama): Jenis operasi DDL ini membuat ulang kunci primer dan semua indeks sekunder berdasarkan skema tabel baru. Proses ini biasanya memakan waktu lama.
CatatanPolarDB for MySQL mendukung DDL paralel. Performa eksekusi DDL menggunakan metode kernel jauh lebih baik dibandingkan menggunakan alat pihak ketiga seperti gh-ost atau pt-osc.
Hanya memodifikasi metadata (selesai dalam hitungan detik): Jenis operasi DDL ini hanya memodifikasi metadata tanpa mengubah data tabel. Waktu eksekusinya tidak meningkat seiring ukuran tabel dan biasanya selesai dalam hitungan detik.
Dukungan untuk DDL paralel (akselerasi multi-threaded): Untuk operasi pada tabel besar, seperti membuat indeks atau membangun ulang tabel, PolarDB mendukung DDL paralel. Fitur ini menggunakan beberapa thread untuk meningkatkan efisiensi eksekusi DDL dan dapat meningkatkan performa hingga 15–20 kali lipat. Untuk informasi selengkapnya, lihat DDL Paralel.
Dampak performa (perubahan tanpa penguncian): Menerapkan evolusi skema tanpa penguncian menggunakan tiket perubahan tanpa penguncian mencegah koneksi sementara dan tidak memengaruhi bisnis Anda selama jam non-sibuk.
CatatanLakukan operasi ini selama jam non-sibuk karena dapat meningkatkan operasi input/output per detik (IOPS) dan penggunaan CPU.
Algoritma eksekusi DDL
PolarDB for MySQL mendukung tiga algoritma eksekusi DDL berikut:
Algoritma INSTANT: Algoritma INSTANT hanya memodifikasi metadata dalam kamus data. Algoritma ini tidak memodifikasi atau menyalin data historis dan tidak membangun ulang tabel. Oleh karena itu, operasi ini tidak bergantung pada ukuran tabel dan selesai dalam hitungan detik.
Algoritma INPLACE: Dengan algoritma INPLACE, replikasi dan pembangunan ulang data diselesaikan di dalam engine untuk eksekusi yang lebih cepat. Sebagian besar operasi DDL yang menggunakan algoritma INPLACE mengizinkan akses baca dan tulis konkuren, yang meminimalkan dampak terhadap bisnis Anda. Selain itu, beberapa operasi DDL yang menggunakan algoritma INPLACE, seperti RENAME TABLE dan ADD COMMENT, hanya memodifikasi metadata tanpa mengubah data tabel dan dapat diselesaikan dalam hitungan detik.
Algoritma COPY: Algoritma COPY menyalin semua data dari tabel asli ke tabel baru. Selama replikasi data, kunci shared-no-write (SNW) diterapkan pada tabel asli, sehingga hanya operasi baca yang didukung selama operasi DDL. Operasi tulis konkuren diblokir, yang berdampak signifikan terhadap bisnis Anda.
Operasi DDL yang mengizinkan operasi baca dan tulis konkuren secara kolektif dikenal sebagai Online DDL. Online DDL memiliki dampak minimal terhadap bisnis Anda. Biasanya, Anda tidak perlu menentukan algoritma DDL secara manual. PolarDB secara otomatis memilih algoritma optimal dalam urutan INSTANT, INPLACE, lalu COPY. Anda juga dapat menggunakan klausa ALGORITHM dan LOCK pada pernyataan ALTER TABLE untuk mengelola perilaku DDL dengan kontrol detail halus:
Klausa ALGORITHM: Untuk mengeksekusi pernyataan DDL menggunakan algoritma tertentu, Anda dapat menentukan klausa ALGORITHM. Nilai yang tersedia adalah DEFAULT, INSTANT, INPLACE, dan COPY. Jika operasi DDL tidak mendukung algoritma yang ditentukan, kesalahan akan dikembalikan segera.
Klausa LOCK: Klausa LOCK menyesuaikan akses konkuren ke tabel selama eksekusi DDL. Anda dapat menggunakan klausa ini untuk mengontrol tingkat akses baca dan tulis konkuren saat tabel dimodifikasi. Opsi yang tersedia beserta deskripsinya adalah sebagai berikut:
DEFAULT: Kernel mengizinkan tingkat maksimum akses baca dan tulis konkuren berdasarkan jenis DDL.
NONE: Mengizinkan akses baca dan tulis konkuren selama eksekusi DDL. Jika tidak didukung, kesalahan akan dikembalikan.
SHARED: Mengizinkan akses baca konkuren tetapi memblokir tulis. Jika akses baca konkuren tidak didukung, kesalahan akan dikembalikan.
EXCLUSIVE: Melarang semua akses baca dan tulis konkuren selama operasi DDL.
Untuk mencegah tabel menjadi tidak dapat diakses selama eksekusi ALTER TABLE, Anda dapat menentukan klausa LOCK dalam pernyataan tersebut. Jika perilaku penguncian selama eksekusi DDL tidak memenuhi persyaratan yang ditentukan, operasi akan segera dihentikan.
Pratinjau perilaku eksekusi DDL menggunakan fitur EXPLAIN DDL
Topik ini mencantumkan perilaku eksekusi operasi DDL umum. Namun, karena PolarDB memiliki banyak fitur, perilaku eksekusi DDL aktual dapat dipengaruhi oleh berbagai faktor, seperti struktur tabel target, konfigurasi parameter instans, dan status aktif atau tidaknya fitur tertentu.
Untuk meningkatkan keamanan dan prediktabilitas evolusi skema, Anda dapat menggunakan fitur EXPLAIN DDL untuk mempratinjau perilaku eksekusi operasi DDL kompleks sebelum melakukannya.
Gunakan sintaks berikut untuk melihat perilaku eksekusi pernyataan DDL:
{ EXPLAIN | DESCRIBE | DESC } ALTER TABLE ...Menggunakan EXPLAIN DDL, Anda dapat memperoleh informasi kunci berikut:
Apakah operasi DDL saat ini dapat dieksekusi dengan sukses.
Jenis algoritma yang digunakan oleh operasi DDL saat ini. Nilainya dapat berupa
INSTANT,INPLACE, atauCOPY.Apakah operasi DDL saat ini perlu membangun ulang seluruh data tabel. Membangun ulang tabel penuh biasanya memakan waktu lama.
Apakah operasi DML konkuren diizinkan selama eksekusi pernyataan DDL saat ini.
Apakah operasi DDL saat ini akan diblokir oleh transaksi yang belum dikomit.
Apakah operasi DDL saat ini mendukung akselerasi DDL paralel. Jika didukung, tingkat paralelisme untuk operasi DDL saat ini akan ditampilkan.
Dengan memahami informasi ini terlebih dahulu, Anda dapat lebih akurat menilai dampak DDL, memilih waktu eksekusi yang tepat, dan secara efektif menghindari dampak terhadap layanan online Anda, seperti tabel terkunci dan waktu eksekusi yang terlalu lama. Untuk informasi selengkapnya, lihat EXPLAIN DDL.
Perilaku DDL
Operasi indeks
PolarDB for MySQL 8.0.2
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Buat indeks sekunder | Ya | Tidak | Tidak | Didukung |
Menghapus indeks sekunder | Ya | Tidak | Ya | Tidak berlaku |
Ganti nama indeks sekunder | Ya | Tidak | Ya | Tidak berlaku |
Menambahkan indeks teks penuh (FULLTEXT) | Tidak | Tidak Catatan Saat Anda menambahkan indeks teks penuh pertama ke tabel, operasi pembangunan ulang tabel tambahan dipicu jika tidak ada kolom FTS_DOC_ID yang ditentukan pengguna. | Tidak | Tidak didukung |
Tambahkan indeks spasial (SPATIAL) | Tidak | Tidak | Tidak | Tidak didukung |
PolarDB for MySQL 8.0.1
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Buat indeks sekunder | Ya | Tidak | Tidak | Didukung |
Menghapus indeks sekunder | Ya | Tidak | Ya | Tidak berlaku |
Ganti nama indeks sekunder | Ya | Tidak | Ya | Tidak berlaku |
Menambahkan indeks teks penuh (FULLTEXT) | Tidak | Tidak Catatan Saat Anda menambahkan indeks teks penuh pertama ke tabel, operasi pembangunan ulang tabel tambahan dipicu jika tidak ada kolom FTS_DOC_ID yang ditentukan pengguna. | Tidak | Tidak didukung |
Menambahkan indeks spasial (SPATIAL) | Tidak | Tidak | Tidak | Tidak didukung |
PolarDB for MySQL 5.7
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Buat indeks sekunder | Ya | Tidak | Tidak | Didukung |
Menghapus indeks sekunder | Ya | Tidak | Ya | Tidak berlaku |
Ganti nama indeks sekunder | Ya | Tidak | Ya | Tidak berlaku |
Menambahkan indeks teks penuh (FULLTEXT) | Tidak | Tidak Catatan Saat Anda menambahkan indeks teks penuh pertama ke tabel, operasi pembangunan ulang tabel tambahan dipicu jika tidak ada kolom FTS_DOC_ID yang ditentukan pengguna. | Tidak | Tidak didukung |
Menambahkan indeks spasial (SPATIAL) | Tidak | Tidak | Tidak | Tidak didukung |
PolarDB for MySQL 5.6
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Buat indeks sekunder | Ya | Tidak | Tidak | Tidak didukung |
Menghapus indeks sekunder | Ya | Tidak | Ya | Tidak berlaku |
Ganti nama indeks sekunder | Ya | Tidak | Ya | Tidak berlaku |
Menambahkan indeks teks penuh (FULLTEXT) | Tidak | Tidak Catatan Saat Anda menambahkan indeks teks penuh pertama ke tabel, operasi pembangunan ulang tabel tambahan dipicu jika tidak ada kolom FTS_DOC_ID yang ditentukan pengguna. | Tidak | Tidak didukung |
Menambahkan indeks spasial (SPATIAL) | Tidak | Tidak | Tidak | Tidak didukung |
Operasi kunci utama
PolarDB for MySQL 8.0.2
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Menambahkan kunci primer | Ya | Ya | Tidak | Didukung |
Menghapus kunci primer | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kunci primer asli dan menambahkan yang baru | Ya | Ya | Tidak | Didukung |
PolarDB for MySQL 8.0.1
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Menambahkan kunci primer | Ya | Ya | Tidak | Dukungan |
Menghapus kunci primer | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kunci primer asli dan menambahkan yang baru | Ya | Ya | Tidak | Didukung |
PolarDB for MySQL 5.7
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Menambahkan kunci primer | Ya | Ya | Tidak | Didukung |
Menghapus kunci primer | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kunci primer asli dan menambahkan yang baru | Ya | Ya | Tidak | Didukung |
PolarDB for MySQL 5.6
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Menambahkan kunci primer | Ya | Ya | Tidak | Tidak didukung |
Menghapus kunci primer | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kunci primer asli dan menambahkan yang baru | Ya | Ya | Tidak | Tidak didukung |
Dalam skenario berikut, DML konkuren hanya diizinkan ketika parameter kluster sql_mode mencakup STRICT_TRANS_TABLES atau STRICT_ALL_TABLES:
Menambahkan kunci primer
Menghapus kunci primer asli dan menambahkan yang baru
Operasi kolom
PolarDB for MySQL 8.0.2
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kolom | Ya | Tidak¹ | Ya¹ | Didukung¹ |
Hapus kolom | Ya | Ya | Tidak | Didukung |
Mengganti nama kolom | Ya | Tidak | Ya | Tidak berlaku |
Atur ulang kolom | Ya | Ya | Tidak | Didukung |
Menetapkan nilai default kolom | Ya | Tidak | Ya | Tidak berlaku |
Ubah komentar kolom | Ya | Tidak | Ya | Tidak berlaku |
Memodifikasi tipe kolom | Tidak | Ya | Tidak | Tidak didukung |
Memperpanjang panjang VARCHAR | Ya² | Tidak | Ya | Tidak berlaku |
Ubah set karakter dari UTF8mb3 ke UTF8mb4 | Tidak | Tidak³ | Ya³ | Tidak didukung |
Menghapus nilai default kolom | Ya | Tidak | Ya | Tidak berlaku |
Ubah nilai auto-increment | Ya | Tidak | Ya | Tidak berlaku |
Mengubah kolom menjadi NULL | Ya | Ya | Tidak | Dukungan |
Mengubah kolom menjadi NOT NULL | Tidak | Ya | Tidak | Tidak didukung |
Memodifikasi definisi kolom ENUM/SET | Ya | Tidak | Ya⁴ | Tidak berlaku |
Fitur instant ADD COLUMN hanya mendukung penambahan kolom di akhir tabel. Jika tabel tidak memiliki kunci primer yang ditentukan, Anda harus mengatur parameter
implicit_primary_keyke OFF untuk mencegah operasi penambahan kolom gagal karena adanya kolom kunci primer implisit di akhir tabel. Fitur instant ADD COLUMN tidak didukung pada tabel terkompresi (ROW_FORMAT=COMPRESSED), tabel dengan indeks teks penuh, atau tabel sementara. Jika kluster tidak mendukung fitur instant ADD COLUMN, sistem akan menambahkan kolom menggunakan algoritma INPLACE, yang memicu pembangunan ulang tabel. Selama proses tersebut, operasi baca dan tulis konkuren diizinkan. Anda juga dapat menggunakan fitur DDL paralel untuk mempercepat penambahan kolom.Saat memperpanjang panjang kolom VARCHAR, jumlah byte yang diperlukan untuk menyimpan panjang harus tetap sama agar ekstensi kolom cepat didukung. Secara khusus, kolom VARCHAR berukuran 0 hingga 255 byte memerlukan satu byte untuk menyimpan panjangnya, sedangkan kolom VARCHAR berukuran 256 byte atau lebih memerlukan dua byte. Pernyataan ALTER TABLE hanya dapat memodifikasi metadata jika ekstensi panjang kolom VARCHAR berada dalam rentang tertentu, seperti dari 0 hingga 255 byte atau dari 256 byte ke ukuran yang lebih besar. Jika Anda mengubah panjang kolom VARCHAR dari kurang dari 256 byte menjadi 256 byte atau lebih, PolarDB secara default menggunakan DDL Copy, yang mengunci tabel selama durasi penuh. Operasi tulis DML tidak didukung, tetapi operasi baca didukung.
Jika Anda tidak yakin apakah rentang modifikasi kolom VARCHAR Anda memenuhi kondisi di atas, Anda dapat menggunakan
ALGORITHM=INPLACEuntuk menentukan bahwa algoritma INPLACE digunakan untuk operasi DDL saat ini. Jika ekstensi kolom cepat tidak didukung, kesalahan akan segera dilaporkan. Contoh:ALTER TABLE table_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256); ERROR 0A000: ALGORITHM=INPLACE tidak didukung. Alasan: Tidak dapat mengubah tipe kolom INPLACE. Coba ALGORITHM=COPY.VARCHAR adalah kelas penyimpanan panjang variabel. Hanya panjang aktual yang disimpan di disk. Oleh karena itu, saat menggunakan kolom VARCHAR, pertimbangkan untuk mengatur panjang maksimum menjadi 256 byte atau lebih guna menghindari kebutuhan menggunakan algoritma COPY saat memperpanjang kolom.
Jika kondisi berikut terpenuhi, mengubah set karakter kolom dari UTF8mb3 ke UTF8mb4 hanya memodifikasi metadata tanpa mengubah data. Jika tidak, algoritma COPY digunakan untuk membangun ulang tabel. Selama pembangunan ulang, tabel dikunci selama durasi penuh; Anda hanya dapat membaca dari tabel target, sedangkan operasi tulis diblokir.
Tipe kolom adalah CHAR, VARCHAR, ENUM, atau TEXT.
Tidak ada indeks pada kolom yang dimodifikasi.
Sebelum dan sesudah konversi set karakter, panjang penyimpanan maksimum kolom adalah kurang dari 256 byte atau lebih dari 255 byte.
Anda dapat menentukan ALGORITHM=INPLACE untuk memaksa penggunaan metode tanpa pembangunan ulang dalam mengeksekusi pernyataan DDL. Jika algoritma COPY diperlukan, kesalahan akan segera dikembalikan. Contoh:
ALTER TABLE test modify column b char(1) CHARACTER SET utf8mb4 default null,algorithm = inplace; ERROR 1846 (0A000): ALGORITHM=INPLACE tidak didukung. Alasan: Tidak dapat mengubah tipe kolom INPLACE. Coba ALGORITHM=COPY.Anda hanya dapat memodifikasi metadata tanpa membangun ulang seluruh tabel jika ukuran penyimpanan tipe data tidak berubah dan Anda menambahkan elemen di akhir ENUM atau SET. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel.
PolarDB for MySQL 8.0.1
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kolom | Ya | Tidak¹ | Ya¹ | Didukung¹ |
Hapus kolom | Ya | Ya | Tidak | Dukungan |
Mengganti nama kolom | Ya | Tidak | Ya | Tidak berlaku |
Atur ulang kolom | Ya | Ya | Tidak | Didukung |
Menetapkan nilai default kolom | Ya | Tidak | Ya | Tidak berlaku |
Ubah komentar kolom | Ya | Tidak | Ya | Tidak berlaku |
Memodifikasi tipe kolom | Tidak | Ya | Tidak | Tidak didukung |
Memperpanjang panjang VARCHAR | Ya² | Tidak | Ya | Tidak berlaku |
Ubah set karakter dari UTF8mb3 ke UTF8mb4 | Tidak | Tidak³ | Ya³ | Tidak didukung |
Menghapus nilai default kolom | Ya | Tidak | Ya | Tidak berlaku |
Ubah nilai auto-increment | Ya | Tidak | Ya | Tidak berlaku |
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 | Ya⁴ | Tidak berlaku |
Fitur instant add column hanya mendukung penambahan kolom di akhir tabel. Jika tabel tidak memiliki kunci primer, Anda harus mengatur parameter
implicit_primary_keyke OFF untuk mencegah operasi penambahan kolom gagal karena adanya kolom kunci primer implisit di akhir tabel. Fitur instant add column tidak didukung pada tabel terkompresi (ROW_FORMAT=COMPRESSED), tabel dengan indeks teks penuh, atau tabel sementara. Jika kluster tidak mendukung fitur instant add column, sistem akan menambahkan kolom menggunakan algoritma INPLACE, yang memicu pembangunan ulang tabel penuh. Selama pembangunan ulang, operasi baca dan tulis konkuren diizinkan. Anda juga dapat menggunakan fitur DDL paralel untuk mempercepat operasi.Selain itu, jika tabel berisi indeks penyimpanan kolom, fitur instant add column tidak didukung karena penambahan kolom memerlukan pembangunan ulang indeks penyimpanan kolom. Anda dapat mengatur parameter
loose_imci_enable_add_column_instant_ddlke ON untuk mengaktifkan fitur instant add column. Dalam hal ini, PolarDB secara asinkron membangun ulang indeks penyimpanan kolom di latar belakang. Selama pembangunan ulang, indeks penyimpanan kolom sementara tidak tersedia. Untuk informasi selengkapnya, lihat Sintaks DDL untuk menambahkan atau menghapus indeks penyimpanan kolom secara dinamis.Saat memperpanjang panjang kolom VARCHAR, jumlah byte yang diperlukan untuk menyimpan panjang harus tetap sama agar ekstensi kolom cepat didukung. Secara khusus, kolom VARCHAR berukuran 0 hingga 255 byte memerlukan satu byte untuk menyimpan panjangnya, sedangkan kolom VARCHAR berukuran 256 byte atau lebih memerlukan dua byte. Pernyataan ALTER TABLE hanya dapat memodifikasi metadata jika ekstensi panjang kolom VARCHAR berada dalam rentang tertentu, seperti dari 0 hingga 255 byte atau dari 256 byte ke ukuran yang lebih besar. Jika Anda mengubah panjang kolom VARCHAR dari kurang dari 256 byte menjadi 256 byte atau lebih, PolarDB secara default menggunakan DDL Copy, yang mengunci tabel selama durasi penuh. Operasi tulis DML tidak didukung, tetapi operasi baca didukung.
Jika Anda tidak yakin apakah rentang modifikasi kolom VARCHAR Anda memenuhi kondisi di atas, Anda dapat menggunakan
ALGORITHM=INPLACEuntuk menentukan bahwa algoritma INPLACE digunakan untuk operasi DDL saat ini. Jika ekstensi kolom cepat tidak didukung, kesalahan akan segera dilaporkan. Contoh:ALTER TABLE table_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256); ERROR 0A000: ALGORITHM=INPLACE tidak didukung. Alasan: Tidak dapat mengubah tipe kolom INPLACE. Coba ALGORITHM=COPY.VARCHAR adalah kelas penyimpanan panjang variabel. Hanya panjang aktual yang disimpan di disk. Oleh karena itu, saat menggunakan kolom VARCHAR, pertimbangkan untuk mengatur panjang maksimum menjadi 256 byte atau lebih guna menghindari kebutuhan menggunakan algoritma COPY saat memperpanjang kolom.
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 digunakan untuk membangun ulang tabel. Selama pembangunan ulang, tabel dikunci selama durasi penuh; Anda hanya dapat membaca dari tabel target, sedangkan operasi tulis diblokir.Tipe kolom adalah CHAR, VARCHAR, ENUM, atau TEXT.
Tidak ada indeks pada kolom yang dimodifikasi.
Sebelum dan sesudah konversi set karakter, panjang penyimpanan maksimum kolom adalah kurang dari 256 byte atau lebih dari 255 byte.
Anda dapat menentukan ALGORITHM=INPLACE untuk memaksa penggunaan metode tanpa pembangunan ulang dalam mengeksekusi pernyataan DDL. Jika algoritma COPY diperlukan, kesalahan akan segera dikembalikan. Contoh:
ALTER TABLE test modify column b char(1) CHARACTER SET utf8mb4 default null,algorithm = inplace; ERROR 1846 (0A000): ALGORITHM=INPLACE tidak didukung. Alasan: Tidak dapat mengubah tipe kolom INPLACE. Coba ALGORITHM=COPY.Anda hanya dapat memodifikasi metadata tanpa membangun ulang seluruh tabel jika ukuran penyimpanan tipe data tidak berubah dan Anda menambahkan elemen di akhir ENUM atau SET. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel.
PolarDB for MySQL 5.7
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kolom | Ya | Tidak¹ | Ya¹ | Didukung¹ |
Hapus kolom | Ya | Ya | Tidak | Didukung |
Mengganti nama kolom | Ya | Tidak | Ya | Tidak berlaku |
Atur ulang kolom | Ya | Ya | Tidak | Didukung |
Menetapkan nilai default kolom | Ya | Tidak | Ya | Tidak berlaku |
Ubah komentar kolom | Ya | Tidak | Ya | Tidak berlaku |
Memodifikasi tipe kolom | Tidak | Ya | Tidak | Tidak didukung |
Memperpanjang panjang VARCHAR | Ya² | Tidak | Ya | Tidak berlaku |
Ubah set karakter dari UTF8mb3 menjadi UTF8mb4 | Tidak | Ya | Tidak | Tidak didukung |
Menghapus nilai default kolom | Ya | Tidak | Ya | Tidak berlaku |
Ubah nilai auto-increment | Ya | Tidak | Ya | Tidak berlaku |
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 | Ya³ | Tidak berlaku |
Untuk mengaktifkan fitur instant add column, Anda harus mengatur parameter
loose_innodb_support_instant_add_columnke ON. Fitur ini hanya mendukung penambahan kolom di akhir tabel. Jika tabel tidak memiliki kunci primer, Anda harus mengatur parameterimplicit_primary_keyke OFF untuk mencegah operasi gagal karena adanya kolom kunci primer implisit di akhir tabel. Fitur instant ADD COLUMN juga tidak didukung pada tabel terkompresi (ROW_FORMAT=COMPRESSED), tabel dengan indeks teks penuh, atau tabel sementara. Jika kluster tidak mendukung fitur instant ADD COLUMN, sistem akan menambahkan kolom menggunakan algoritma INPLACE. Proses ini memicu pembangunan ulang tabel dan mengizinkan operasi baca dan tulis konkuren. Anda juga dapat menggunakan fitur DDL paralel untuk mempercepat operasi.Saat memperpanjang panjang kolom VARCHAR, jumlah byte yang diperlukan untuk menyimpan panjang harus tetap sama agar ekstensi kolom cepat didukung. Secara khusus, kolom VARCHAR berukuran 0 hingga 255 byte memerlukan satu byte untuk menyimpan panjangnya, sedangkan kolom VARCHAR berukuran 256 byte atau lebih memerlukan dua byte. Pernyataan ALTER TABLE hanya dapat memodifikasi metadata jika ekstensi panjang kolom VARCHAR berada dalam rentang tertentu, seperti dari 0 hingga 255 byte atau dari 256 byte ke ukuran yang lebih besar. Jika Anda mengubah panjang kolom VARCHAR dari kurang dari 256 byte menjadi 256 byte atau lebih, PolarDB secara default menggunakan DDL Copy, yang mengunci tabel selama durasi penuh. Operasi tulis DML tidak didukung, tetapi operasi baca didukung.
Jika Anda tidak yakin apakah rentang modifikasi kolom VARCHAR Anda memenuhi kondisi di atas, Anda dapat menggunakan
ALGORITHM=INPLACEuntuk menentukan bahwa algoritma INPLACE digunakan untuk operasi DDL saat ini. Jika ekstensi kolom cepat tidak didukung, kesalahan akan segera dilaporkan. Contoh:ALTER TABLE table_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256); ERROR 0A000: ALGORITHM=INPLACE tidak didukung. Alasan: Tidak dapat mengubah tipe kolom INPLACE. Coba ALGORITHM=COPY.VARCHAR adalah kelas penyimpanan panjang variabel. Hanya panjang aktual yang disimpan di disk. Oleh karena itu, saat menggunakan kolom VARCHAR, pertimbangkan untuk mengatur panjang maksimum menjadi 256 byte atau lebih guna menghindari kebutuhan menggunakan algoritma COPY saat memperpanjang kolom.
Anda hanya dapat memodifikasi metadata tanpa membangun ulang seluruh tabel jika ukuran penyimpanan tipe data tidak berubah dan Anda menambahkan elemen di akhir ENUM atau SET. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel.
PolarDB for MySQL 5.6
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kolom | Ya | Tidak¹ | Ya¹ | Tidak didukung |
Hapus kolom | Ya | Ya | Tidak | Tidak didukung |
Mengganti nama kolom | Ya | Tidak | Ya | Tidak berlaku |
Atur ulang kolom | Ya | Ya | Tidak | Tidak didukung |
Menetapkan nilai default kolom | Ya | Tidak | Ya | Tidak berlaku |
Ubah komentar kolom | Ya | Tidak | Ya | Tidak berlaku |
Memodifikasi tipe kolom | Tidak | Ya | Tidak | Tidak didukung |
Memperpanjang panjang VARCHAR | Tidak | Ya | Tidak | Tidak didukung |
Ubah set karakter dari UTF8mb3 ke UTF8mb4 | Tidak | Ya | Tidak | Tidak didukung |
Menghapus nilai default kolom | Ya | Tidak | Ya | Tidak berlaku |
Ubah nilai auto-increment | Ya | Tidak | Ya | Tidak berlaku |
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 | Ya² | Tidak berlaku |
Untuk mengaktifkan fitur instant ADD COLUMN, Anda harus mengatur parameter
loose_innodb_support_instant_add_columnke ON. Anda hanya dapat menambahkan kolom di akhir tabel. Jika tabel tidak memiliki kunci primer yang ditentukan, Anda harus mengatur parameterimplicit_primary_keyke OFF untuk mencegah operasi penambahan kolom gagal karena adanya kolom kunci primer implisit di akhir tabel. Selain itu, fitur instant ADD COLUMN tidak didukung pada tabel terkompresi (ROW_FORMAT=COMPRESSED), tabel dengan indeks teks penuh, tabel sementara, atau tabel partisi. Jika kluster tidak mendukung fitur instant ADD COLUMN, sistem akan menambahkan kolom menggunakan algoritma INPLACE, yang memicu pembangunan ulang tabel. Selama proses tersebut, operasi baca dan tulis konkuren diizinkan.CatatanFitur instant add column untuk PolarDB for MySQL 5.6 saat ini berada dalam rilis canary. Untuk menggunakan fitur ini, buka Pusat Kuota, temukan nama kuota menggunakan Quota ID
polardb_mysql_iac_56, lalu klik Apply di kolom Tindakan untuk mengaktifkannya.Anda hanya dapat memodifikasi metadata tanpa membangun ulang seluruh tabel jika ukuran penyimpanan tipe data tidak berubah dan Anda menambahkan elemen di akhir ENUM atau SET. Jika tidak, algoritma COPY diperlukan untuk membangun ulang tabel.
Operasi tabel
PolarDB for MySQL 8.0.2
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Memodifikasi ROW_FORMAT | Ya | Ya | Tidak | Dukungan |
Memodifikasi KEY_BLOCK_SIZE | Ya | Ya | Tidak | Didukung |
Menetapkan informasi statistik persisten | Ya | Tidak | Ya | Tidak berlaku |
Mendeklarasikan set karakter | Ya | Tidak | Ya | Tidak berlaku |
Mengonversi set karakter | Tidak | Ya | Tidak | Tidak didukung |
Optimalkan tabel | Ya | Ya Catatan Saat Anda menggunakan | Tidak | Didukung |
Bangun ulang tabel | Ya | Ya | Tidak | Didukung |
Ganti nama tabel | Ya | Tidak | Ya | Tidak berlaku |
Ubah komentar tabel | Ya | Tidak | Ya | Tidak berlaku |
PolarDB for MySQL 8.0.1
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Memodifikasi ROW_FORMAT | Ya | Ya | Tidak | Didukung |
Memodifikasi KEY_BLOCK_SIZE | Ya | Ya | Tidak | Didukung |
Menetapkan informasi statistik persisten | Ya | Tidak | Ya | Tidak berlaku |
Mendeklarasikan set karakter | Ya | Tidak | Ya | Tidak berlaku |
Mengonversi set karakter | Tidak | Ya | Tidak | Tidak didukung |
Optimalkan tabel | Ya | Ya Catatan Saat Anda menggunakan | Tidak | Didukung |
Bangun ulang tabel | Ya | Ya | Tidak | Didukung |
Ganti nama tabel | Ya | Tidak | Ya | Tidak berlaku |
Ubah komentar tabel | Ya | Tidak | Ya | Tidak berlaku |
PolarDB for MySQL 5.7
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Memodifikasi ROW_FORMAT | Ya | Ya | Tidak | Didukung |
Memodifikasi KEY_BLOCK_SIZE | Ya | Ya | Tidak | Dukungan |
Menetapkan informasi statistik persisten | Ya | Tidak | Ya | Tidak berlaku |
Mendeklarasikan set karakter | Ya | Tidak | Ya | Tidak berlaku |
Mengonversi set karakter | Tidak | Ya | Tidak | Tidak didukung |
Mengoptimalkan tabel | Ya | Ya Catatan Saat Anda menggunakan | Tidak | Didukung |
Membangun ulang sebuah tabel | Ya | Ya | Tidak | Didukung |
Mengganti nama tabel | Ya | Tidak | Ya | Tidak berlaku |
Ubah komentar tabel | Ya | Tidak | Ya | Tidak berlaku |
PolarDB for MySQL 5.6
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Memodifikasi ROW_FORMAT | Ya | Ya | Tidak | Tidak didukung |
Memodifikasi KEY_BLOCK_SIZE | Ya | Ya | Tidak | Tidak didukung |
Menetapkan informasi statistik persisten | Ya | Tidak | Ya | Tidak berlaku |
Mendeklarasikan set karakter | Ya | Tidak | Ya | Tidak berlaku |
Mengonversi set karakter | Tidak | Ya | Tidak | Tidak didukung |
Optimalkan tabel | Ya | Ya Catatan Saat Anda menggunakan | Tidak | Tidak didukung |
Bangun ulang tabel | Ya | Ya | Tidak | Tidak didukung |
Ganti nama tabel | Ya | Tidak | Ya | Tidak berlaku |
Ubah komentar tabel | Ya | Tidak | Ya | Tidak berlaku |
Operasi kolom yang dihasilkan
PolarDB for MySQL 8.0.2
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kolom STORED | Tidak Catatan Karena penambahan ekspresi Kolom Tersimpan melibatkan lapisan SQL/Server, DDL Online tidak didukung saat menambahkan Kolom Tersimpan. | Ya | Tidak | Tidak didukung |
Mengubah urutan kolom STORED | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kolom STORED | Ya | Ya | Tidak | Didukung |
Tambahkan kolom VIRTUAL | Ya | Tidak | Ya | Tidak berlaku |
Mengubah urutan kolom VIRTUAL | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kolom VIRTUAL | Ya | Tidak | Ya | Tidak berlaku |
PolarDB for MySQL 8.0.1
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kolom STORED | Tidak Catatan Karena penambahan ekspresi Kolom Tersimpan melibatkan lapisan SQL/Server, DDL Online tidak didukung saat menambahkan Kolom Tersimpan. | Ya | Tidak | Tidak didukung |
Mengubah urutan kolom STORED | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kolom STORED | Ya | Ya | Tidak | Didukung |
Tambahkan kolom VIRTUAL | Ya | Tidak | Ya | Tidak berlaku |
Mengubah urutan kolom VIRTUAL | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kolom VIRTUAL | Ya | Tidak | Ya | Tidak berlaku |
PolarDB for MySQL 5.7
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kolom STORED | Tidak Catatan Karena penambahan ekspresi Kolom Tersimpan melibatkan lapisan SQL/Server, DDL Online tidak didukung saat menambahkan Kolom Tersimpan. | Ya | Tidak | Tidak didukung |
Mengubah urutan kolom STORED | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kolom STORED | Ya | Ya | Tidak | Didukung |
Tambahkan kolom VIRTUAL | Ya | Tidak | Ya | Tidak berlaku |
Mengubah urutan kolom VIRTUAL | Tidak | Ya | Tidak | Tidak didukung |
Menghapus kolom VIRTUAL | Ya | Tidak | Ya | Tidak berlaku |
PolarDB for MySQL 5.6
PolarDB for MySQL 5.6 tidak mendukung fitur Kolom Terhasil.
Operasi kunci asing
PolarDB for MySQL 8.0.2
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kunci asing | Ya¹ | Tidak¹ | Ya¹ | Tidak berlaku |
Menghapus kunci asing | Ya¹ | Tidak¹ | Ya¹ | Tidak berlaku |
PolarDB for MySQL 8.0.1
Operasi | Mengizinkan DML konkuren | Memperbarui tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kunci asing | Ya¹ | Tidak¹ | Ya¹ | Tidak berlaku |
Menghapus kunci asing | Ya¹ | Tidak¹ | Ya¹ | Tidak berlaku |
PolarDB for MySQL 5.7
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kunci asing | Ya¹ | Tidak¹ | Ya¹ | Tidak berlaku |
Menghapus kunci asing | Ya¹ | Tidak¹ | Ya¹ | Tidak berlaku |
PolarDB for MySQL 5.6
Operasi | Mengizinkan DML konkuren | Memperbarui tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan kunci asing | Ya¹ | Tidak¹ | Ya¹ | Tidak berlaku |
Menghapus kunci asing | Ya¹ | Tidak¹ | Ya¹ | Tidak berlaku |
DDL INPLACE hanya didukung ketika foreign_key_checks dinonaktifkan dan hanya metadata yang dimodifikasi. Jika tidak, hanya DDL COPY yang didukung, dan tabel dikunci selama durasi penuh.
Operasi tabel partisi
PolarDB for MySQL 8.0.2
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Tambahkan partisi (ADD) | Ya¹ | Nomor² | Ya | Tidak didukung |
Menghapus partisi (DROP) | Ya¹ | Tidak² | 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 |
Mengatur ulang partisi (REORGANIZE) | Ya¹ | No. 7 | Tidak | Tidak didukung |
Menukar partisi (EXCHANGE) | Ya¹ | Tidak | Ya | Tidak didukung |
Menganalisis partisi (ANALYZE) | Ya | Tidak | Tidak⁸ | Tidak didukung |
Memeriksa partisi (CHECK) | Ya | Tidak | Nomor⁹ | Tidak didukung |
Mengoptimalkan partisi (OPTIMIZE) | Ya⁴ | Ya⁴ | Tidak | Didukung⁴ |
Membangun ulang partisi (REBUILD) | Ya¹ | Tidak⁷ | Tidak | Tidak didukung |
Memperbaiki partisi (REPAIR) | Ya | Tidak¹⁰ | Tidak | Tidak didukung |
Mengonversi tabel menjadi tabel partisi | Tidak | Ya | Ya⁵ | Tidak didukung |
Mengonversi tabel partisi menjadi tabel standar | Tidak | Ya | Tidak | Tidak didukung |
Buat indeks parsial | Ya | Tidak⁶ | Tidak | Didukung |
Kunci metadata tingkat partisi (MDL) memastikan bahwa setelah Anda mengatur parameter
loose_partition_level_mdl_enabledke true, operasi DDL tidak memengaruhi DML pada partisi yang tidak terpengaruh. Untuk informasi selengkapnya, lihat Pemeliharaan Partisi Online.Menambahkan atau menghapus partisi untuk tabel partisi RANGE dan LIST tidak memerlukan pembangunan ulang tabel. Menambahkan partisi ke tabel partisi HASH dan KEY memerlukan pembangunan ulang tabel. Menghapus partisi dari tabel partisi HASH dan KEY tidak didukung.
Hanya partisi HASH dan KEY yang didukung.
Saat Anda mengeksekusi operasi OPTIMIZE PARTITION pada tabel yang menggunakan engine InnoDB, seluruh tabel partisi dibangun ulang. Operasi baca dan tulis diizinkan pada tabel target selama pembangunan ulang. Dalam kasus ini, Anda dapat mengatur parameter
innodb_parallel_build_primary_indexke ON untuk menggunakan fitur DDL paralel guna mempercepat pembangunan ulang.Konversi instan hanya mendukung konversi cepat tabel standar menjadi tabel partisi rentang.
PolarDB for MySQL mendukung pembuatan dan penghapusan indeks tingkat partisi. Untuk informasi selengkapnya, lihat Indeks Parsial.
Mengatur ulang atau membangun ulang partisi hanya membangun ulang partisi yang ditentukan yang memerlukan redistribusi dan pembangunan ulang data. Partisi lain tidak terpengaruh.
Menganalisis partisi hanya memodifikasi informasi statistik, bukan 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 | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Menambahkan partisi (ADD) | Tidak | Tidak¹ | Ya | Tidak didukung |
Menghapus partisi (DROP) | Tidak | No² | 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 |
Mengatur ulang partisi (REORGANIZE) | Tidak | Tidak⁴ | Tidak | Tidak didukung |
Menukar partisi (EXCHANGE) | Ya | Ya | Ya | Tidak didukung |
Menganalisis partisi (ANALYZE) | Ya | Ya | Tidak⁵ | Tidak didukung |
Memeriksa partisi (CHECK) | Ya | Tidak | No. 6 | Tidak didukung |
Mengoptimalkan partisi (OPTIMIZE) | Ya³ | Ya³ | Tidak | Didukung³ |
Membangun ulang partisi (REBUILD) | Tidak | Tidak⁴ | Tidak | Tidak didukung |
Memperbaiki partisi (REPAIR) | Ya | Tidak⁴ | Tidak | Tidak didukung |
Mengonversi tabel menjadi tabel partisi | Tidak | Ya | Tidak | Tidak didukung |
Mengonversi tabel partisi menjadi tabel standar | Tidak | Ya | Tidak | Tidak didukung |
Menambahkan partisi ke tabel partisi RANGE dan LIST tidak memerlukan pembangunan ulang tabel. Menambahkan partisi ke tabel partisi HASH dan KEY memerlukan pembangunan ulang tabel.
Menghapus partisi dari tabel partisi HASH dan KEY tidak didukung.
Saat Anda mengeksekusi operasi OPTIMIZE PARTITION pada tabel yang menggunakan engine InnoDB, seluruh tabel partisi dibangun ulang. Operasi baca dan tulis diizinkan pada tabel target selama pembangunan ulang. Anda dapat mengatur parameter
innodb_parallel_build_primary_indexke ON untuk menggunakan fitur DDL paralel guna mempercepat pembangunan ulang.Mengatur ulang, membangun ulang, dan memperbaiki partisi hanya membangun ulang partisi yang ditentukan yang memerlukan pengaturan ulang, pembangunan ulang, atau perbaikan. Partisi lain tidak terpengaruh.
Menganalisis partisi hanya memodifikasi informasi statistik, bukan metadata atau data tabel.
Memeriksa partisi tidak memodifikasi metadata atau data.
PolarDB for MySQL 5.7
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Menambahkan partisi (ADD) | Tidak | Tidak¹ | Ya | Tidak didukung |
Menghapus partisi (DROP) | Tidak | Tidak¹ | 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 |
Mengatur ulang partisi (REORGANIZE) | Tidak | Tidak² | Tidak | Tidak didukung |
Menukar partisi | Ya | Tidak | Ya | Tidak didukung |
Menganalisis partisi (ANALYZE) | Ya | Tidak | Tidak³ | Tidak didukung |
Memeriksa partisi (CHECK) | Ya | Tidak | Tidak⁴ | Tidak didukung |
Mengoptimalkan partisi (OPTIMIZE) | Tidak | Ya | Tidak | Tidak didukung |
Membangun ulang partisi (REBUILD) | Tidak | Tidak² | Tidak | Tidak didukung |
Memperbaiki partisi (REPAIR) | Ya | Nomor² | Tidak | Tidak didukung |
Mengonversi tabel menjadi tabel partisi | Tidak | Ya | Tidak | Tidak didukung |
Mengonversi tabel partisi menjadi tabel standar | Tidak | Ya | Tidak | Tidak didukung |
Menambahkan atau menghapus partisi untuk tabel partisi RANGE dan LIST tidak memerlukan pembangunan ulang tabel. Menambahkan partisi ke tabel partisi HASH dan KEY memerlukan pembangunan ulang tabel. Menghapus partisi dari tabel partisi HASH dan KEY tidak didukung.
Mengatur ulang, membangun ulang, dan memperbaiki partisi hanya membangun ulang partisi yang ditentukan yang memerlukan pengaturan ulang, pembangunan ulang, atau perbaikan. Partisi lain tidak terpengaruh.
Menganalisis partisi hanya memodifikasi informasi statistik, bukan metadata atau data tabel.
Memeriksa partisi tidak memodifikasi metadata atau data.
PolarDB for MySQL 5.6
Operasi | Mengizinkan DML konkuren | Membangun ulang tabel | Hanya memodifikasi metadata | Mendukung DDL paralel |
Menambahkan partisi (ADD) | Tidak | Tidak¹ | Ya | Tidak didukung |
Menghapus partisi (DROP) | Tidak | Tidak¹ | 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 |
Mengatur ulang partisi (REORGANIZE) | Tidak | Tidak² | Tidak | Tidak didukung |
Menukar partisi (EXCHANGE) | Ya | Tidak | Ya | Tidak didukung |
Menganalisis partisi (ANALYZE) | Ya | Tidak | Tidak³ | Tidak didukung |
Memeriksa partisi (CHECK) | Ya | Tidak | Tidak⁴ | Tidak didukung |
Mengoptimalkan partisi (OPTIMIZE) | Tidak | Ya | Tidak | Tidak didukung |
Membangun ulang partisi (REBUILD) | Tidak | No² | Tidak | Tidak didukung |
Memperbaiki partisi (REPAIR) | Ya | Tidak² | Tidak | Tidak didukung |
Mengonversi tabel menjadi tabel partisi | Tidak | Ya | Tidak | Tidak didukung |
Mengonversi tabel partisi menjadi tabel standar | Tidak | Ya | Tidak | Tidak didukung |
Menambahkan atau menghapus partisi untuk tabel partisi RANGE dan LIST tidak memerlukan pembangunan ulang tabel. Menambahkan partisi ke tabel partisi HASH dan KEY memerlukan pembangunan ulang tabel. Menghapus partisi dari tabel partisi HASH dan KEY tidak didukung.
Mengatur ulang, membangun ulang, dan memperbaiki partisi hanya membangun ulang partisi yang ditentukan yang memerlukan pengaturan ulang, pembangunan ulang, atau perbaikan. Partisi lain tidak terpengaruh.
Menganalisis partisi hanya memodifikasi informasi statistik, bukan metadata atau data tabel.
Memeriksa partisi tidak memodifikasi metadata atau data.
Metode eksekusi DDL
Saat PolarDB for MySQL menggunakan algoritma INPLACE atau INSTANT untuk mengeksekusi operasi DDL, kami merekomendasikan Anda menggunakan metode kernel (Online DDL). Metode ini cepat dan stabil.
Saat PolarDB for MySQL menggunakan algoritma COPY untuk mengeksekusi operasi DDL, tabel dikunci selama durasi penuh. Operasi baca dan tulis pada tabel target diblokir selama eksekusi. Dalam kasus ini, Anda dapat menggunakan DDL bebas penguncian di DMS atau alat pihak ketiga seperti gh-ost untuk mengeksekusi pernyataan DDL. Alat pihak ketiga ini mengizinkan operasi baca dan tulis selama eksekusi DDL, tetapi biasanya lebih lambat. Dalam skenario tabel besar atau konkurensi tinggi, operasi mungkin gagal karena data inkremental yang berlebihan.
Tabel berikut membandingkan perbedaan antara penggunaan metode kernel dan alat pihak ketiga untuk mengeksekusi operasi DDL:
Metode eksekusi | Mengizinkan baca dan tulis konkuren | Kecepatan eksekusi | Apakah pencatatan biner diperlukan? | Akselerasi paralel |
Kernel (Online DDL) | Ya | Cepat | Tidak | Didukung |
Alat pihak ketiga (seperti DDL bebas penguncian di DMS dan gh-ost) | Ya | Lambat | Ya | Tidak didukung |
Bahkan saat Anda menggunakan alat pihak ketiga untuk melakukan operasi DDL, kunci MDL-X diperoleh selama pergantian tabel (modifikasi metadata), yang sementara mengunci tabel. Untuk mengatasi masalah penguncian tabel ini, Anda dapat mengaktifkan fitur DDL nonblocking atau fitur DDL preemptif, berdasarkan kebutuhan Anda.
Hubungi kami
Jika Anda memiliki pertanyaan tentang operasi DDL, silakan hubungi dukungan teknis.