Maison  >  Article  >  base de données  >  Exemple de code d'optimisation de connexion d'optimisation MySQL

Exemple de code d'optimisation de connexion d'optimisation MySQL

黄舟
黄舟original
2017-03-16 14:24:151408parcourir

L'optimisation de la connexion

MySQL fait principalement référence aux paramètres impliqués dans le processus de connexion du client à la base de données et à la base de données ouvrant la table de données et index dans réponse à la demande du client Ajustement. Discutons en détail de l'

optimisation MySQL mentionnée ci-dessus Cache Optimisation Cet article mentionne un concept très important, c'est-à-dire que les variables d'affichage sont utilisées pour représenter la compilation ou la configuration du système . valeur dans my.cnf. Afficher l'état est appelé valeur statut, qui affiche les informations d'état de l'instance de service en cours d'exécution, qui est une valeur qui change dynamiquement. Par conséquent, il est souvent utilisé pour observer si le MySQL actuel fonctionne normalement. Si ce n'est pas normal, comptez sur l'ajustement des paramètres statiques pour améliorer les performances de MySQL. Par conséquent, comprendre la différence entre ces deux concepts constitue la base d’un réglage ultérieur.

Optimisation de la connexion MySQL

Je me souviens d'une fois où j'essayais de me connecter à MySQL au sein de l'entreprise, je ne parvenais pas toujours à me connecter. Après avoir trouvé le DBA, nous avons étudié la cause et constaté que le nombre actuel de connexions MySQL était saturé. Après ajustements, le problème a été résolu. Il y a généralement deux raisons pour lesquelles les erreurs provoquent un trop grand nombre de connexions. La première est qu'il y a effectivement de nombreuses personnes qui se connectent à MySQL, ce qui entraîne une épuisement du nombre de connexions. La seconde est que la valeur max_connections est trop petite.

1. Paramètres de connexion (afficher les variables)


mysql> show variables like '%connect%';
+-----------------------------------------------+-----------------+
| Variable_name                 | Value      |
+-----------------------------------------------+-----------------+
| character_set_connection           | utf8      |
| collation_connection             | utf8_general_ci |
| connect_timeout                | 10       |
| disconnect_on_expired_password        | ON       |
| init_connect                 |         |
| max_connect_errors              | 100       |
| max_connections                | 151       |
| max_user_connections             | 0        |
| performance_schema_session_connect_attrs_size | 512       |
+-----------------------------------------------+-----------------+

max_connections fait référence aux paramètres de l'instance de service MySQL. peut accepter en même temps Le nombre maximum de connexions simultanées. MySQL prend en charge l'algorithme consistant à en ajouter une au nombre maximum de connexions, garantissant que lorsque le nombre de connexions est épuisé, le super-administrateur peut toujours établir une connexion avec le serveur pour la gestion.

max_user_connectionsDéfinissez le nombre maximum de connexions simultanées pour le compte spécifié.

max_connect_errors Lorsqu'un hôte illégal se connecte de manière malveillante au serveur MySQL et que les erreurs qu'il rencontre atteignent la valeur définie, MySQL résoudra toutes les connexions de l'hôte. Cependant, il sera effacé après l'exécution des hôtes flush.

2. État de la connexion (afficher l'état)

Une chose à noter est que la valeur de la variable (afficher les variables) commence par une lettre minuscule, tandis que la valeur de l'état ( afficher le statut) commence par une lettre majuscule. Cette distinction est utile pour la mémoire et la classification


mysql> show status like '%connections%';
+-----------------------------------+-------+
| Variable_name           | Value |
+-----------------------------------+-------+
| Connection_errors_max_connections | 0   |
| Connections            | 197  |
| Max_used_connections       | 2   |
+-----------------------------------+-------+

Connection_errors_max_connections Lorsque le nombre maximum de concurrence de MySQL est supérieur à max_connections dans la variable système (afficher les variables) Le nombre maximum de concurrences et donc le nombre de rejets seront enregistrés dans cette variable. Si la valeur de Connection_error_max_connections est relativement grande, cela signifie que la concurrence actuelle du système est relativement élevée et vous devriez envisager d'augmenter la valeur de max_connections.

Connections indique le nombre de connexions établies avec succès depuis le démarrage de MySQL. Cette valeur est accumulée en continu.

Max_used_connections indique le nombre maximum de connexions simultanées en même temps depuis le démarrage de MySQL. Si cette valeur est supérieure à max_connections, cela indique que le système est souvent dans un état de concurrence élevée et que vous devez envisager d'augmenter le nombre maximum de connexions simultanées.

3. Paramètres du fil de connexion (variables et statut du fil)


mysql> show variables like 'thread%';
+--------------------+---------------------------+
| Variable_name   | Value           |
+--------------------+---------------------------+
| thread_cache_size | 9             |
| thread_concurrency | 10            |
| thread_handling  | one-thread-per-connection |
| thread_stack    | 262144          |
+--------------------+---------------------------+

thread_cache_size Définir le nombre de fil de connexion caches. Ce cache est équivalent au pool de cache de threads MySQL (pool de cache de threads), qui place les threads de connexion inactifs dans le pool de connexions et les met en cache au lieu de les détruire immédiatement. Lorsqu'il y a une nouvelle demande de connexion, s'il y a une connexion inactive dans le pool de connexions, elle est utilisée directement. Sinon, le fil de discussion doit être recréé. La création de threads représente une surcharge système considérable. Cette partie du traitement des threads de MySQL est similaire au traitement des threads de Nginx. Lorsque je présenterai le traitement des threads de Nginx à l'avenir, je les comparerai.

thread_handling La valeur par défaut est : un thread par connexion signifie fournir ou créer un thread pour chaque connexion afin de traiter la demande jusqu'à ce que la demande soit terminée, que la connexion soit détruite ou stockée dans le pool de cache. . Lorsque la valeur est no-threads, cela signifie qu'un seul thread est toujours fourni pour gérer la connexion, ce qui est généralement utilisé pour les tests sur une seule machine.

thread_stack stack signifie tas. Ce blog explique le processus PHP en détail. On sait que les processus et les threads ont des identifiants uniques. Le système d'identification du processus sera déterminé. par la maintenance de la zone de bibliothèque d'ID spécifique. Lorsqu'un processus ou un thread est en veille, les informations contextuelles du processus doivent ouvrir une zone dans la mémoire pour enregistrer les informations contextuelles du processus afin que le programme puisse être rapidement réveillé. La taille de pile par défaut définie pour chaque thread de MySQL est : 262144/1024=256k

Afficher les informations sur l'état du thread


mysql> show status like 'Thread%';
+-------------------+-------+
| Variable_name   | Value |
+-------------------+-------+
| Threads_cached  | 1   |
| Threads_connected | 1   |
| Threads_created  | 2   |
| Threads_running  | 1   |
+-------------------+-------+

Thread_cached Numéro actuel de threads dans le pool de threads

Thread_connected Nombre actuel de connexions

Thread_cached: 当前连接线程创建数, 如果这个值过高,可以调整threadcachesize 也就是调整线程缓存池的大小。

Thred_runnint: 当前活跃的线程数。

连接请求堆栈

MySQL在很短的时间内,突然收到很多的连接请求时,MySQL会将不能来得及处理的连接请求保存在堆栈中,以便MySQL后续处理。back_log参数设置了堆栈的大小,可以通过如下命令查看:


mysql> show variables like 'back_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| back_log   | 80  |
+---------------+-------+

连接异常


mysql> show status like 'Aborted%';
+------------------+-------+
| Variable_name  | Value |
+------------------+-------+
| Aborted_clients | 0   |
| Aborted_connects | 219  |
+------------------+-------+

Aborted_clients MySQL 客户机被异常关闭的次数。

Aborted_connects 试图连接到MySQL服务器而失败的连接次数。

other


mysql> show status like 'Slow%';
+---------------------+-------+
| Variable_name    | Value |
+---------------------+-------+
| Slow_launch_threads | 0   |
| Slow_queries    | 0   |
+---------------------+-------+


mysql> show variables like 'slow_launch_time';
+------------------+-------+
| Variable_name  | Value |
+------------------+-------+
| slow_launch_time | 2   |
+------------------+-------+

Slow_lunch_threads 创建线程的时间过长,超过slow_launch_time的设定值,则会记录。

可以通过使用 Connection_error%来查看连接的错误状态信息:


mysql> show status like 'Connection_error%';
+-----------------------------------+-------+
| Variable_name           | Value |
+-----------------------------------+-------+
| Connection_errors_accept     | 0   |
| Connection_errors_internal    | 0   |
| Connection_errors_max_connections | 0   |
| Connection_errors_peer_address  | 0   |
| Connection_errors_select     | 0   |
| Connection_errors_tcpwrap     | 0   |
+-----------------------------------+-------+

Connection_errors_peer_address 查找MySQL客户机IP地址是发生的错误数。

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn