Bahasa definisi data online (DDL) memungkinkan eksekusi bersamaan operasi DDL dan transaksi lainnya. DDL Online meminimalkan durasi penguncian tabel database, sehingga meningkatkan konkurensi keseluruhan dan kinerja database.
Prasyarat
Versi node komputasi adalah 5.4.16-16717637 atau lebih baru, yang mendukung penulisan asinkron multi untuk operasi DDL yang dieksekusi secara logis. Untuk informasi lebih lanjut, lihat Catatan rilis.
Untuk informasi tentang versi dan kondisi yang diperlukan untuk operasi DDL yang dijelaskan dalam topik ini, lihat Pernyataan partisi, Instant ADD COLUMN, Ubah tipe data kolom tanpa mengunci tabel, Urutan, Kolom terhasilkan, Buat dan gunakan GSIs, dan Pernyataan grup tabel.
Ikhtisar
Operasi DDL dalam instance PolarDB-X diklasifikasikan menjadi dua kategori berikut:
Dieksekusi secara fisik: Operasi DDL didorong ke node data untuk dieksekusi. Operasi ini mencakup
CREATE LOCAL INDEX,ALTER/ADD COLUMN, danCREATE/DROP TABLE. Node komputasi hanya melakukan penerusan tingkat shard dari pernyataan fisik, koordinasi, dan manajemen metadata. Prinsip implementasi dan fitur online dari operasi ini mirip dengan operasi DDL MySQL.
Dieksekusi secara logis: Node komputasi menangani operasi DDL secara lengkap. Operasi ini mencakup
GLOBAL INDEX,CREATE/DROP PARTITION,CREATE/DROP PRIMARY KEY, dan Ubah tipe data kolom tanpa mengunci tabel. Saat operasi ini dieksekusi, sistem membuat tabel sementara, menyalin data dari tabel asli ke tabel sementara, dan menyinkronkan pembaruan data tambahan. Setelah tabel sementara cukup terisi, sistem beralih aliran data dari tabel asli ke tabel sementara secara mulus. Node komputasi menangani proses pengisian ulang data, penulisan multi tambahan, dan manajemen metadata. Operasi ini tidak mengunci tabel.
Berikut ini adalah analisis fitur DDL online dari tiga dimensi berdasarkan dampaknya pada operasi SQL lainnya:
Apakah tabel terkunci?
Operasi DDL online hanya memblokir operasi bahasa manipulasi data (DML) selama beberapa detik saat pergantian tabel dan mengizinkan operasi DML untuk dieksekusi selama sebagian besar periode eksekusi.
Operasi DDL non-online mengunci tabel selama proses eksekusi, sehingga Anda tidak dapat melakukan operasi DML pada tabel tersebut.
Apakah data diisi ulang?
Operasi DDL yang hanya melibatkan perubahan metadata, seperti
INSTANT ADD COLUMNdanRENAME TABLE, diselesaikan secara instan tanpa perlu mengisi ulang data.Operasi DDL seperti
DROP TABLEdanDROP INDEXhanya memodifikasi metadata dan menghapus file fisik terkait. Operasi ini selesai dalam waktu singkat tanpa perlu mengisi ulang data.Operasi DDL lainnya, selain operasi
INSTANT, operasi penghapusan tabel, dan operasi penghapusan indeks, menyalin dan menulis data asli ke indeks terkluster baru atau indeks sekunder selama eksekusi fisik atau logis. Eksekusi ini menggunakan sejumlah sumber daya klaster tertentu. Durasi eksekusi bervariasi berdasarkan jumlah data, tingkat konkurensi, dan spesifikasi instance.
Apakah penulisan multi sinkron dari pembaruan online diperlukan?
Operasi DDL yang dieksekusi secara logis mengisi ulang data ke tabel sementara dan secara bersamaan menulis lalu lintas DML online multi ke tabel sementara secara sinkron. Lalu lintas DML online mungkin bertentangan dengan data yang diisi ulang. Penulisan multi ditangani menggunakan pendekatan transaksi terdistribusi untuk memastikan atomicitas, yang menyebabkan operasi DML dieksekusi sebagai operasi logis. Ini mengakibatkan penurunan kinerja operasi online. Untuk mengatasi masalah ini, PolarDB-X mengimplementasikan penulisan multi asinkron untuk operasi DDL yang dieksekusi secara logis seperti
MOVE/SPLIT PARTITION, Ubah tipe data kolom tanpa mengunci tabel, danREBALANCE. Lalu lintas DML penulisan multi pertama kali disimpan dalam cache dan kemudian dieksekusi secara asinkron setelah pengisian ulang data selesai, yang meminimalkan konflik penulisan multi dan durasi penurunan kinerja. Apakah operasi DDL ini mendukung penulisan multi asinkron dijelaskan dalam bagian Fitur DDL Online dari topik ini.Secara default, operasi DDL online asli yang dieksekusi secara fisik pada node data, mengisi ulang data, dan tidak mengunci tabel mengimplementasikan penulisan multi asinkron asli menggunakan log online. Apakah operasi DDL ini mendukung penulisan multi asinkron tidak dijelaskan dalam bagian Fitur DDL Online dari topik ini.
Jenis operasi DDL lainnya tidak memerlukan penulisan multi. Apakah operasi DDL ini mendukung penulisan multi asinkron tidak dijelaskan dalam bagian Fitur DDL Online dari topik ini.
Operasi DDL Online
Saat menggunakan pernyataan DDL untuk melakukan operasi tabel dan kolom, terutama dengan menggunakan pernyataan MODIFY COLUMN dan CHANGE COLUMN, Anda harus menentukan atribut kolom lengkap untuk menghindari modifikasi kolom yang tidak terduga akibat atribut yang hilang.
Operasi indeks
Operasi | Dieksekusi secara logis | Mengunci tabel | Membangun ulang tabel | Mengisi ulang data | Mendukung penulisan multi asinkron |
Buat indeks sekunder lokal (LSI) | Tidak | Tidak | Tidak | Ya | - |
Hapus LSI | Tidak | Tidak | Tidak | Tidak | - |
Ganti nama LSI | Tidak | Tidak | Tidak | Tidak | - |
Buat indeks sekunder global (GSI) | Ya | Tidak | Ya | Ya | Tidak |
Hapus GSI | Ya | Tidak | Tidak | Tidak | - |
Ganti nama GSI | Ya | Tidak | Tidak | Tidak | - |
Operasi tabel
Operasi | Dieksekusi secara logis | Mengunci tabel | Membangun ulang tabel | Mengisi ulang data | Mendukung penulisan multi asinkron |
Modifikasi format baris (ROW_FORMAT) | Tidak | Tidak | Ya | Ya | - |
OPTIMIZE TABLE | Tidak | Tidak | Ya | Ya | - |
Ganti nama tabel | Tidak | Tidak | Tidak | Tidak | - |
Modifikasi set karakter default | Tidak | Tidak | Ya | Ya | - |
Konversi set karakter | Tidak | Ya | Ya | Ya | - |
Truncate tabel yang tidak memiliki GSIs (TRUNCATE TABLE WITHOUT GSI) | Tidak | Tidak | Ya | Tidak | - |
Truncate tabel yang memiliki GSIs (TRUNCATE TABLE WITH GSI) | Ya | Tidak | Ya | Tidak | - |
Operasi partisi
Operasi | Dieksekusi secara logis | Mengunci tabel | Membangun ulang tabel | Mengisi ulang data | Mendukung penulisan multi asinkron |
Migrasi partisi | Ya | Tidak | Ya (Hanya partisi relevan yang dibuat ulang.) | Ya | Ya Catatan
|
Pisahkan partisi | Ya | Tidak | Ya (Hanya partisi relevan yang dibuat ulang.) | Ya | |
Gabungkan partisi | Ya | Tidak | Ya (Hanya partisi relevan yang dibuat ulang.) | Ya | Tidak |
Tambahkan partisi Catatan
| Ya | Tidak | Tidak | Tidak | - |
Hapus partisi Catatan
| Ya | Tidak | Tidak | Tidak | - |
Atur ulang partisi | Ya | Tidak | Ya (Hanya partisi relevan yang dibuat ulang.) | Ya | Tidak |
Bersihkan partisi | Ya | Tidak | Tidak | Tidak | - |
Ganti nama partisi | Ya | Tidak | Tidak | Tidak | - |
Modifikasi partisi | Ya | Tidak | Ya (Hanya partisi relevan yang dibuat ulang.) | Ya | Tidak |
Fitur DDL online untuk operasi partisi yang dijelaskan dalam tabel sebelumnya berlaku baik untuk table groups maupun tabel.
Operasi perubahan urutan
Operasi | Dieksekusi secara logis | Mengunci tabel | Membangun ulang tabel | Mengisi ulang data | Mendukung penulisan multi asinkron |
Buat urutan | Ya | Tidak | Tidak | Tidak | - |
Hapus urutan | Ya | Tidak | Tidak | Tidak | - |
Modifikasi atribut urutan | Ya | Tidak | Tidak | Tidak | - |
Konversi tipe urutan | Ya | Tidak | Tidak | Tidak | - |
Operasi kolom umum
Operasi kolom diklasifikasikan menjadi operasi kolom umum (operasi kolom yang tidak terkait dengan kunci utama, kunci partisi, atau kolom terhasilkan), operasi perubahan kunci utama dan kunci partisi, dan operasi kolom terhasilkan. Anda dapat mengeksekusi pernyataan SHOW FULL CREATE TABLE TABLE_NAME untuk melihat atribut kolom lengkap guna menentukan kategori operasi kolom.
Operasi | Dieksekusi secara logis | Mengunci tabel | Membangun ulang tabel | Mengisi ulang data | Mendukung penulisan multi asinkron |
Tambahkan kolom. Untuk informasi lebih lanjut, lihat Catatan 1. | Tidak | Tidak | Ya | Ya | - |
Hapus kolom | Tidak | Tidak | Ya | Ya | - |
Ganti nama kolom | Tidak | Tidak | Tidak | Tidak | - |
Ubah urutan kolom | Tidak | Tidak | Ya | Ya | - |
Ubah nilai default kolom | Tidak | Tidak | Tidak | Tidak | - |
Hapus nilai default kolom | Tidak | Tidak | Tidak | Tidak | - |
Modifikasi tipe data kolom | Tidak | Ya | Ya | Ya | - |
Perpanjang panjang kolom varchar. Untuk informasi lebih lanjut, lihat Catatan 2 dan Catatan 3. | Tidak | Tidak | Tidak | Tidak | - |
Perpanjang panjang kolom char. Untuk informasi lebih lanjut, lihat Catatan 3. | Tidak | Ya | Ya | Ya | - |
Ubah nilai dalam kolom menjadi NULL | Tidak | Tidak | Ya | Ya | - |
Ubah nilai dalam kolom menjadi NOT NULL Catatan Jika opsi | Tidak | Tidak | Ya | Ya | - |
PolarDB-X memungkinkan Anda menggunakan algoritma instan untuk menambahkan kolom dengan hanya memodifikasi metadata database. Operasi perubahan pada kolom tertentu dapat dieksekusi secara logis online. Tabel berikut menjelaskan fitur eksekusi online dari operasi ketika
ALGORITHM=INSTANTatauALGORITHM=OMCditentukan secara eksplisit.Operasi
Dieksekusi secara logis
Mengunci tabel
Membangun ulang tabel
Mengisi ulang data
Mendukung penulisan multi asinkron
Tidak
Tidak
Tidak
Tidak
-
Ubah tipe kolom secara online
Ya
Tidak
Ya
Ya
Ya
Secara default, PolarDB-X node data 5.7 memungkinkan Anda memperpanjang panjang kolom
VARCHARmenggunakan algoritmaINPLACE. Namun, fitur ini tidak didukung pada node data 8.0. Jika panjang kolom VARCHAR adalah 255 byte atau kurang, hanya memerlukan satu byte untuk penyimpanan. Jika panjangnya 256 byte atau lebih, memerlukan dua byte untuk penyimpanan. Jika Anda ingin memperpanjang panjang kolom VARCHAR dari kurang dari atau sama dengan 255 byte menjadi sama dengan atau lebih dari 256 byte, perubahan tersebut tidak dapat dilakukan hanya dengan modifikasi metadata. Sebaliknya, jika Anda ingin mengurangi panjang kolom VARCHAR dari lebih dari 256 byte menjadi 255 byte atau kurang, perubahan tersebut dapat dilakukan hanya dengan modifikasi metadata.Operasi
Dieksekusi secara logis
Mengunci tabel
Membangun ulang tabel
Mengisi ulang data
Mendukung penulisan multi asinkron
Perpanjang panjang kolom
VARCHARmenjadi lebih dari 256 byteTidak
Tidak
Ya
Ya
-
Secara default, PolarDB-X node data 5.7 memungkinkan Anda memperpanjang panjang kolom
CHARmenggunakan algoritmaINPLACE. Namun, fitur ini tidak didukung pada node data 8.0. Tabel berikut menjelaskan fitur eksekusi online dari operasi tersebut.Operasi
Dieksekusi secara logis
Mengunci tabel
Membangun ulang tabel
Mengisi ulang data
Mendukung penulisan multi asinkron
Perpanjang panjang kolom
CHARTidak
Tidak
Ya
Ya
-
Operasi kunci utama dan kolom sharding
Operasi | Dieksekusi secara logis | Mengunci tabel | Membangun ulang tabel | Mengisi ulang data | Mendukung penulisan multi asinkron |
Tambahkan kunci utama | Ya | Tidak | Ya | Ya | Tidak |
Hapus kunci utama asli dan tambahkan kunci utama baru | Ya | Tidak | Ya | Ya | Tidak |
Ubah metode sharding, jumlah shard, atau kolom sharding | Ya | Tidak | Ya (Tabel GSI atau tabel utama yang terlibat dalam perubahan sharding dibuat ulang.) | Ya | Tidak |
Ubah definisi untuk kolom sharding dari GSI atau tabel utama | Ya | Tidak | Ya (The GSI atau tabel utama yang menggunakan kolom sharding dibuat ulang.) | Ya | Tidak |
Operasi kolom terhasilkan
Operasi | Dieksekusi secara logis | Mengunci tabel | Membangun ulang tabel | Mengisi ulang data | Mendukung penulisan multi asinkron |
Tambahkan kolom virtual (kolom VIRTUAL) | Tidak | Tidak | Tidak | Tidak | - |
Hapus kolom virtual (kolom VIRTUAL) | Tidak | Tidak | Tidak | Tidak | - |
Tambahkan kolom penyimpanan (kolom STORED) | Tidak | Ya | Ya | Ya | - |
Hapus kolom penyimpanan (kolom STORED) | Tidak | Tidak | Ya | Ya | - |
Tambahkan kolom logis (kolom LOGICAL) | Ya | Tidak | Ya | Ya | Tidak |
Hapus kolom logis (kolom LOGICAL) | Ya | Tidak | Ya | Ya | - |
Kelola fitur eksekusi online
PolarDB-X memungkinkan Anda mengelola fitur eksekusi online dengan metode berikut:
Untuk menambahkan kolom, Anda dapat menggunakan fitur Instant ADD COLUMN dengan menentukan ALGORITHM=INSTANT.
Untuk memodifikasi kolom secara online, Anda dapat menentukan ALGORITHM=OMC untuk menggunakan metode eksekusi logis.
Secara default, pernyataan DDL yang dieksekusi secara logis dijalankan secara online. Spesifikasi khusus tidak diperlukan.
Untuk eksekusi online operasi kolom umum yang dieksekusi secara fisik dan operasi DDL indeks lokal, Anda dapat menentukan ALGORITHM=INPLACE. Jika operasi tidak mendukung eksekusi online, kesalahan akan terjadi. Jika tidak, operasi langsung dijalankan.