Savoir quand utiliser des pools de threads

Effectué

Vous savez déjà que le serveur MySQL gère un cache de threads disponibles pour les nouvelles connexions et qu’un thread devenu inutile est détruit.

Azure Database pour MySQL vous permet de configurer un pool de threads, une fonctionnalité qui fournit un pool de threads de travail limitant le nombre de threads actifs exécutés sur le serveur. Pour les charges de travail avec de nombreuses connexions de courte durée et des requêtes de transaction courtes, cette fonctionnalité améliore les performances et la scalabilité d’Azure Database pour MySQL.

L’édition Enterprise de MySQL offre un plug-in de pool de threads.

Notes

Le pool de threads est une fonctionnalité du serveur flexible Azure Database pour MySQL et n’est pris en charge que sur la version 8.0 ou ultérieure.

L’utilisation du pool de threads est plus susceptible d’être efficace dans les scénarios suivants :

  • Plus de 500 connexions simultanées.
  • Utilisation élevée du processeur.
  • Rafales élevées de connexions en même temps.

L’utilisation du pool de threads est moins susceptible d’être efficace dans les scénarios suivants :

  • Longues périodes d’inactivité suivies d’une activité élevée.
  • Requêtes longues qui n’attendent jamais.
  • IOPS insuffisantes. Azure Database pour MySQL autorise des IOPS supplémentaires jusqu’à 20 000 au-dessus de la limite des IOPS.

Pour activer le pool de threads dans le portail Azure :

  1. Accédez à votre serveur Azure Database pour MySQL, puis sélectionnez Paramètres du serveur.
  2. Dans la barre de recherche, entrez thread_handling pour afficher le paramètre thread_handling.
  3. Remplacez la valeur par pool-of-threads. Par défaut, ce paramètre est défini sur one-thread-per-connection, ce qui entraîne la création d’un thread pour chaque nouvelle connexion.

Notes

thread_handling est un paramètre statique et n’est appliqué qu’au redémarrage du serveur. Vous pouvez également le modifier avec Azure CLI.

Deux autres paramètres peuvent améliorer les performances en permettant aux threads de rester actifs et d’attendre la prochaine requête. C’est ce qu’on appelle l’exécution par lots. Les paramètres sont les suivants :

  • thread_pool_batch_wait_timeout. Ce paramètre spécifie la durée maximale pendant laquelle un thread attend une autre requête.
  • thread_pool_batch_max_time. Ce paramètre spécifie le nombre de fois qu’un thread répétera le cycle d’exécution et d’attente de la requête.

Vous pouvez également définir le nombre de threads dans le pool en définissant les paramètres de serveur suivants :

  • thread_pool_max_threads : Ce paramètre définit le nombre maximal de threads dans le pool à tout moment.
  • thread_pool_min_threads : Ce paramètre définit le nombre minimal de threads qui seront réservés dans le pool, même après la fermeture des connexions.

Notes

MySQL 5.6 ne prend pas en charge les pools de threads.