全部产品
Search
文档中心

PolarDB:Lakukan operasi DDL pada data dingin

更新时间:Jul 06, 2025

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.

Catatan

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:

  1. Periksa apakah OSS META diaktifkan untuk tabel.

    Eksekusi pernyataan SHOW CREATE TABLE untuk 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)
  2. 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)
  3. Aktifkan OSS META untuk tabel yang sudah ada.

    Anda dapat menggunakan pernyataan REPAIR untuk 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)
    Catatan

    Saat Anda mengeksekusi pernyataan REPAIR, tabel dikunci oleh Kunci X. Anda tidak dapat menanyakan atau memodifikasi tabel. Waktu eksekusi pernyataan REPAIR bervariasi berdasarkan ukuran tabel.

  4. Nonaktifkan OSS META untuk tabel.

    Anda dapat menggunakan pernyataan DISABLE untuk 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.

    Catatan

    Pernyataan DISABLE langsung 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

  1. 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_key ke 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.

  2. 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.
  3. 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

  1. 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.