PolarDB memungkinkan Anda mengonversi tabel non-partisi menjadi tabel terpartisi rentang secara mulus tanpa perlu mendistribusikan ulang data. Topik ini menjelaskan cara melakukan konversi tersebut di PolarDB.
Informasi latar belakang
Ketika PolarDB mengonversi tabel non-partisi menjadi tabel terpartisi rentang, data dari tabel non-partisi dipindahkan ke partisi pertama tanpa verifikasi. Partisi lainnya dibiarkan kosong. Dalam banyak kasus, fitur ini digunakan di PolarDB untuk mentransfer data historis ke partisi pertama tanpa perlu menulis ulang data menggunakan pernyataan ALTER PARTITION BY. Hal ini memungkinkan Anda dengan cepat mengonversi tabel non-partisi menjadi tabel terpartisi rentang.
Untuk informasi lebih lanjut tentang cara mengonversi tabel non-partisi menjadi tabel terpartisi rentang dengan cepat, bergabunglah dengan grup DingTalk 24490017825 untuk mendapatkan dukungan teknis.
Prasyarat
Kluster Anda menjalankan PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.10 atau yang lebih baru. Untuk informasi tentang cara melihat versi kluster Anda, lihat bagian "Query the engine version" dari topik Versi Mesin.
Batasan
Jika tabel non-partisi berisi bidang yang ditambahkan menggunakan pernyataan INSTANT ADD COLUMN, Anda tidak dapat mengonversi tabel tersebut menjadi tabel terpartisi rentang.
Penggunaan
Mengonversi tabel non-partisi menjadi tabel terpartisi rentang
Syntax
Tambahkan kata kunci WITHOUT VALIDATION ke dalam pernyataan ALTER TABLE.
ALTER TABLE table_name
PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
(partition_definition [, partition_definition] ...)
WITHOUT VALIDATION;partition_definition:
PARTITION partition_name
VALUES LESS THAN {(value | value_list) | MAXVALUE}Parameters
Parameter | Deskripsi |
table_name | Nama tabel. |
column_list | Daftar kolom kunci partisi. Ekspresi tidak didukung. |
RANGE(expr) | Ekspresi yang digunakan untuk partisi rentang. |
partition_name | Nama partisi. |
value_list | Nilai-nilai partisi. |
MAXVALUE | Nilai maksimum dalam partisi. |
Example
Mengonversi tabel non-partisi t1 menjadi tabel terpartisi rentang.
CREATE TABLE t1 (
`a` int ,
`b` int ,
Primary Key(a, b));
insert into t1 values(1,1),(2,1),(3,1),(4,1),(111,111),(3333,333);
alter table t1 partition by range(a) (
partition p0 values less than (100),
partition p1 values less than (200)
) WITHOUT VALIDATION;Semua data dalam tabel t1 dipindahkan ke partisi p0 tanpa verifikasi. Jika Anda yakin bahwa semua data dalam tabel non-partisi berada dalam rentang nilai partisi p0, Anda dapat menjalankan pernyataan ini untuk mengonversi tabel non-partisi menjadi tabel terpartisi rentang.
Pastikan bahwa semua data dalam tabel non-partisi berada dalam rentang nilai partisi pertama dari tabel terpartisi. Jika tidak, data yang berada di luar rentang nilai mungkin tidak dapat diambil setelah tabel dikonversi menjadi tabel terpartisi.
Jika Anda menggunakan opsi WITHOUT VALIDATION, sistem memindahkan semua data dari tabel non-partisi ke partisi pertama dari tabel terpartisi tujuan tanpa melakukan validasi. Pastikan bahwa batas-batas partisi pertama didefinisikan untuk menampung semua data dari tabel non-partisi.
Penggunaan pada tabel terpartisi lainnya
Kata kunci WITHOUT VALIDATION untuk mengonversi tabel non-partisi menjadi tabel terpartisi rentang dapat digunakan untuk tabel terpartisi INTERVAL untuk secara otomatis membuat partisi RANGE pada interval yang sama.
Example
CREATE TABLE t1(
ID int,
DATE DATE,
PRIMARY KEY (ID,DATE)
);
ALTER TABLE t1
partition by RANGE COLUMNS(date) INTERVAL(DAY, 1) (
PARTITION p0 VALUES LESS THAN ('2023-01-31')
) without validation;Kinerja
Dibandingkan dengan mekanisme yang digunakan di MySQL asli untuk mengonversi tabel non-partisi menjadi tabel terpartisi, fitur yang digunakan di PolarDB untuk mengonversi tabel non-partisi menjadi tabel terpartisi rentang hanya mengubah metadata tabel dan tidak menulis ulang data tabel. Oleh karena itu, hanya dibutuhkan waktu kurang dari 0,1 detik untuk mengonversi tabel. Mekanisme yang digunakan di MySQL asli untuk mengonversi tabel non-partisi menjadi tabel terpartisi memerlukan verifikasi dan penulisan ulang data. Oleh karena itu, waktu yang lebih lama diperlukan. Durasi konversi meningkat berdasarkan ukuran data tabel.
Ukuran tabel | Di MySQL asli | Di PolarDB |
1 GB (6.001.215 baris) | 52,24 detik | 0,10 detik |
10 GB (59.986.052 baris) | 8 menit 45,82 detik | 0,07 detik |