Cet article présente principalement la méthode de vérification du nombre de threads du serveur MySQL et analyse les commandes, configurations, paramètres et compétences d'utilisation associées pour vérifier le nombre de threads MySQL sous forme d'exemples. Les amis qui en ont besoin peuvent s'y référer. à cela. J'espère que cela pourra aider tout le monde.
Commande de redémarrage mysql :
/etc/init.d/mysql restart
Le nombre de threads du serveur MySQL doit être dans une plage raisonnable, afin de garantir la santé et la fluidité de l'exécution du serveur MySQL. Threads_created indique le nombre de threads créés. En affichant Threads_created, vous pouvez visualiser l'état du processus du serveur MySQL.
mysql> show global status like 'Thread%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_cached | 46 | | Threads_connected | 2 | | Threads_created | 570 | | Threads_running | 1 | +-------------------+-------+
Si nous définissons thread_cache_size dans le fichier de configuration du serveur MySQL, lorsque le client se déconnecte, le thread du serveur traitant ce client sera mis en cache pour répondre à un client. en le détruisant (à condition que le nombre de caches n'atteigne pas la limite supérieure).
Threads_created indique le nombre de threads créés. Si la valeur Threads_created s'avère trop grande, cela indique que le serveur MySQL a créé des threads, ce qui est également relativement gourmand en ressources. Vous pouvez augmenter de manière appropriée la taille du thread_cache_size. valeur dans le fichier de configuration et interrogez le serveur
configuration thread_cache_size :
mysql> show variables like 'thread_cache_size'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | thread_cache_size | 64 | +-------------------+-------+
Le serveur dans l'exemple est assez sain.
Analyser plusieurs paramètres MySQL liés au nombre de connexions
Les variables et statuts de MySQL sont de puissants outils de gestion et de maintenance, tout comme le spfile d'Oracle et le tableau v$.
MySQL enregistre de nombreuses informations de configuration via des variables système, telles que le nombre maximum de connexions max_connections :
mysql> show variables like '%connect%'; +--------------------------+-----------------+ | Variable_name | Value | +--------------------------+-----------------+ | character_set_connection | utf8 | | collation_connection | utf8_general_ci | | connect_timeout | 10 | | init_connect | SET NAMES utf8 | | max_connect_errors | 10 | | max_connections | 200 | | max_user_connections | 0 | +--------------------------+-----------------+ 7 rows in set (0.00 sec)
Ce paramètre fait référence au nombre de clients connectés en même temps, la valeur par défaut dans la version 5.1 est 151, alors le nombre réel de connexions prises en charge est cette valeur plus une, qui est 152, car une connexion doit être réservée pour que l'administrateur système puisse se connecter pour voir information. La taille de ce paramètre doit être prise en compte en fonction de nombreux facteurs, tels que le nombre de bibliothèques de threads prises en charge par la plate-forme utilisée (Windows ne peut en prendre en charge que jusqu'à 2048), la configuration du serveur (en particulier la taille de la mémoire) et les ressources occupées par chaque connexion. (mémoire et charge) Combien, le temps de réponse requis par le système, etc. Généralement, les systèmes Linux peuvent prendre en charge des centaines de simultanéités sans aucun problème. Ce paramètre peut être modifié dans le scope global ou session :
mysql> set global max_connections=151; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%connect%'; +--------------------------+-----------------+ | Variable_name | Value | +--------------------------+-----------------+ | character_set_connection | utf8 | | collation_connection | utf8_general_ci | | connect_timeout | 10 | | init_connect | SET NAMES utf8 | | max_connect_errors | 10 | | max_connections | 151 | | max_user_connections | 0 | +--------------------------+-----------------+ 7 rows in set (0.00 sec)
Il faut cependant noter que l'augmentation du nombre de connexions entraînera de nombreuses réactions en chaîne , qui doit être mis en œuvre dans la pratique. Éviter les conséquences négatives de cela.
Tout d'abord, jetons un coup d'œil à la sortie d'état :
mysql> status -------------- mysql Ver 14.14 Distrib 5.1.49, for pc-linux-gnu (i686) using readline 5.1 Connection id: 255260 Current database: mysql Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.1.49-log MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 161 days 3 hours 42 min 38 sec Threads: 14 Questions: 160655492 Slow queries: 71 Opens: 8124 Flush tables: 3 Open tables: 64 Queries per second avg: 11.538 --------------
Voici un Open tables
La sortie est 64, ce qui signifie la table actuellement ouvert dans la base de données Le nombre est 64. Il convient de noter que ce 64 ne correspond pas aux 64 tables réelles. MySQL étant un système multithread, plusieurs connexions simultanées différentes peuvent ouvrir la même table, ce qui nécessite une allocation indépendante des sessions. différentes connexions. Espace mémoire pour stocker ces informations afin d’éviter les conflits. Par conséquent, une augmentation du nombre de connexions entraînera une augmentation du nombre de descripteurs de fichiers requis par MySQL. De plus, pour les tables MyISAM, un descripteur de fichier d'index partagé sera également créé.
Ainsi au niveau de la base de données MySQL, il existe plusieurs paramètres système qui déterminent le nombre de tables pouvant être ouvertes simultanément et les descripteurs de fichiers à utiliser, à savoir table_open_cache, max_tmp_tables et open_files_limit.
mysql> show variables like 'table_open%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | table_open_cache | 64 | +------------------+-------+ 1 row in set (0.00 sec)
Le paramètre table_open_cache ici est 64, ce qui signifie que tous les threads MySQL peuvent ouvrir un total de 64 tables en même temps. Nous pouvons collecter les enregistrements historiques du système sur le nombre de tables ouvertes. et comparez-les avec ce paramètre. Décidez si vous souhaitez augmenter la taille de ce paramètre. Une façon de vérifier le nombre actuel de tables ouvertes consiste à utiliser la commande status
mentionnée ci-dessus. De plus, vous pouvez directement interroger la valeur de cette variable système :
mysql> show status like 'open%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | Open_files | 3 | | Open_streams | 0 | | Open_table_definitions | 8 | | Open_tables | 8 | | Opened_files | 91768 | | Opened_table_definitions | 0 | | Opened_tables | 0 | +--------------------------+-------+ 7 rows in set (0.00 sec) mysql> show global status like 'open%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | Open_files | 3 | | Open_streams | 0 | | Open_table_definitions | 10 | | Open_tables | 11 | | Opened_files | 91791 | | Opened_table_definitions | 1211 | | Opened_tables | 8158 | +--------------------------+-------+ 7 rows in set (0.00 sec)
Open_tables ici est le nombre de tables actuellement ouvertes. Les tables actuellement ouvertes peuvent être fermées via la commande flush tables. Les Opened_tables vues globalement sont une valeur cumulée historique. Si cette valeur est trop grande, et si la commande flush tables
n'est pas exécutée fréquemment, vous pouvez envisager d'augmenter la taille du paramètre table_open_cache.
Ensuite, regardez le paramètre max_tmp_tables :
mysql> show variables like 'max_tmp%'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | max_tmp_tables | 32 | +----------------+-------+ 1 row in set (0.00 sec)
Ce paramètre spécifie le nombre de tables temporaires qui peuvent être ouvertes par une seule connexion client. Afficher les informations de la table temporaire actuellement ouverte :
mysql> show global status like '%tmp%table%'; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | Created_tmp_disk_tables | 10478 | | Created_tmp_tables | 25860 | +-------------------------+-------+ 2 rows in set (0.00 sec)
Vous pouvez également comparer ces deux valeurspour déterminer l'emplacement de création de la table temporaire, généralement sélectionnez les colonnes BLOB et TEXT, Groupe Lorsque le volume de données des instructions by et Distinct dépasse 512 octets, ou lorsque les données d'une colonne sélectionnée lors de l'union dépasse 512 octets, une table temporaire est créée directement sur le disque. Si la table en mémoire devient plus grande, il se peut également que MySQL se déplace automatiquement vers le disque (déterminé par les paramètres tmp_table_size et max_heap_table_size).
继续原来的讨论,增加table_open_cache或 max_tmp_tables 参数的大小后,从操作系统的角度看,mysqld进程需要使用的文件描述符的个数就要相应的增加,这个是由 open_files_limit参数控制的。但是这个参数是OS限制的,所以我们设定的值并不一定总是生效。如果OS限制MySQL不能修改这个值,那 么置为0。如果是专用的MySQL服务器上,这个值一般要设置的尽量大,就是没有报Too many open files错误的最大值,这样就能一劳永逸了。当操作系统无法分配足够的文件描述符的时候,mysqld进程会在错误日志里记录警告信息。
mysql> show variables like 'open_files%';+------------------+-------+| Variable_name | Value |+------------------+-------+| open_files_limit | 1024 |+------------------+-------+1 row in set (0.00 sec) mysql> show variables like 'open_files%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | open_files_limit | 1024 | +------------------+-------+ 1 row in set (0.00 sec)
对应的,有两个状态变量记录了当前和历史的文件打开信息:
mysql> show global status like '%open%file%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Open_files | 3 | | Opened_files | 91799 | +---------------+-------+ 2 rows in set (0.01 sec)
MySQL为每个连接分配线程来处理,可以通过threads_connected参数查看当前分配的线程数量:
mysql> show status like '%thread%'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | Delayed_insert_threads | 0 | | Slow_launch_threads | 0 | | Threads_cached | 0 | | Threads_connected | 14 | | Threads_created | 255570 | | Threads_running | 2 | +------------------------+--------+ 6 rows in set (0.00 sec)
比较这个threads_connected参数和前面提到的max_connections参数,也可以作为目前的系统负载的参照,决定是否需要修改连接数。
如果查看每个thread的更详细的信息,可以使用processlist
命令:
mysql> show processlist; +--------+-----------+--------------------+----------+-------------+----------+----------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +--------+-----------+--------------------+----------+-------------+----------+----------------------------------------------------------------+------------------+ | 8293 | repl | 192.168.0.33:47208 | NULL | Binlog Dump | 11574424 | Has sent all binlog to slave; waiting for binlog to be updated | NULL | | 140991 | mogile | 192.168.0.33:41714 | mogilefs | Sleep | 0 | | NULL | | 140992 | mogile | 192.168.0.33:41715 | mogilefs | Sleep | 3 | | NULL | | 140993 | mogile | 192.168.0.33:41722 | mogilefs | Sleep | 2 | | NULL | | 140994 | mogile | 192.168.0.33:41723 | mogilefs | Sleep | 1 | | NULL | | 140995 | mogile | 192.168.0.33:41724 | mogilefs | Sleep | 3 | | NULL | | 254914 | mogile | 192.168.0.33:43028 | mogilefs | Sleep | 11074 | | NULL | | 254915 | mogile | 192.168.0.33:43032 | mogilefs | Sleep | 11091 | | NULL | | 255144 | mogile | 192.168.0.33:47514 | mogilefs | Sleep | 11090 | | NULL | | 255157 | mogile | 192.168.0.33:47535 | mogilefs | Sleep | 11087 | | NULL | | 255162 | mogile | 192.168.0.33:47549 | mogilefs | Sleep | 11074 | | NULL | | 255260 | root | localhost | mysql | Query | 0 | NULL | show processlist | | 255352 | maopaodev | 192.168.0.78:55399 | maopaodb | Sleep | 3172 | | NULL | | 255353 | maopaodev | 192.168.0.78:55400 | NULL | Sleep | 8926 | | NULL | +--------+-----------+--------------------+----------+-------------+----------+----------------------------------------------------------------+------------------+ 14 rows in set (0.00 sec)
执行这个命令需要有Process_priv权限,具体的权限分配信息可以查看mysql.user表。
对于影响系统运行的thread,可以狠一点,用kill connection
|query threadid
的命令杀死它。
相关推荐:
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!