Workload intensif tulis dengan konkurensi tinggi pada PolarDB for MySQL dapat mencapai batas throughput akibat perilaku penguncian indeks B-tree InnoDB. Optimasi kontrol konkurensi B-tree menghilangkan bottleneck serialisasi di tingkat indeks, memungkinkan semua operasi berjalan secara paralel dengan kontensi kunci dibatasi hanya pada tingkat halaman.
Cara kerja
InnoDB mengorganisasi data tabel dalam clustered index dan menggunakan struktur indeks B-tree baik untuk indeks primary maupun secondary. Setiap halaman fisik (node B-tree) memiliki kunci baca/tulis. Ketika sebuah thread melakukan operasi modifikasi struktur (SMO)—yaitu operasi yang mengubah beberapa halaman fisik sekaligus, seperti pemisahan atau penggabungan node—InnoDB harus memegang kunci pada semua node yang terpengaruh untuk mencegah inkonsistensi.
Perilaku penguncian ini menimbulkan dua bottleneck dalam kondisi konkurensi tinggi:
Satu SMO dalam satu waktu: Hanya satu SMO yang dapat berjalan dalam satu waktu. Kunci indeks melakukan serialisasi terhadap semua perubahan struktural, sehingga membatasi throughput.
Cakupan kunci yang luas: Untuk menghindari deadlock, operasi optimistik memegang kunci bersama (S) pada setiap node sepanjang jalur traversal, sedangkan operasi pesimistik memegang kunci eksklusif (X) pada setiap node yang berpotensi berubah. Semakin banyak thread konkuren, semakin tinggi kontensi kunci, yang terkonsentrasi pada node-node tersibuk.
PolarDB for MySQL mengatasi kedua bottleneck tersebut:
SMO konkuren: Semua operasi dapat mengakses indeks B-tree secara simultan. Konflik antar thread dibatasi pada tingkat halaman, bukan tingkat indeks.
Latch coupling: Semua operasi menggunakan latch coupling sehingga hanya memegang satu kunci halaman dalam satu waktu, mengurangi jumlah kunci yang dipegang sekaligus durasi kontensi.
Prasyarat
Sebelum mengaktifkan optimasi ini, pastikan kluster Anda memenuhi semua kondisi berikut:
Edition: Edisi Perusahaan atau Edisi Standar
Versi engine: MySQL 8.0.1 (revisi 8.0.1.1.28 atau lebih baru) atau MySQL 8.0.2 (revisi 8.0.2.2.17 atau lebih baru)
Adaptive hash index:
innodb_adaptive_hash_indexharus diatur ke OFFJenis indeks: Hanya indeks primary dan secondary berbasis B-tree yang didukung. Indeks full-text dan spatial index tidak didukung.
Untuk memeriksa versi engine Anda, lihat Query an engine version.
Aktifkan optimasi kontrol konkurensi B-tree
Mengaktifkan atau menonaktifkan optimasi ini akan secara otomatis me-restart kluster. Layanan mungkin terganggu hingga satu menit. Waktu pemulihan bervariasi tergantung pada volume data dan jumlah tabel. Lakukan perubahan ini selama jam sepi dan pastikan aplikasi Anda terhubung ulang ke database secara otomatis.
Masuk ke PolarDB console.
Atur
loose_innodb_polar_blink_treeke ON. Untuk petunjuk cara mengatur nilai parameter, lihat Specify cluster and node parameters.
Tabel berikut menjelaskan parameter tersebut:
| Parameter | Level | Deskripsi |
|---|---|---|
loose_innodb_polar_blink_tree | Global | Mengaktifkan atau menonaktifkan optimasi kontrol konkurensi B-tree. Nilai yang valid: OFF (default) dan ON. |
Pertimbangan performa
Manfaatnya bergantung pada tingkat konkurensi dan pola workload Anda:
Workload intensif menulis dengan konkurensi tinggi (banyak thread bersaing pada indeks yang sama) memperoleh peningkatan terbesar.
Workload dengan konkurensi moderat atau dominan membaca memperoleh manfaat yang lebih kecil, karena kunci di tingkat indeks jarang menjadi faktor pembatas.
Berdasarkan benchmark TPC-C pada 1.000 warehouse:
Tanpa optimasi: Performa puncak pada 128 thread konkuren.
Dengan optimasi: Performa puncak pada 256 thread konkuren — peningkatan 140% dalam throughput baca dan tulis dibandingkan baseline tanpa optimasi.
