Pour optimiser les performances d'ApsaraDB for RDS, Alibaba Cloud propose un thread pool. Cette fonctionnalité dissocie les threads des sessions, permettant à un nombre restreint de threads de gérer les tâches d'un grand nombre de sessions actives.
Avantages
Le modèle de connexion MySQL par défaut repose sur le principe « un thread par session ». Lorsqu'un grand nombre de sessions se connectent, ce modèle peut entraîner une forte contention des ressources. La surcharge liée à la planification des threads système et à l'invalidation fréquente du cache peut provoquer une chute brutale des performances.
Le thread pool d'ApsaraDB for RDS met en œuvre un mécanisme de contrôle des priorités et de la concurrence pour différents types d'opérations SQL. Il maintient le nombre de threads concurrents à un niveau optimal, garantissant ainsi des performances élevées même sous de fortes charges de travail concurrentes. Les principaux avantages du thread pool sont :
Sous forte concurrence, le thread pool maintient le nombre de threads actifs dans une plage optimale. Cela réduit la surplanification des threads et l'invalidation excessive du cache.
Pour les transactions concurrentes, le thread pool réduit la contention des ressources en attribuant différentes priorités aux instructions SQL et aux transactions, tout en contrôlant leur niveau de concurrence.
Le thread pool accorde la priorité aux instructions SQL administratives, assurant ainsi que les opérations telles que la création de nouvelles connexions, la gestion et la surveillance s'exécutent de manière fiable, même lorsque la charge système est élevée.
Le thread pool attribue une priorité plus faible aux instructions SQL complexes et impose une limite maximale de concurrence. Cela empêche qu'un trop grand nombre d'instructions SQL complexes n'épuisent les ressources système et ne rendent le service de base de données indisponible.
Prérequis
Votre instance RDS exécute MySQL 5.6, 5,7, 8,0 ou 8,4.
Paramètres du thread pool
Configurez le thread pool à l'aide des trois paramètres suivants dans la console. Pour plus d'informations, consultez Configurer les paramètres de l'instance.
| Paramètre | Description |
| loose_thread_pool_enabled | Indique si la fonctionnalité thread pool est activée. Valeurs possibles :
Valeur par défaut : ON. Remarque
|
| loose_thread_pool_size | Nombre de groupes de threads. Valeur par défaut : 4. Les threads du pool sont répartis uniformément entre ces groupes pour la gestion. |
| loose_thread_pool_oversubscribe | Nombre de threads actifs autorisés dans chaque groupe de threads. Valeur par défaut : 32. Un thread actif est un thread qui exécute une instruction SQL, à l'exclusion des cas suivants :
|
État du thread pool
Pour interroger l'état du thread pool, exécutez la commande suivante :
show status like "thread_pool%";
Exemple :
mysql> show status like "thread_pool%";
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| thread_pool_active_threads | 1 |
| thread_pool_big_threads | 0 |
| thread_pool_dml_threads | 0 |
| thread_pool_idle_threads | 19 |
| thread_pool_qry_threads | 0 |
| thread_pool_total_threads | 20 |
| thread_pool_trx_threads | 0 |
| thread_pool_wait_threads | 0 |
+----------------------------+-------+
8 rows in set (0.00 sec)
Le tableau suivant décrit les variables d'état.
| Paramètre | Description |
| thread_pool_active_threads | Nombre de threads actifs dans le thread pool. |
| thread_pool_big_threads | Nombre de threads dans le thread pool qui exécutent des requêtes complexes. Les requêtes complexes incluent celles comportant des sous-requêtes, des fonctions d'agrégation ou des clauses telles que GROUP BY et LIMIT. |
| thread_pool_dml_threads | Nombre de threads dans le thread pool qui exécutent des instructions DML. |
| thread_pool_idle_threads | Nombre de threads inactifs dans le thread pool. |
| thread_pool_qry_threads | Nombre de threads dans le thread pool qui exécutent des requêtes simples. |
| thread_pool_total_threads | Nombre total de threads dans le thread pool. |
| thread_pool_trx_threads | Nombre de threads dans le thread pool qui exécutent des transactions. |
| thread_pool_wait_threads | Nombre de threads dans le thread pool qui attendent des opérations d'E/S disque ou la validation de transactions. |
Tests SysBench
Les figures suivantes comparent les performances avec le thread pool activé et désactivé. Les résultats des tests indiquent que le thread pool offre un avantage significatif en termes de performances sous de fortes charges de travail concurrentes.




