All Products
Search
Document Center

PolarDB:DDL untuk data dingin

Last Updated:Mar 28, 2026

Saat menjalankan pernyataan DDL pada tabel data dingin yang disimpan di Object Storage Service (OSS), PolarDB for MySQL secara otomatis memilih algoritma eksekusi yang paling efisien. Dokumen ini menjelaskan dua algoritma yang didukung—INSTANT dan COPY—menguraikan persyaratan OSS META untuk DDL INSTANT, serta mencantumkan operasi yang menggunakan masing-masing algoritma sehingga Anda dapat merencanakan perubahan DDL tanpa mengganggu beban kerja Anda.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Memiliki kluster PolarDB for MySQL yang menjalankan MySQL 8.0.2 dengan versi revisi 8.0.2.2.23 atau lebih baru.

  • Mengaktifkan arsip data dingin pada kluster tersebut. Lihat Aktifkan arsip data dingin.

  • Memiliki koneksi aktif ke kluster tersebut. Lihat Hubungkan ke kluster.

  • Data dingin dalam format Comma-Separated Values (CSV) atau Optimized Row Columnar (ORC)

Cara kerja

PolarDB for MySQL mendukung dua algoritma eksekusi DDL untuk data dingin:

  • Algoritma INSTANT: Hanya memodifikasi metadata di kamus data—data yang sudah ada tidak dimodifikasi, dicopy, atau dibangun ulang. Operasi selesai dalam hitungan detik, terlepas dari ukuran tabel. Ini merupakan opsi default; PolarDB for MySQL menerapkannya secara otomatis bila didukung.

  • COPY algorithm: Menyalin seluruh data tabel ke tabel baru. Selama proses penyalinan, tabel asli dikunci dengan kunci SHARED_NO_WRITE (SNW): pembacaan diperbolehkan, tetapi penulisan diblokir. Gunakan algoritma ini hanya jika INSTANT tidak berlaku.

Untuk menentukan algoritma secara eksplisit, gunakan klausa ALGORITHM dengan nilai DEFAULT, INSTANT, atau COPY. Jika algoritma yang ditentukan tidak mendukung operasi tersebut, sistem akan mengembalikan error.

Catatan

PolarDB for MySQL memilih INSTANT sebagai default dan hanya beralih ke COPY jika operasi memerlukan pembangunan ulang tabel.

Aktifkan OSS META untuk menggunakan DDL INSTANT

Tabel hanya mendukung DDL INSTANT jika OSS META diaktifkan. OSS META adalah lapisan metadata tingkat lanjut yang tersedia mulai revisi 8.0.2.2.23 dan seterusnya.

Periksa apakah OSS META diaktifkan

Jalankan SHOW CREATE TABLE. Jika OSS META=1 muncul dalam output, berarti OSS META telah diaktifkan.

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
1 row in set (0.00 sec)

Aktifkan OSS META untuk tabel baru

Atur parameter use_oss_meta ke ON. Pengaturan ini berlaku untuk ketiga skenario pengarsipan: tabel non-partisi InnoDB yang diarsipkan ke tabel eksternal OSS, tabel partisi InnoDB yang diarsipkan ke tabel eksternal OSS, dan tabel InnoDB yang diarsipkan ke partisi OSS.

Verifikasi bahwa parameter tersebut aktif:

show variables like "use_oss_meta";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| use_oss_meta  | ON    |
+---------------+-------+
1 row in set (0.03 sec)

Ketika use_oss_meta bernilai ON, tabel yang baru diarsipkan secara otomatis menyertakan penanda OSS META. Contoh berikut menunjukkan penanda tersebut muncul setelah pengarsipan tabel non-partisi dan tabel partisi:

alter table t engine = csv storage oss;
Query OK, 3 rows affected (2.13 sec)
Records: 3  Duplicates: 0  Warnings: 0

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
1 row in set (0.00 sec)


alter table t1 change partition p0 engine = orc;
Query OK, 0 rows affected (1.95 sec)
Records: 0  Duplicates: 0  Warnings: 0


show create table t1 \G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `order_time` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020223 OSS META=1 */ CONNECTION='default_oss_server'
/*!99990 800020205 PARTITION BY RANGE  COLUMNS(id)
(PARTITION p0 VALUES LESS THAN (10) ENGINE = ORC,
 PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB,
 PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB,
 PARTITION p4 VALUES LESS THAN (50) ENGINE = InnoDB,
 PARTITION p5 VALUES LESS THAN (60) ENGINE = InnoDB,
 PARTITION p6 VALUES LESS THAN (70) ENGINE = InnoDB,
 PARTITION p7 VALUES LESS THAN (80) ENGINE = InnoDB,
 PARTITION p8 VALUES LESS THAN (90) ENGINE = InnoDB,
 PARTITION p9 VALUES LESS THAN (100) ENGINE = InnoDB,
 PARTITION p10 VALUES LESS THAN (110) ENGINE = InnoDB) */
1 row in set (0.00 sec)

Aktifkan OSS META untuk tabel yang sudah ada

Jalankan REPAIR TABLE untuk menambahkan OSS META ke tabel yang sudah ada:

repair table t;
+--------+--------+----------+----------+
| Table  | Op     | Msg_type | Msg_text |
+--------+--------+----------+----------+
| test.t | repair | status   | OK       |
+--------+--------+----------+----------+
1 row in set (0.84 sec)

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
1 row in set (0.00 sec)
Penting

Selama eksekusi REPAIR TABLE, tabel dikunci oleh Kunci X. Anda tidak dapat melakukan kueri atau memodifikasi tabel tersebut. Waktu eksekusi meningkat seiring ukuran tabel.

Nonaktifkan OSS META

Jalankan ALTER TABLE ... DISABLE OSS META untuk menghapus penanda OSS META:

alter table t disable oss meta;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */
1 row in set (0.00 sec)
Catatan

Perubahan berlaku langsung tanpa perlu me-restart layanan database.

Operasi DDL yang didukung

Tabel-tabel berikut menunjukkan apakah masing-masing operasi menggunakan INSTANT (hanya metadata) atau COPY (pembangunan ulang tabel).

Operasi kolom

OperasiMembangun ulang tabelHanya memodifikasi metadata
Menambahkan kolomNo.¹Ya¹
Menghapus kolomYaTidak
Mengganti nama kolomTidakYa
Mengurutkan kolomYaTidak
Menentukan nilai default untuk kolomTidakYa
Memodifikasi komentar kolomTidakYa
Mengubah tipe kolomYaTidak
Memperpanjang panjang kolom VARCHARTidakYa
Mengubah set karakter kolom dari utf8mb3 ke utf8mb4No.²Ya²
Menghapus nilai default kolomTidakYa
Mengubah nilai auto-increment kolomTidakYa
Mengubah nilai kolom menjadi NULLYaTidak
Mengubah nilai kolom menjadi non-NULLYaTidak
Mengubah definisi kolom ENUM atau SETTidakYa³

Catatan 1 — Menambahkan kolom: Fitur Instant ADD COLUMN hanya menambahkan kolom di akhir tabel jika OSS META diaktifkan. Jika tabel tidak memiliki primary key, atur implicit_primary_key ke OFF untuk menghindari konflik dengan kolom primary key implisit yang dibuat otomatis. Jika kluster tidak mendukung Instant ADD COLUMN, gunakan algoritma COPY sebagai gantinya—pembangunan ulang tabel diperlukan, meskipun pembacaan bersamaan tetap diperbolehkan selama proses tersebut.

Catatan 2 — Mengubah utf8mb3 ke utf8mb4: Mengubah set karakter kolom dari utf8mb3 ke utf8mb4 hanya memodifikasi metadata jika ketiga kondisi berikut terpenuhi:

  • Tipe kolom adalah CHAR, VARCHAR, ENUM, atau TEXT.

  • Tidak ada Indeks yang dibuat pada kolom tersebut.

  • Panjang penyimpanan maksimum kolom (sebelum dan sesudah konversi) tetap berada di bawah 256 byte atau di atas 255 byte.

Jika salah satu kondisi tidak terpenuhi, algoritma COPY akan digunakan—tabel dikunci dan hanya pembacaan yang diperbolehkan selama pembangunan ulang. Untuk memaksa penggunaan INSTANT dan langsung menerima error jika tidak didukung:

ALTER TABLE test modify column b char(1) CHARACTER SET utf8mb4 default null,algorithm = INSTANT;
ERROR 1845 (0A000): ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.

Catatan 3 — Kolom ENUM atau SET: Perubahan hanya pada metadata berlaku jika elemen baru ditambahkan di akhir kolom ENUM atau SET dan ukuran penyimpanan tipe data tetap tidak berubah. Jika tidak, algoritma COPY digunakan dengan pembangunan ulang tabel penuh.

Operasi tabel

OperasiMembangun ulang tabelHanya memodifikasi metadata
Aktifkan METAYaTidak
Nonaktifkan METATidakYa
Deklarasikan set karakterTidakYa
Konversi set karakterYaTidak
Ganti nama tabelTidakYa¹
Modifikasi komentar tabelTidakYa

Catatan 1 — Ganti nama tabel: Saat mengganti nama tabel yang disimpan di OSS, file data OSS diganti namanya, bukan ditulis ulang. Kecepatan operasi sebanding dengan ukuran tabel dan sedikit lebih lambat dibandingkan operasi INSTANT lainnya yang hanya memodifikasi metadata.