Topik ini menjelaskan cara melakukan operasi DDL pada data dingin.
Prasyarat
Kluster Anda menjalankan MySQL 8.0.2 dengan versi revisi 8.0.2.2.23 atau yang lebih baru.
Fitur pengarsipan data dingin diaktifkan untuk kluster. Untuk informasi lebih lanjut, lihat Aktifkan Pengarsipan Data Dingin.
Koneksi ke kluster telah dibuat. Untuk informasi lebih lanjut, lihat Hubungkan ke Kluster.
Data dingin berada dalam format nilai yang dipisahkan koma (CSV) atau Optimized Row Columnar (ORC). Data tabel Object Storage Service (OSS) dan data dingin yang disebutkan dalam bagian berikut mengacu pada data dingin dalam format CSV atau ORC.
Algoritma eksekusi DDL
PolarDB for MySQL mendukung algoritma eksekusi DDL berikut untuk data dingin:
Algoritma INSTANT: Jika Anda menggunakan algoritma INSTANT dalam operasi DDL, operasi tersebut hanya memodifikasi metadata dalam kamus data. Data yang ada tidak dimodifikasi, disalin, atau dibangun ulang. Operasi DDL dapat diselesaikan dalam hitungan detik terlepas dari ukuran tabel.
Algoritma COPY: Jika Anda menggunakan algoritma COPY dalam operasi DDL, operasi tersebut menyalin semua data dalam tabel ke tabel baru. Selama operasi penyalinan, tabel asli dikunci oleh SHARED_NO_WRITE (SNW) lock. Hanya operasi baca yang diizinkan. Operasi tulis dilarang, yang berdampak negatif pada bisnis yang bergantung pada pembaruan atau penulisan sering ke tabel.
Saat Anda mengeksekusi pernyataan DDL, Anda dapat menggunakan klausa ALGORITHM untuk menentukan algoritma yang ingin Anda gunakan. Opsi yang tersedia adalah DEFAULT, INSTANT, dan COPY. Jika Anda menentukan algoritma yang tidak didukung oleh operasi DDL, kesalahan akan dikembalikan.
Dalam kebanyakan kasus, algoritma INSTANT lebih cepat dan kurang mengganggu daripada algoritma COPY. Jika Anda tidak secara manual menentukan algoritma DDL menggunakan klausa ALGORITHM, PolarDB for MySQL menggunakan algoritma INSTANT. Jika algoritma INSTANT tidak berlaku, algoritma COPY digunakan. Bagian berikut ini menjelaskan cara menggunakan algoritma INSTANT.
Petunjuk algoritma INSTANT
Pada versi 8.0.2.2.23 atau yang lebih baru, Anda dapat mengaktifkan OSS META untuk tabel data dingin OSS demi manajemen data yang lebih baik. Tabel mendukung operasi DDL yang menggunakan algoritma INSTANT (INSTANT DDL) hanya jika OSS META diaktifkan untuk tabel tersebut. Untuk menggunakan INSTANT DDL pada tabel, lakukan operasi berikut:
Periksa apakah OSS META diaktifkan untuk tabel.
Eksekusi pernyataan
SHOW CREATE TABLEuntuk memeriksa apakah OSS META diaktifkan untuk tabel. Jika "OSS META=1" ditampilkan dalam output, OSS META diaktifkan untuk tabel.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 yang dibuat.
Anda dapat menggunakan parameter use_oss_meta untuk mengaktifkan atau menonaktifkan OSS META pada tabel OSS baru yang dibuat dalam skenario di mana tabel non-partisi InnoDB diarsipkan ke tabel OSS, tabel partisi InnoDB diarsipkan ke tabel OSS, atau tabel InnoDB diarsipkan ke partisi OSS.
Anda dapat menggunakan pernyataan berikut untuk memeriksa apakah parameter use_oss_meta diatur ke ON.
show variables like "use_oss_meta"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | use_oss_meta | ON | +---------------+-------+ 1 row in set (0.03 sec)Jika parameter use_oss_meta diatur ke ON, tabel OSS baru tempat data diarsipkan mencakup penanda OSS META.
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 baris terpengaruh (1,95 detik) 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 baris dalam set (0,00 detik)Aktifkan OSS META untuk tabel yang sudah ada.
Anda dapat menggunakan pernyataan
REPAIRuntuk mengaktifkan OSS META untuk 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)CatatanSaat Anda mengeksekusi pernyataan REPAIR, tabel dikunci oleh Kunci X. Anda tidak dapat menanyakan atau memodifikasi tabel. Waktu eksekusi pernyataan REPAIR bervariasi berdasarkan ukuran tabel.
Nonaktifkan OSS META untuk tabel.
Anda dapat menggunakan pernyataan
DISABLEuntuk menonaktifkan OSS META untuk tabel.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)Setelah Anda menonaktifkan OSS META untuk tabel, tabel tersebut tidak lagi memiliki penanda OSS META.
CatatanPernyataan
DISABLElangsung berlaku tanpa perlu me-restart layanan database.
Karakteristik operasi DDL
Operasi pada kolom
Operasi | Bangun ulang tabel | Hanya modifikasi metadata |
Tambahkan kolom | Tidak1 | Ya1 |
Hapus kolom | Ya | Tidak |
Ganti nama kolom | Tidak | Ya |
Urutkan kolom | Ya | Tidak |
Tentukan nilai default untuk kolom | Tidak | Ya |
Ubah komentar kolom | Tidak | Ya |
Ubah tipe kolom | Ya | Tidak |
Perpanjang panjang kolom VARCHAR | Tidak | Ya |
Ubah set karakter UTF8mb3 kolom menjadi set karakter UTF8mb4 | Tidak2 | Ya2 |
Hapus nilai default kolom | Tidak | Ya |
Ubah nilai auto-increment kolom | Tidak | Ya |
Ubah nilai kolom menjadi NULL | Ya | Tidak |
Ubah nilai kolom menjadi nilai bukan NULL | Ya | Tidak |
Ubah definisi kolom ENUM atau SET | Tidak | Ya3 |
Fitur Instant ADD COLUMN menambahkan kolom hanya di akhir tabel yang memiliki OSS META diaktifkan. Jika tidak ada kunci utama yang ditentukan untuk tabel, Anda harus mengatur nilai parameter
implicit_primary_keyke OFF untuk mencegah konflik dengan kolom kunci utama implisit yang dihasilkan otomatis saat Anda menambahkan kolom baru di akhir tabel. Jika kluster tidak mendukung fitur Instant ADD COLUMN, gunakan algoritma COPY untuk menambahkan kolom. Dalam hal ini, pembangunan ulang tabel diperlukan. Selama proses pembangunan ulang, operasi baca bersamaan pada tabel diizinkan.Jika kondisi berikut terpenuhi, Anda dapat mengubah set karakter kolom dari UTF8mb3 ke UTF8mb4 dengan hanya memodifikasi metadata. Jika kondisi berikut tidak terpenuhi, Anda harus menggunakan algoritma COPY untuk membangun ulang tabel. Tabel dikunci dan hanya operasi baca yang diizinkan selama operasi pembangunan ulang.
Tipe kolom adalah CHAR, VARCHAR, ENUM, atau TEXT.
Tidak ada indeks yang dibuat pada kolom.
Panjang penyimpanan maksimum kolom sebelum dan sesudah konversi set karakter tetap lebih pendek dari 256 byte atau tetap lebih panjang dari 255 byte.
Anda dapat memaksa menggunakan algoritma INSTANT dengan menentukan ALGORITHM=INSTANT dalam pernyataan DDL. Jika operasi tidak dapat dilakukan menggunakan algoritma INSTANT, kesalahan akan dikembalikan. Contoh:
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.Anda dapat memodifikasi hanya metadata tanpa perlu membangun ulang tabel jika Anda menambahkan elemen baru di akhir kolom ENUM atau SET dan ukuran penyimpanan tipe data tetap tidak berubah. Jika tidak, algoritma COPY digunakan, yang melibatkan pembangunan ulang tabel sepenuhnya.
Operasi pada tabel
Operasi | Bangun ulang tabel | Hanya modifikasi metadata |
Aktifkan META | Ya | Tidak |
Nonaktifkan META | Tidak | Ya |
Nyatakan set karakter | Tidak | Ya |
Konversi set karakter | Ya | Tidak |
Ganti nama tabel | Tidak | Ya1 |
Ubah komentar tabel | Tidak | Ya |
Saat Anda mengganti nama tabel yang datanya disimpan di OSS, data tabel tidak ditulis ulang. Sebagai gantinya, file data OSS yang sesuai diganti namanya. Kecepatan operasi sebanding dengan ukuran tabel dan sedikit lebih lambat daripada operasi INSTANT lainnya yang hanya memodifikasi metadata.