PolarDB prend en charge plusieurs politiques pour contrôler le degré de parallélisme (DOP) au niveau global ou par requête, et pour basculer vers une exécution séquentielle lorsque la charge des ressources est élevée.
Tous les paramètres du cluster dans la console PolarDB incluent le préfixe de compatibilité du fichier de configuration MySQL loose_. Lorsque vous modifiez des paramètres dans la console, utilisez les noms de paramètres qui incluent le préfixe loose_.
Fonctionnement
Lorsqu'une requête parallèle arrive, PolarDB applique trois niveaux de contrôle :
Politique de mise en file d'attente — Si le nombre total de workers parallèles en cours d'exécution atteint
loose_max_parallel_workers, les nouvelles requêtes parallèles entrent dans une file d'attente premier entré, premier sorti (FIFO) au lieu de s'exécuter immédiatement.Limite de capacité de la file d'attente — Si le DOP total des requêtes en attente atteint
loose_queuing_parallel_degree_limit, la file d'attente est considérée comme pleine et les requêtes suivantes basculent vers une exécution séquentielle.Délai d'expiration de la file d'attente — Si une requête attend dans la file d'attente plus longtemps que
loose_pq_max_queuing_time, elle est retirée de la file d'attente et bascule vers une exécution séquentielle.
Le fait que PolarDB tente ou non une exécution parallèle dépend de la politique DOP définie par loose_parallel_degree_policy.
Paramètres DOP
Tous les paramètres répertoriés ci-dessous nécessitent le préfixe loose_ lorsqu'ils sont configurés dans la console PolarDB.
Limites de mise en file d'attente et de workers
| Paramètre | Portée | Valeur par défaut | Description |
|---|---|---|---|
loose_max_parallel_workers |
Global | 2 × cœurs CPU | Nombre maximal de workers parallèles pour toutes les requêtes parallèles simultanées sur un seul nœud. Lorsque cette limite est atteinte, les nouvelles requêtes parallèles entrent dans une file d'attente FIFO. Dans un cluster serverless, cette valeur est ajustée automatiquement à mesure que les spécifications des nœuds évoluent. Valeurs valides : 1–10 000. |
loose_queuing_parallel_degree_limit |
Global | 64 | DOP total maximal pour les requêtes en attente dans la file d'attente. Lorsque cette limite est atteinte, la file d'attente est pleine et les requêtes parallèles supplémentaires basculent vers une exécution séquentielle. Valeurs valides : 0–10 000. |
loose_pq_max_queuing_time |
Global, session | 200 ms | Temps maximal pendant lequel une requête peut attendre dans la file d'attente avant de basculer vers une exécution séquentielle. Valeurs valides : 0–18 446 744 073 709 551 615 ms. |
Politique DOP
| Paramètre | Portée | Valeur par défaut | Description |
|---|---|---|---|
loose_parallel_degree_policy |
Global | REPLICA_AUTO |
Contrôle la manière dont PolarDB sélectionne le DOP pour chaque requête. Valeurs valides : TYPICAL, AUTO, REPLICA_AUTO. |
Comparaison des politiques :
| Valeur | Qui exécute les requêtes parallèles | Comment le DOP est sélectionné |
|---|---|---|
TYPICAL |
Nœud principal et nœuds en lecture seule | Fixe : utilise la valeur de loose_max_parallel_degree, indépendamment de l'utilisation actuelle du CPU |
AUTO |
Nœud principal et nœuds en lecture seule | Adaptatif : PolarDB active ou désactive l'exécution parallèle en fonction de l'utilisation du CPU, de l'utilisation de la mémoire et des opérations d'entrée/sortie par seconde (IOPS), et sélectionne le DOP en fonction du coût de la requête |
REPLICA_AUTO (par défaut) |
Nœuds en lecture seule uniquement | Adaptatif : identique à AUTO, mais le nœud principal utilise toujours l'exécution séquentielle |
Utilisez REPLICA_AUTO lorsque vous souhaitez protéger le nœud principal contre la surcharge des requêtes parallèles tout en permettant aux nœuds en lecture seule d'adapter les performances des requêtes de manière dynamique.
Seuils basés sur les ressources
Ces paramètres s'appliquent lorsque loose_parallel_degree_policy est défini sur AUTO ou REPLICA_AUTO. PolarDB désactive les requêtes parallèles sur un nœud lorsque l'un des seuils est dépassé.
| Paramètre | Portée | Valeur par défaut | Comportement du seuil |
|---|---|---|---|
loose_auto_dop_cpu_pct_hwm |
Global | 70 | Désactive les requêtes parallèles lorsque l'utilisation du CPU dépasse ce pourcentage. Valeurs valides : 0–100. |
loose_auto_dop_mem_pct_hwm |
Global | 90 | Désactive les requêtes parallèles lorsque l'utilisation de la mémoire dépasse ce pourcentage. Valeurs valides : 0–100. |
loose_auto_dop_iops_pct_hwm |
Global | 80 | Désactive les requêtes parallèles lorsque l'utilisation des IOPS dépasse ce pourcentage. Valeurs valides : 0–100. |
Surveiller l'exécution des requêtes parallèles
Utilisez les variables d'état suivantes pour suivre la fréquence à laquelle les requêtes parallèles basculent vers une exécution séquentielle.
| Variable | Portée | Description |
|---|---|---|
PQ_refused_over_total_workers |
Global, session | Nombre de requêtes qui ont basculé vers une exécution séquentielle parce que loose_max_parallel_workers a été atteint. Une augmentation du nombre indique que la limite de workers est peut-être trop faible pour votre charge de travail. Envisagez d'augmenter loose_max_parallel_workers. |
PQ_refused_over_max_queuing_time |
Global, session | Nombre de requêtes qui ont basculé vers une exécution séquentielle en raison d'un délai d'expiration de la file d'attente. Une augmentation du nombre indique que les requêtes attendent trop longtemps — envisagez d'augmenter loose_max_parallel_workers ou loose_queuing_parallel_degree_limit, ou d'augmenter loose_pq_max_queuing_time. |
Total_running_parallel_workers |
Global | Nombre actuel de workers parallèles actifs. Utilisez cette variable pour évaluer à quel point vous êtes proche de la limite loose_max_parallel_workers. |