PolarDB for MySQL mengoptimalkan kontrol konkurensi indeks B-tree untuk meningkatkan performa operasi baca dan tulis yang sangat konkuren. Topik ini menjelaskan batasan, prasyarat, serta cara menggunakan optimalisasi kontrol konkurensi indeks B-tree.
Informasi latar belakang
Mesin penyimpanan InnoDB menggunakan indeks untuk mengatur tabel. Data tabel disimpan dalam indeks terkluster, sedangkan indeks lainnya disebut indeks sekunder. InnoDB menggunakan struktur indeks B-tree. Struktur pohon yang datar dan seimbang memastikan jumlah operasi I/O per akses data tetap kecil dan konsisten.
InnoDB menggunakan kunci untuk mengontrol akses konkuren ke halaman fisik (node B-tree). Setiap halaman fisik menyediakan kunci baca/tulis. Indeks B-tree terdiri dari beberapa node dan sisi. Secara umum, mengunci satu node tidak menjamin konsistensi baca/tulis ketika beberapa thread mengakses data secara bersamaan. Sebagai contoh, sebuah thread dapat mengubah beberapa halaman fisik selama operasi modifikasi struktur B-tree (SMO). Jika thread lain mengakses struktur B-tree pada saat yang sama, kesalahan dapat terjadi karena struktur B-tree dimodifikasi selama operasi baca atau tulis.
Untuk mencegah kesalahan tersebut, InnoDB memungkinkan sebuah thread memegang kunci beberapa node secara bersamaan guna memastikan konsistensi baca/tulis akses konkuren ke B-tree. Aturan penguncian diberlakukan untuk mencegah deadlock ketika beberapa thread mengakses struktur B-tree. InnoDB telah mengoptimalkan algoritma kontrol konkurensi B-tree berkali-kali untuk meningkatkan kemampuan baca dan tulis konkuren B-tree. Namun, masalah berikut masih ada:
Operasi SMO konkuren tidak didukung: Hanya satu SMO yang diizinkan pada satu waktu. Akibatnya, kunci indeks menjadi hambatan performa keseluruhan untuk operasi baca dan tulis yang sangat konkuren.
Sebuah thread memegang sejumlah besar kunci: Untuk mencegah deadlock, operasi optimistik harus memegang kunci dibagi (S) pada semua node di jalur penelusuran. Operasi pesimistik harus memegang semua kunci eksklusif (X) yang dapat memodifikasi node. Ketika thread memegang sejumlah besar kunci, konkurensi yang lebih tinggi menyebabkan konten kunci yang lebih intens, terutama pada node kunci.
PolarDB for MySQL mengoptimalkan kontrol konkurensi untuk indeks B-tree dan memberikan manfaat berikut:
Konkurensi lebih tinggi: Memungkinkan semua operasi mengakses indeks B-tree secara konkuren sambil menjaga konflik thread pada level halaman.
Granularitas kunci lebih kecil: Menggunakan kopling kait untuk semua operasi guna mengurangi jumlah kunci dan konflik thread.
Batasan
Optimalisasi ini hanya berlaku untuk indeks utama dan sekunder B-tree. Indeks teks lengkap dan indeks spasial tidak didukung.
Untuk menggunakan optimalisasi kontrol konkurensi B-tree, atur nilai parameter
innodb_adaptive_hash_indexke OFF.
Versi yang didukung
Kluster PolarDB for MySQL adalah Edisi Enterprise atau Edisi Standar dan menjalankan versi mesin database berikut:
MySQL 8.0.1 dengan versi revisi 8.0.1.1.28 atau lebih baru.
MySQL 8.0.2 dengan versi revisi 8.0.2.2.17 atau lebih baru.
Untuk informasi tentang cara memeriksa versi kluster, lihat Kueri Versi Mesin.
Penggunaan
Masuk ke Konsol PolarDB. Atur nilai parameter loose_innodb_polar_blink_tree ke ON untuk mengaktifkan optimalisasi kontrol konkurensi B-tree. Untuk informasi lebih lanjut tentang cara mengatur nilai parameter, lihat Tentukan Parameter Kluster dan Node. Tabel berikut menjelaskan parameter loose_innodb_polar_blink_tree:
Parameter | Level | Deskripsi |
loose_innodb_polar_blink_tree | Global | Mengaktifkan atau menonaktifkan optimalisasi kontrol konkurensi B-tree. Nilai valid:
|
Optimalisasi ini dinonaktifkan secara default. Setelah Anda mengubah nilai parameter loose_innodb_polar_blink_tree, kluster akan otomatis di-restart. Selama restart, layanan mungkin terganggu hingga satu menit. Durasi waktu pemulihan bervariasi berdasarkan volume data dan jumlah tabel. Kami menyarankan Anda melakukan operasi ini selama jam-jam sepi dan pastikan aplikasi Anda dikonfigurasi untuk secara otomatis menyambung ulang ke layanan database.
Tes performa
Performa InnoDB ketika optimalisasi kontrol konkurensi B-tree diaktifkan atau dinonaktifkan dalam skenario konkurensi tinggi (1.000 gudang) diuji berdasarkan benchmark TPC-C.
Ketika optimalisasi kontrol konkurensi B-tree dinonaktifkan, mencapai performa tertinggi ketika jumlah thread konkuren adalah 128.
Ketika optimalisasi kontrol konkurensi B-tree diaktifkan, mencapai performa tertinggi ketika jumlah thread konkuren adalah 256. Performa baca dan tulis meningkat hingga 140% dibandingkan ketika optimalisasi kontrol konkurensi B-tree dinonaktifkan.
