X-Engine adalah storage engine yang dioptimalkan untuk warm data. Engine ini menggunakan arsitektur LSM-tree untuk mengurangi biaya penyimpanan dibandingkan InnoDB, sehingga cocok untuk data yang masih diakses atau diperbarui, tetapi tidak sesering hot data.
Prasyarat
Sebelum memulai, pastikan kluster Anda memenuhi semua persyaratan berikut:
Versi revisi adalah 8.0.1.1.31 atau lebih baru, atau 8.0.2.2.12 atau lebih baru. Untuk memeriksa versi, lihat Query an engine version.
Kluster bukan edisi Multi-master Cluster (Limitless). X-Engine tidak didukung untuk edisi ini.
Node primary memiliki memori minimal 8 GB. Spesifikasi node read-only harus sama dengan atau lebih tinggi daripada node primary.
Kluster belum bergabung ke Global Database Network (GDN).
Batasan
Batasan fitur
X-Engine tidak mendukung semua fitur InnoDB. Fitur apa pun yang tidak tercantum dalam tabel berikut berperilaku sama seperti di InnoDB.
| Kategori | Fitur | Perilaku |
|---|
| SQL | Foreign keys | Tidak didukung |
| SQL | Temporary tables | Tidak didukung |
| SQL | Generated columns | Tidak didukung |
| SQL | Handler API | Tidak didukung |
| Properti kolom | Panjang maksimum kolom (longblob, longtext, json) | 32 MB |
| Tipe data GIS | GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEMOMETRYCOLLECTION | Tidak didukung |
| Indeks | Hash indexes | Tidak didukung |
| Indeks | Spatial indexes dan full-text indexes | Tidak didukung |
| Transaksi | Level isolasi yang didukung | Hanya Read Committed (RC) dan Repeatable Read (RR) |
| Transaksi | Data maksimum per transaksi | 32 MB |
| Transaksi | Savepoints | Tidak didukung |
| Transaksi | XA transactions | Hanya XA transactions internal |
| Kunci | Granularitas kunci yang didukung | Kunci level tabel dan level baris (gap locks tidak didukung) |
| Kunci | SKIP LOCKED | Tidak didukung |
| Kunci | NOWAIT | Tidak didukung |
| Set karakter | Kolom tanpa indeks | Semua set karakter |
| Set karakter | Kolom berindeks | Latin1 (latin1_bin), GBK (gbk_chinese_ci, gbk_bin), UTF-8 (utf8_general_ci, utf8_bin), UTF-8MB4 (utf8mb4_0900_ai_ci, utf8mb4_general_ci, utf8mb4_bin) |
| Replikasi | Format binary log | stmt, row, dan mixed. Format default adalah row. |
Catatan Format binary log stmt dan mixed dapat menyebabkan masalah keamanan data dalam skenario penulisan konkuren tertentu. Gunakan format row untuk workload yang banyak menulis.
Batasan transaksi besar
X-Engine tidak mendukung transaksi besar. Ketika suatu transaksi memodifikasi 10.000 baris atau lebih, X-Engine secara otomatis memicu mekanisme commit in middle, yang secara internal melakukan commit data secara batch dan memulai sub-transaksi untuk melanjutkan. Perilaku ini tidak menjamin atomisitas transaksi.
Penting Mekanisme commit in middle tidak menghasilkan error. Mekanisme ini diam-diam mengubah semantik transaksi. Rancang aplikasi Anda agar menghindari transaksi yang memodifikasi 10.000 baris atau lebih dalam satu operasi.
Contoh berikut menunjukkan bagaimana commit in middle memengaruhi berbagai operasi.
Rollback parsial setelah insert besar
Jika transaksi INSERT besar memicu commit in middle, baris yang telah di-commit tidak dapat di-rollback. Hanya baris yang belum di-commit yang di-rollback.
DROP TABLE t1;
CREATE TABLE t1(c1 int primary key, c2 int) ENGINE=xengine;
BEGIN;
CALL insert_data(12000); -- Memasukkan 12.000 baris; commit in middle melakukan commit 10.000 baris pertama
ROLLBACK; -- Hanya 2.000 baris terakhir yang di-rollback
SELECT COUNT(*) FROM t1;
Output yang diharapkan:
+----------+
| COUNT(*) |
+----------+
| 10000 |
+----------+
1 row in set (0.00 sec)
DELETE tidak dapat membaca baris yang di-commit di tengah transaksi
Jika DELETE didahului oleh INSERT dalam transaksi besar yang sama, mekanisme commit in middle dapat menyebabkan DELETE melewatkan baris yang baru saja di-commit.
DROP TABLE t1;
CREATE TABLE t1(c1 int primary key, c2 int) ENGINE=xengine;
CALL insert_data(10000);
BEGIN;
INSERT INTO t1 VALUES(10001, 10001), (10002, 10002);
DELETE FROM t1 WHERE c1 >= 0; -- Memicu commit in middle; dua baris yang dimasukkan tidak dihapus
COMMIT;
SELECT * FROM t1;
Output yang diharapkan:
+-------+-------+
| c1 | c2 |
+-------+-------+
| 10001 | 10001 |
| 10002 | 10002 |
+-------+-------+
2 rows in set (0.00 sec)
Catatan penggunaan
Mengaktifkan X-Engine memicu restart kluster secara otomatis. Harapkan gangguan koneksi selama sekitar 30 detik. Aktifkan X-Engine pada jam sepi dan pastikan aplikasi Anda mendukung koneksi ulang otomatis.
Setelah diaktifkan, X-Engine tidak dapat dinonaktifkan.
Setelah diaktifkan, kluster tidak dapat bergabung ke GDN.
Aktifkan X-Engine
Pilih salah satu metode berikut berdasarkan apakah kluster Anda sudah ada atau belum.
Metode 1: Aktifkan X-Engine pada kluster yang sudah ada
Login ke Konsol PolarDB. Di panel navigasi kiri, klik Clusters. Pilih wilayah dan klik ID kluster untuk membuka halaman Basic Information.
Di panel navigasi kiri, pilih Settings and Management > Data Lifecycle. Klik tab X-Engine (Warm Data), lalu klik Enable.
Catatan Jika tab X-Engine (Warm Data) tidak muncul, pastikan kluster Anda memenuhi semua prasyarat yang tercantum di atas.

Pada kotak dialog Set X-Engine Proportion, atur proporsi memori dan penyimpanan untuk X-Engine berdasarkan workload Anda, lalu klik Enable Now. Gunakan tabel berikut untuk memilih proporsi awal:
| Skenario | InnoDB (%) | X-Engine (%) |
|---|
| Sebagian besar data panas dengan data dingin yang jarang diakses | 80 | 20 |
| Campuran data panas dan data dingin yang masih diperbarui serta dikueri | 50 | 50 |
| Jumlah kecil data panas dengan jumlah besar data hangat yang perlu diperbarui atau dikueri | 20 | 80 |
Catatan Nilai X-Engine (%) harus antara 10% hingga 90%. Jika semua tabel menggunakan X-Engine, atur X-Engine (%) menjadi 90%. Setelah diaktifkan, sesuaikan proporsinya di tab X-Engine (Warm Data) di bawah Settings and Management > Data Lifecycle.
Metode 2: Aktifkan X-Engine saat membeli kluster
Untuk mengaktifkan X-Engine pada kluster baru, atur parameter Storage Engine menjadi InnoDB & X-Engine dan konfigurasikan nilai X-Engine (%) saat pembelian kluster. Untuk detailnya, lihat parameter Storage Engine di Purchase clusters.


Catatan Setelah kluster dibuat, sesuaikan proporsinya di tab X-Engine (Warm Data) di bawah Settings and Management > Data Lifecycle.