PolarDB for MySQL menyediakan dua kelompok item konfigurasi untuk fitur query paralel elastis: parameter kluster yang dapat Anda atur di Konsol PolarDB dan variabel status tingkat sesi yang dapat Anda kueri saat runtime.
Parameter kueri paralel
Semua parameter kluster di Konsol PolarDB menggunakan awalan loose_ untuk kompatibilitas dengan file konfigurasi MySQL. Saat memodifikasi parameter di Konsol PolarDB, pilih parameter yang mencakup awalan loose_.
Parameter berikut mengontrol cara kerja query paralel elastis, mencakup tingkat paralelisme (DOP) untuk kueri individual, anggaran total parallel worker, perilaku antrian, serta ambang batas jumlah baris dan biaya yang memicu eksekusi paralel.
| Parameter | Ruang Lingkup | Deskripsi |
|---|---|---|
loose_max_parallel_degree | Global, session | DOP maksimum untuk satu kueri. Menetapkan batas atas jumlah parallel worker untuk kueri tersebut. Nilai yang valid: 0–1024. Default: 0 (query paralel elastis dinonaktifkan). |
loose_max_parallel_workers | Global | Jumlah maksimum parallel worker untuk seluruh kueri. Kueri yang melebihi batas ini akan diantrikan. Nilai yang valid: 1–10.000. Default: dua kali jumlah core CPU. |
loose_queuing_parallel_degree_limit | Global | Jumlah maksimum nilai DOP yang diizinkan dalam antrian pada waktu tertentu. Kueri yang melebihi batas ini akan kembali ke eksekusi sekuensial. Nilai yang valid: 0–10.000. Default: 64. |
loose_pq_max_queuing_time | Global, session | Waktu maksimum yang boleh ditunggu oleh suatu kueri dalam antrian. Kueri yang melebihi batas ini akan kembali ke eksekusi sekuensial. Nilai yang valid: 0–18.446.744.073.709.551.615. Default: 200 (milidetik). |
loose_parallel_degree_policy | Global | Kebijakan pemilihan DOP untuk kueri individual. Nilai yang valid: TYPICAL, AUTO, REPLICA_AUTO (default). Untuk detailnya, lihat Kebijakan DOP. |
loose_records_threshold_for_parallelism | Session | Jumlah minimum baris yang harus dipindai oleh suatu kueri sebelum pengoptimal mempertimbangkan eksekusi paralel. Nilai yang valid: 0–18.446.744.073.709.551.615. Default: 10000. |
loose_cost_threshold_for_parallelism | Session | Biaya minimum eksekusi sekuensial sebelum pengoptimal mempertimbangkan eksekusi paralel. Nilai yang valid: 0–18.446.744.073.709.551.615. Default: 50000. |
loose_records_threshold_for_mpp | Session | Jumlah minimum baris yang dipindai dari tabel yang terlibat dalam pernyataan kueri sebelum pengoptimal mempertimbangkan permintaan paralel elastis multi-node. Nilai yang valid: 0–18.446.744.073.709.551.615. Default: 0 (N × loose_records_threshold_for_parallelism, dengan N adalah jumlah node dalam kluster). |
loose_cost_threshold_for_mpp | Session | Biaya minimum eksekusi sekuensial sebelum pengoptimal mempertimbangkan permintaan paralel elastis multi-node. Nilai yang valid: 0–18.446.744.073.709.551.615. Default: 0 (N × loose_cost_threshold_for_parallelism, dengan N adalah jumlah node dalam kluster). |
Catatan parameter
`loose_max_parallel_degree`
Pengoptimal PolarDB dapat menjalankan kueri utama dan subkueri menggunakan rencana eksekusi paralel terpisah. Saat rencana terpisah digunakan, jumlah total worker adalah jumlah worker untuk kueri utama dan semua subkueri — tidak dibatasi oleh loose_max_parallel_degree per subkueri. Saat rencana yang sama digunakan, jumlah total worker tidak boleh melebihi loose_max_parallel_degree.
Pengaturan konsol dan loose_max_parallel_degree berinteraksi sebagai berikut:
Jika query paralel elastis diaktifkan di Konsol PolarDB dan
loose_max_parallel_degreejuga diatur, maka pengaturan konsol yang berlaku. Aktifkan query paralel elastis di Konsol PolarDB untuk sebagian besar skenario.Jika query paralel elastis tidak diaktifkan di Konsol PolarDB tetapi
loose_max_parallel_degreediatur ke nilai lebih besar dari0, fitur ini akan diaktifkan secara otomatis.
`loose_max_parallel_workers`
Pada kluster serverless, nilai loose_max_parallel_workers disesuaikan secara otomatis seiring penskalaan spesifikasi node. Untuk detail kebijakan antrian, lihat Parameter yang menentukan kebijakan antrian kueri paralel.
`loose_parallel_degree_policy`
| Nilai | Perilaku |
|---|---|
TYPICAL | DOP selalu diatur ke loose_max_parallel_degree, terlepas dari beban database atau pemanfaatan CPU. |
AUTO | Pengoptimal mengaktifkan atau menonaktifkan query paralel elastis berdasarkan beban database (termasuk pemanfaatan CPU) dan memilih DOP berdasarkan biaya kueri. |
REPLICA_AUTO (default) | Node read-only menentukan apakah akan mengaktifkan query paralel elastis berdasarkan beban database dan memilih DOP berdasarkan biaya kueri. Node primary tidak menjalankan query paralel elastis. |
`loose_records_threshold_for_parallelism`
Jika sebagian besar kueri Anda bersifat sederhana dan melibatkan volume data kecil, atur ambang batas ini minimal ke 2000 untuk menghindari pemicuan eksekusi paralel yang tidak perlu.
Pengaturan yang direkomendasikan
Gunakan panduan berikut sebagai titik awal untuk konfigurasi kluster Anda:
| Tujuan | Rekomendasi |
|---|---|
| Mengaktifkan kueri paralel | Atur loose_max_parallel_degree ke nilai lebih besar dari 0, atau aktifkan fitur tersebut di Konsol PolarDB. |
| Membatasi konsumsi parallel worker | Kurangi loose_max_parallel_workers dari nilai default-nya (dua kali jumlah core CPU) jika kueri paralel mengonsumsi terlalu banyak resource. Sesuaikan berdasarkan nilai Total_running_parallel_workers yang diamati. |
| Menghindari paralelisme yang tidak perlu pada beban kerja OLTP | Naikkan loose_records_threshold_for_parallelism ke 2000 atau lebih tinggi jika sebagian besar kueri bersifat sederhana dan hanya menyentuh dataset kecil. |
| Membatasi kueri paralel hanya pada node read-only | Gunakan loose_parallel_degree_policy = REPLICA_AUTO (default) agar node primary bebas dari overhead kueri paralel. |
| Menyetel kueri paralel multi-node | Biarkan loose_records_threshold_for_mpp dan loose_cost_threshold_for_mpp pada nilai default-nya yaitu 0 agar mewarisi ambang batas single-node yang diskalakan berdasarkan jumlah node. Naikkan nilai tersebut hanya jika paralelisme multi-node terpicu terlalu agresif. |
Variabel kueri paralel
Gunakan variabel status berikut untuk memantau query paralel elastis saat runtime dan mendiagnosis mengapa eksekusi paralel mungkin tidak terpicu untuk kueri tertentu. Kueri variabel ini dengan SHOW GLOBAL STATUS atau SHOW SESSION STATUS.
| Variabel | Ruang Lingkup | Deskripsi |
|---|---|---|
Parallel_workers_created | Global, session | Jumlah total parallel worker yang dibuat sejak session dimulai. |
Gather_records | Global, session | Jumlah total catatan yang dikumpulkan oleh parallel worker. |
PQ_refused_over_total_workers | Global, session | Jumlah kueri yang kembali ke eksekusi sekuensial karena batas total parallel worker (loose_max_parallel_workers) telah tercapai. |
PQ_refused_over_max_queuing_time | Global, session | Jumlah kueri yang kembali ke eksekusi sekuensial karena waktu tunggu antrian melebihi loose_pq_max_queuing_time. |
Total_running_parallel_workers | Global | Jumlah parallel worker yang sedang berjalan. |
Jika PQ_refused_over_total_workers atau PQ_refused_over_max_queuing_time terus meningkat, kueri paralel sedang dikendalikan alirannya akibat konflik sumber daya. Tingkatkan loose_max_parallel_workers atau loose_pq_max_queuing_time untuk mengurangi fallback ke eksekusi sekuensial.