Par défaut, MySQL crée un thread dédié par session. En cas de forte concurrence, cela entraîne une surcharge importante liée à l'ordonnancement des threads et une invalidation fréquente du cache, ce qui dégrade les performances. La fonctionnalité Thread Pool découple les threads des sessions afin que plusieurs sessions partagent un pool de threads plus restreint, limitant ainsi la surcharge d'ordonnancement et maintenant un taux élevé de succès dans le cache. Elle est particulièrement adaptée aux charges de travail OLTP caractérisées par des requêtes courtes, intensives en CPU, et un nombre élevé de connexions simultanées.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Une instance RDS exécutant MySQL 5.6, 5,7 ou 8,0
Fonctionnement
Le thread pool résout le goulot d'étranglement lié au modèle « un thread par session » grâce à deux mécanismes :
Ordonnancement basé sur les priorités : Les instructions SQL de gestion des données (établissement de connexion, surveillance, commandes administratives) reçoivent une priorité élevée et s'exécutent avant les requêtes de moindre priorité. Les requêtes complexes — celles contenant des sous-requêtes, des fonctions d'agrégation ou des clauses GROUP BY et LIMIT — se voient attribuer une faible priorité, ce qui empêche qu'elles n'affament les autres charges de travail.
Contrôle de la concurrence : Les threads sont répartis en groupes. Chaque groupe limite le nombre de threads actifs simultanément, maintenant la surcharge d'ordonnancement dans une plage gérable et préservant l'efficacité du cache.
Ces mécanismes combinés garantissent la stabilité de la base de données lors de pics de connexions concurrentes.
Configurer le thread pool
Configurez les paramètres du thread pool dans la console ApsaraDB for RDS. Pour plus d'informations, consultez la rubrique Modifier les paramètres d'une instance ApsaraDB RDS for MySQL.
| Paramètre | Valeur par défaut | Description |
|---|---|---|
thread_pool_enabled |
ON | Active ou désactive le thread pool. Valeurs valides : ON, OFF. Le paramètre obsolète thread_handling n'a aucun effet. L'activation ou la désactivation de ce paramètre ne nécessite pas le redémarrage de l'instance. |
thread_pool_size |
4 | Nombre de groupes de threads. Les threads du pool sont répartis uniformément entre les groupes et gérés par groupe. |
thread_pool_oversubscribe |
32 | Nombre maximal de threads actifs par groupe. Un thread est considéré comme actif lorsqu'il exécute une instruction SQL. Les threads en attente d'E/S disque ou de validation d'une transaction sont inactifs et ne comptent pas dans cette limite. |
Surveiller l'activité du thread pool
Exécutez la commande suivante pour vérifier l'état actuel du thread pool :
SHOW STATUS LIKE 'thread_pool%';
Exemple de sortie :
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)
| Variable d'état | Description |
|---|---|
thread_pool_active_threads |
Threads exécutant actuellement une instruction SQL. |
thread_pool_big_threads |
Threads exécutant des instructions SQL complexes (contenant des sous-requêtes, des fonctions d'agrégation ou des clauses GROUP BY et LIMIT). |
thread_pool_dml_threads |
Threads exécutant des instructions DML (Data Manipulation Language). |
thread_pool_idle_threads |
Threads sans tâche assignée. |
thread_pool_qry_threads |
Threads exécutant des instructions SQL simples. |
thread_pool_total_threads |
Nombre total de threads dans le pool. |
thread_pool_trx_threads |
Threads exécutant des transactions. |
thread_pool_wait_threads |
Threads en attente d'E/S disque ou de validation d'une transaction. |
Tests de performance
Les résultats de test SysBench ci-dessous illustrent le débit avec le thread pool activé par rapport à sa version désactivée, selon plusieurs scénarios de sessions concurrentes. Le thread pool offre systématiquement un débit supérieur à mesure que le nombre de sessions concurrentes augmente.




