PolarDB mendukung berbagai kebijakan untuk mengontrol tingkat paralelisme (DOP) secara global atau per kueri, serta melakukan fallback ke eksekusi sekuensial secara graceful saat beban resource tinggi.
Semua parameter kluster di Konsol PolarDB mencakup awalan kompatibilitas file konfigurasi MySQL loose_. Saat memodifikasi parameter di konsol, gunakan nama parameter yang mencakup awalan loose_.
Cara kerja
Saat kueri paralel tiba, PolarDB menerapkan tiga lapisan kontrol:
Queuing policy — Jika jumlah total parallel worker yang sedang berjalan mencapai
loose_max_parallel_workers, kueri paralel baru masuk ke antrian first-in, first-out (FIFO) alih-alih langsung dijalankan.Queue capacity limit — Jika total DOP dari kueri yang dalam antrian mencapai
loose_queuing_parallel_degree_limit, antrian dianggap penuh dan kueri berikutnya melakukan fallback ke eksekusi sekuensial.Queue timeout — Jika kueri menunggu dalam antrian lebih lama dari
loose_pq_max_queuing_time, kueri tersebut dikeluarkan dari antrian dan melakukan fallback ke eksekusi sekuensial.
Apakah PolarDB mencoba eksekusi paralel sama sekali tergantung pada kebijakan DOP yang ditetapkan oleh loose_parallel_degree_policy.
Parameter DOP
Semua parameter yang tercantum di bawah ini memerlukan awalan loose_ saat dikonfigurasi di Konsol PolarDB.
Batas antrian dan worker
| Parameter | Ruang Lingkup | Bawaan | Deskripsi |
|---|---|---|---|
loose_max_parallel_workers | Global | 2 × jumlah core CPU | Jumlah maksimum parallel worker di seluruh kueri paralel konkuren pada satu node. Saat batas ini tercapai, kueri paralel baru masuk ke antrian FIFO. Pada kluster serverless, nilai ini disesuaikan secara otomatis seiring perubahan spesifikasi node. Nilai valid: 1–10.000. |
loose_queuing_parallel_degree_limit | Global | 64 | Total DOP maksimum untuk kueri yang menunggu dalam antrian. Saat batas ini tercapai, antrian dianggap penuh dan kueri paralel tambahan melakukan fallback ke eksekusi sekuensial. Nilai valid: 0–10.000. |
loose_pq_max_queuing_time | Global, session | 200 ms | Waktu maksimum yang dapat ditunggu kueri dalam antrian sebelum melakukan fallback ke eksekusi sekuensial. Nilai valid: 0–18.446.744.073.709.551.615 ms. |
Kebijakan DOP
| Parameter | Ruang Lingkup | Bawaan | Deskripsi |
|---|---|---|---|
loose_parallel_degree_policy | Global | REPLICA_AUTO | Mengontrol cara PolarDB memilih DOP untuk setiap kueri. Nilai valid: TYPICAL, AUTO, REPLICA_AUTO. |
Perbandingan kebijakan:
| Nilai | Siapa yang Menjalankan Kueri Paralel | Cara pemilihan DOP |
|---|---|---|
TYPICAL | Node primary dan node read-only | Tetap: menggunakan nilai loose_max_parallel_degree, terlepas dari penggunaan CPU saat ini |
AUTO | Node primary dan node read-only | Adaptif: PolarDB mengaktifkan atau menonaktifkan eksekusi paralel berdasarkan penggunaan CPU, penggunaan memori, dan operasi input/output per detik (IOPS), serta memilih DOP berdasarkan biaya kueri |
REPLICA_AUTO (bawaan) | Hanya node read-only | Adaptif: sama seperti AUTO, tetapi node primary selalu menggunakan eksekusi sekuensial |
Gunakan REPLICA_AUTO jika Anda ingin melindungi node primary dari overhead kueri paralel sekaligus memungkinkan node read-only meningkatkan performa kueri secara adaptif.
Ambang batas berbasis resource
Parameter berikut berlaku ketika loose_parallel_degree_policy diatur ke AUTO atau REPLICA_AUTO. PolarDB menonaktifkan kueri paralel pada suatu node jika salah satu ambang batas terlampaui.
| Parameter | Ruang Lingkup | Bawaan | Perilaku ambang batas |
|---|---|---|---|
loose_auto_dop_cpu_pct_hwm | Global | 70 | Menonaktifkan kueri paralel ketika penggunaan CPU melebihi persentase ini. Nilai valid: 0–100. |
loose_auto_dop_mem_pct_hwm | Global | 90 | Menonaktifkan kueri paralel ketika penggunaan memori melebihi persentase ini. Nilai valid: 0–100. |
loose_auto_dop_iops_pct_hwm | Global | 80 | Menonaktifkan kueri paralel ketika penggunaan IOPS melebihi persentase ini. Nilai valid: 0–100. |
Monitor eksekusi kueri paralel
Gunakan variabel status berikut untuk melacak seberapa sering kueri paralel melakukan fallback ke eksekusi sekuensial.
| Variabel | Ruang Lingkup | Deskripsi |
|---|---|---|
PQ_refused_over_total_workers | Global, session | Jumlah kueri yang melakukan fallback ke eksekusi sekuensial karena loose_max_parallel_workers telah tercapai. Jumlah yang meningkat menunjukkan batas worker mungkin terlalu rendah untuk workload Anda. Pertimbangkan untuk menaikkan loose_max_parallel_workers. |
PQ_refused_over_max_queuing_time | Global, session | Jumlah kueri yang melakukan fallback ke eksekusi sekuensial karena timeout antrian. Jumlah yang meningkat menunjukkan kueri menunggu terlalu lama — pertimbangkan untuk menaikkan loose_max_parallel_workers atau loose_queuing_parallel_degree_limit, atau menaikkan loose_pq_max_queuing_time. |
Total_running_parallel_workers | Global | Jumlah parallel worker aktif saat ini. Gunakan ini untuk mengukur seberapa dekat Anda dengan batas loose_max_parallel_workers. |