Pada beban kerja online transaction processing (OLTP) dengan konkurensi tinggi, daftar transaksi aktif MySQL menjadi bottleneck: setiap permulaan transaksi, komitmen, dan pemeriksaan visibilitas harus memperoleh trx sys mutex, sehingga membatasi throughput dan mencegah pemanfaatan penuh beberapa vCPU. PolarDB for MySQL mengatasi hal ini dengan PolarTrans, yang menggantikan daftar transaksi aktif dengan Commit Timestamp Store (CTS)—mekanisme in-memory tanpa lock yang melacak status transaksi menggunakan cap waktu komitmen alih-alih array yang dilindungi mutex.
Topik ini menjelaskan cara kerja CTS, peningkatan yang diberikan pada setiap tahap siklus hidup transaksi, serta perubahan kinerja setelah PolarTrans diaktifkan.
Versi yang didukung
Untuk mengaktifkan PolarTrans melalui fitur konsistensi global (mode kinerja tinggi), kluster PolarDB for MySQL Edisi Perusahaan Anda harus memenuhi salah satu persyaratan versi berikut:
Versi engine 8.0.2 dengan revisi versi 8.0.2.2.19 atau lebih baru
Versi engine 8.0.1 dengan revisi versi 8.0.1.1.29 atau lebih baru
Versi engine 5.7 dengan revisi versi 5.7.1.0.26 atau lebih baru
Untuk memeriksa versi kluster Anda, lihat bagian "Query the engine version" pada Engine versions.
Mengapa daftar transaksi aktif membatasi kinerja
Database relasional utama seperti MySQL dan PostgreSQL menerapkan Multi-Version Concurrency Control (MVCC) menggunakan daftar transaksi aktif. Di lingkungan dengan konkurensi tinggi, pendekatan ini menimbulkan tiga masalah:
Tidak dapat memanfaatkan sepenuhnya beberapa vCPU untuk memproses transaksi secara konkuren
Menciptakan bottleneck kinerja ketika banyak transaksi bersaing untuk mendapatkan
trx sys mutexTidak mendukung secara memadai konsistensi baca, penulisan multi-titik, dan manajemen transaksi Extended Architecture (XA) dalam arsitektur tanpa berbagi (shared-nothing)
PolarTrans mengatasi keterbatasan ini dengan menggantikan daftar transaksi aktif menggunakan CTS. Alih-alih menyalin status transaksi, PolarTrans menentukan visibilitas transaksi berdasarkan cap waktu komitmen maksimum kluster. Log CTS dipertahankan sepenuhnya di memori: setiap transaksi dipetakan secara modulo ke slot tertentu dalam ring buffer berdasarkan trx_id-nya, dan setiap slot menyimpan pointer trx serta nomor urutan komitmen (CSN).
Cara CTS meningkatkan setiap tahap transaksi
Daftar transaksi aktif mengharuskan akuisisi trx sys mutex pada tiga titik kritis dalam siklus hidup transaksi. CTS menghilangkan kebutuhan ini pada ketiga tahap tersebut.
| Tahap | Pendekatan tradisional | PolarTrans (CTS) |
|---|---|---|
| Permulaan transaksi | Mengalokasikan ID transaksi, menambahkannya ke rw_trx_ids, memperbarui rw_trx_set dan rw_trx_list—semuanya di bawah trx sys mutex | Mencatat informasi transaksi dalam log CTS, mengalokasikan slot secara modulo berdasarkan trx_id, dan menandai slot tersebut dengan tag aktif—tanpa lock |
| Commit transaksi | Menanyakan rw_trx_ids, menghapus ID transaksi, memperbarui rw_trx_set dan rw_trx_list—di bawah trx sys mutex | Memberikan cap waktu komitmen dan hanya memperbarui field CSN dalam log CTS |
| Penentuan visibilitas | Menyalin array ID transaksi aktif, mencatat ID transaksi minimum dan maksimum, serta menanyakan array tersebut untuk menentukan visibilitas baris—di bawah trx sys mutex | Membandingkan CSN dari transaksi read-only dengan field trx csn dalam catatan baris, menggunakan cap waktu komitmen maksimum sistem alih-alih read view |
PolarTrans menerapkan algoritma tanpa lock pada sebagian besar logika transaksi untuk meningkatkan throughput baik dalam skenario read-write maupun write-only.
Perbandingan kinerja
Pengujian berikut mengukur permintaan per detik (QPS) sebelum dan sesudah mengaktifkan PolarTrans.
Lingkungan pengujian:
| Parameter | Nilai |
|---|---|
| Kluster | PolarDB for MySQL 8.0, Edisi Kluster |
| Spesifikasi | 88 core, memori 710 GB |
| Tool pengujian | Sysbench |
| Volume data | 88 tabel, 12 juta baris per tabel |
Kasus uji:
Hasil: PolarTrans secara signifikan meningkatkan QPS dalam skenario read-write dan write-only.
Pada skenario read-only, PolarTrans tidak meningkatkan kinerja. Transaksi read-only sudah memperoleh manfaat dari caching read view, yang mengurangi overhead locking akibat penyalinan status transaksi.
Aktifkan PolarTrans
PolarTrans diaktifkan secara default saat Anda mengaktifkan fitur konsistensi global (mode kinerja tinggi). Untuk instruksi penyiapan, lihat bagian "Enable global consistency (high-performance mode)" pada topik Overview.