All Products
Search
Document Center

PolarDB:Sistem transaksi Lizard

Last Updated:Mar 29, 2026

PolarDB-X Edisi Standar menggantikan sistem transaksi InnoDB dengan Lizard, mesin kustom yang dibangun berdasarkan model System Commit Number (SCN). Jika InnoDB melacak visibilitas menggunakan array ID transaksi aktif yang dibagikan di seluruh pembaca, Lizard memberikan setiap visi transaksi satu SCN tunggal. Pendekatan ini menghilangkan kontensi pada struktur global, mengurangi biaya propagasi snapshot, dan secara native mendukung kueri FlashBack terhadap versi historis yang telah dikomit.

Batasan

Mesin database harus kompatibel dengan MySQL 8.0.

Cara kerja

Database relasional menggunakan Multi-Version Concurrency Control (MVCC) untuk menentukan visibilitas data berdasarkan versi yang telah dikomit. Lizard mengimplementasikan MVCC melalui dua konstruk inti:

  • SCN (System Commit Number): Angka yang ditetapkan saat commit untuk menentukan urutan komitmen transaksi.

  • Transaction slot: Unit penyimpanan persisten yang menyimpan SCN untuk transaksi yang telah dikomit. Setiap baris yang dimodifikasi menyimpan UBA dari transaction slot-nya, bukan SCN secara langsung.

Transaksi tulis

  1. Ketika transaksi dimulai, sistem mengalokasikan sebuah transaction slot dan mencatat alamatnya sebagai UBA.

  2. Untuk setiap baris yang dimodifikasi, sistem menulis (SCN=NULL, UBA) ke dalam catatan baris tersebut.

  3. Saat komit, sistem memberikan SCN, menuliskannya ke dalam transaction slot, menandai transaksi sebagai selesai, dan mengembalikan hasil komit kepada client.

Transaksi baca

  1. Ketika kueri dimulai, sistem membuat visi transaksi dengan membaca SCN saat ini dari generator SCN.

  2. Untuk setiap baris yang diperiksa, sistem mencari transaction slot melalui UBA untuk mengambil status komit dan SCN transaksi tersebut.

  3. Sistem membandingkan SCN baris tersebut dengan SCN visi untuk menentukan apakah versi baris tersebut terlihat.

Kinerja transaksi berbasis SCN

Dibandingkan dengan sistem transaksi InnoDB, model SCN Lizard menawarkan tiga keunggulan:

KeunggulanDetail
Tidak ada ketergantungan struktur globalPemeriksaan visibilitas tidak mengakses array ID transaksi aktif yang dibagikan, sehingga secara signifikan mengurangi konflik baca/tulis di bawah beban konkuren.
Visi transaksi ringkasVisi transaksi hanya menyimpan satu SCN, bukan array ID transaksi aktif, sehingga membuat propagasi snapshot lebih murah.
Kueri FlashBackModel SCN secara native mendukung kueri FlashBack kustom terhadap versi historis yang telah dikomit.

Trade-off: Saat komit, hanya transaction slot yang diperbarui. SCN pada setiap catatan baris yang dimodifikasi tetap NULL hingga proses cleanout terjadi. Oleh karena itu, setiap pemeriksaan visibilitas harus mengikuti UBA menuju transaction slot—menambah satu langkah pencarian ekstra per baris.

Lizard mengatasi overhead ini dengan dua mekanisme cleanout.

Commit cleanout

Selama transaksi tulis, Lizard melacak sebagian subset dari baris yang dimodifikasi. Setelah komit, sistem mengisi kembali SCN yang telah dikomit ke dalam baris-baris tersebut. Untuk menjaga latensi komit tetap rendah, jumlah baris yang diisi kembali dibatasi berdasarkan jumlah catatan saat ini dan kapasitas beban sistem.

Delayed cleanout

Ketika kueri membaca baris yang SCN-nya masih NULL, Lizard menyelesaikan SCN tersebut dengan berkonsultasi ke transaction slot melalui UBA. Jika transaksi tersebut sudah dikomit, Lizard menuliskan kembali SCN ke dalam catatan baris tersebut sebagai efek samping. Pembacaan berikutnya terhadap baris yang sama akan melewati pencarian UBA sepenuhnya.

Reuse transaction slot

Transaction slot tidak dapat tumbuh tanpa batas. Lizard mendaur ulangnya melalui daftar bebas (free list): slot dikembalikan ke free list, dan transaksi baru mengambil slot dari free list terlebih dahulu.

Untuk menghindari overhead traversing beberapa halaman data guna menemukan slot bebas, Lizard memelihara tabel cache halaman transaction slot. Alokasi slot membaca langsung dari cache ini, sehingga mengurangi biaya I/O dalam proses daur ulang slot.

Kinerja

Overhead cleanout hanya berlaku selama kueri baca, bukan selama kontensi hotspot. Hasil benchmark berikut membandingkan sistem transaksi berbasis SCN dengan InnoDB tradisional:

SistemQPSTPSLatensi persentil ke-95 (ms)
Lizard636.086,8131.804,3416,07
MySQL 8.0.32487.578,7824.378,9434,33
MySQL 8.0.18311.399,8415.577,1541,23
Catatan

Lingkungan pengujian: Intel 8269CY 104C, 16 juta baris, 512 thread baca-tulis konkuren.

Dibandingkan dengan MySQL 8.0.32, Lizard memberikan peningkatan throughput sebesar 30% dan pengurangan latensi p95 sebesar 53%.