Maison > Article > base de données > Jetez un œil au réglage des paramètres de concurrence MySQL
Recommandation d'apprentissage gratuite : Tutoriel vidéo MySQL
Ajustement des paramètres de concurrence MySQL
En termes de mise en œuvre, MySQL Server est une structure multithread, comprenant des threads d'arrière-plan et des threads de service client. Le multithreading peut utiliser efficacement les ressources du serveur et améliorer les performances de concurrence de la base de données. Dans Mysql, les principaux paramètres qui contrôlent les connexions et les threads simultanés incluent max_connections, back_log, thread_cache_size, table_open_cahce.
1. max_connections
Utilisez max_connections pour contrôler le nombre maximum de connexions autorisées à la base de données MySQL. La valeur par défaut est 151. Si la variable d'état connection_errors_max_connections n'est pas nulle et continue de croître, cela signifie que les demandes de connexion continuent d'échouer car le nombre de connexions à la base de données a atteint la valeur maximale autorisée. C'est pourquoi vous pouvez envisager d'augmenter la valeur de max_connections.
Remarque : Lorsque le nombre de demandes de connexion simultanées dépasse 151, aucune connexion n'est disponible pour gérer les demandes des clients. Ces connexions ultérieures seront en attente. Attendez que la connexion MySQL soit libérée. S'il n'y a pas de connexion inactive, la requête expirera
Le nombre maximum de connexions que MySQL peut prendre en charge dépend de nombreux facteurs, notamment la qualité de la bibliothèque de threads. de la plate-forme du système d'exploitation donnée, taille de la mémoire, charge par connexion, vitesse de traitement du processeur, temps de réponse attendu, etc. Sous la plate-forme Linux, il n'est pas difficile pour un serveur doté de bonnes performances de prendre en charge 500 à 1 000 connexions. Il doit être évalué et défini en fonction des performances du serveur .
2. back_log
Le paramètre back_log contrôle la taille de la pile de requêtes en attente définie lorsque MySQL écoute le port TCP. Si le nombre de connexions MySql atteint max_connections, les nouvelles requêtes seront stockées dans la pile pour attendre une certaine connexion afin de libérer des ressources. Le numéro de la pile est back_log. Si le nombre de connexions en attente dépasse back_log, les ressources de connexion ne seront pas accordées. . Une erreur sera signalée . La valeur par défaut avant la version 5.6.6 est 50 et la valeur par défaut pour les versions ultérieures est 50 + (max_connections / 5), mais le maximum ne dépasse pas 900.
Remarque : lorsque le nombre de requêtes simultanées envoyées par le client en même temps est supérieur à 151, les requêtes suivantes seront en attente. Le nombre de connexions en attente peut alors atteindre back_log. Ces nouvelles requêtes seront stockées dans la pile. attendre qu'une connexion soit libérée. Le nombre de piles est défini via back_log.
Si vous avez besoin que la base de données gère un grand nombre de demandes de connexion dans un court laps de temps, vous pouvez envisager d'augmenter de manière appropriée la valeur de back_log .
3. table_open_cache
Ce paramètre est utilisé pour contrôler le nombre de caches de tables qui peuvent être ouverts par tous les threads d'exécution d'instructions SQL lors de l'exécution d'un SQL. instruction, chaque Le thread d'exécution SQL doit ouvrir au moins 1 cache de table. La valeur de ce paramètre doit être définie en fonction du nombre maximum de connexions max_connections défini et du nombre maximum de tables impliquées dans l'exécution des requêtes associées pour chaque connexion :
max_connections x Remarque : ceci ne concerne pas une session spécifique, mais tous les threads d'exécution du client. Le nombre de caches de tables correspond au nombre de tables exploitées dans chaque instruction SQL. Par exemple, une instruction SQL exploite généralement au moins une table. Si vous exploitez une table, il y aura un cache de table. Si vous exploitez plusieurs tables, il y aura plusieurs caches de table.
mysql> show variables like 'table_open_cache%';+----------------------------+-------+| Variable_name | Value |+----------------------------+-------+| table_open_cache | 431 || table_open_cache_instances | 16 |+----------------------------+-------+2 rows in set (0.06 sec)
4. thread_cache_size
Afin d'accélérer la connexion à la base de données, MySQL mettra en cache un certain nombre de threads du service client pour les réutiliser, ce qui peut être contrôlé par le paramètre thread_cache_size Le nombre de threads du service client de cache MySQL. Description : Cela équivaut à ouvrir un pool de threads sur le serveur MySQL. Lorsque le client fait une demande, nous supprimons un thread dans le pool de threads pour effectuer le traitement des tâches.
mysql> show variables like 'thread_cache_size%';+-------------------+-------+| Variable_name | Value |+-------------------+-------+| thread_cache_size | 8 |+-------------------+-------+1 row in set (0.00 sec)Au total, 8 informations sur les threads sont mises en cache.
5. innodb_lock_wait_timeout
Ce paramètre est utilisé pour définir le temps pendant lequel les transactions InnoDB attendent les verrous de ligne. La valeur par défaut est de 50 ms et peut être définie. dynamiquement selon les besoins. Pour les systèmes d'entreprise qui nécessitent un retour rapide, le temps d'attente pour les verrous de ligne peut être ajusté plus petit pour éviter une suspension à long terme des transactions ; une opération de restauration s'est produite.
Explication : si dans un système d'entreprise à réponse relativement rapide, si le verrou de ligne n'est pas obtenu, signalez simplement une erreur directement, et il n'est pas nécessaire d'attendre longtemps que la transaction réponde temps. Comme vous pouvez le voir, le délai d'expiration par défaut est de 50 ms
mysql> show variables like 'innodb_lock_wait_timeout%';+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| innodb_lock_wait_timeout | 50 |+--------------------------+-------+1 row in set (0.01 sec)
Valeur |+--------------------- -- +-------+| innodb_lock_wait_timeout | 50 |+---------------+------ -+ 1 ligne dans l'ensemble (0,01 sec)
Plus de recommandations d'apprentissage gratuites associées : tutoriel mysql( Vidéo)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!