Maison > base de données > tutoriel mysql > Analyse Mysql-afficher les détails de PROCESSLIST

Analyse Mysql-afficher les détails de PROCESSLIST

黄舟
Libérer: 2017-03-02 16:02:12
original
2395 Les gens l'ont consulté

La dernière fois que j'ai créé un système de vote, il est resté bloqué pendant longtemps pendant la période de pointe de l'activité, et l'effet de l'augmentation temporaire de la bande passante n'était pas évident.

Accédez au serveur pour analyse. Une grande quantité de CPU dans top est consommée en attente d'IO . Tous les signes indiquent MySQL, une requête de journal lente et une structure d'index, mais je pense que le problème fondamental n'a pas été trouvé. Enfin, en show Lors de processlist, un grand nombre de processus de verrouillage ont été trouvés. Haha, le problème est évident.

La table de vote utilise le moteur mysiam Une fois les votes comptés, la mise à jour verrouille la table C'est vrai. De plus, les performances du serveur sont généralement lentes et le programme ne rétrograde pas de manière asynchrone lors du traitement de la page de vote. La combinaison de facteurs conduit à un processus très lent. Mais le facteur clé était toujours trouvé, c'était le verrouillage MySQL.


Ainsi, lorsque des problèmes avec les performances de MySQL sont détectés, SHOW PROCESSLIST est toujours très efficace pour montrer quels threads sont en cours d'exécution, par exemple :




Les informations sur la colonne d'état sont très importantes. Examinons d'abord la signification de chaque colonne, puis examinons le statut d'état commun


la signification de chaque colonne

1. id :

Un identifiant, utilisé lorsque vous souhaitez tuer une instruction, telle que mysql>

2. Utilisateur :

Affichez l'utilisateur actuel si vous n'êtes pas root, cette commande affichera uniquement les instructions SQL au sein de votre autorité

3. Hôte :

Affiche l'adresse IP et le port à partir desquels cette déclaration a été envoyée, ce qui peut être utilisé pour suivre l'utilisateur qui a émis la déclaration problématique

4. db :

Afficher à quel processus ce processus est actuellement connecté

5. la commande exécutée de la connexion en cours, Habituellement, dormir, interroger, se connecter heure : La durée. de cet état, l'unité est la seconde

7. état :

affiche l'état de l'instruction SQL en utilisant la connexion actuelle. une colonne très importante est juste une instruction. Un certain état lors de l'exécution, comme une requête, doit être copié. vers la table tmp, le résultat du tri, l'envoi de données et d'autres états peuvent être complétés

8. info : Afficher cette instruction SQL En raison de sa longueur limitée, les instructions SQL longues ne sont pas entièrement affichées, mais c'est une base importante pour juger les déclarations de problèmes


Analyse des états courants

1. >

signifie généralement que la ressource n'a pas été libérée. Si elle se fait via un pool de connexions, l'état de veille doit être constant dans une certaine plage, par exemple : Le temps d'interrogation des données est de 0,1 seconde et la sortie réseau prend environ 1 seconde. La connexion de données d'origine peut être libérée en 0,1 seconde, mais à cause du frontal. Le programme n'effectue pas l'opération de fermeture et affiche directement les résultats, les résultats ne sont pas affichés sur le bureau de l'utilisateur. Avant, la connexion à la base de données était maintenue en état de veille

<.>

2. Verrouillé

L'opération est généralement verrouillée. occurrence du statut verrouillé

Copier dans la table tmp

Lorsque l'index et la structure existante ne peuvent pas couvrir les conditions de la requête, ils seront créés. Une table temporaire est utilisée pour répondre aux exigences de la requête, ce qui entraîne une énorme pression d'E/S. généralement lié aux requêtes de jointure de table. Il est recommandé de réduire les requêtes associées ou d'optimiser en profondeur les instructions de requête. Si le temps d'exécution des instructions dans cet état est trop long, il sera sérieusement affecté pour d'autres opérations. cette fois

4. Envoi de données

L'envoi de données n'est pas l'envoi de données, c'est le processus d'obtention de données à partir du disque physique. Si vous avez un ensemble de résultats à impact important, vous devez les extraire de différents fragments de disque, lors de l'envoi. Il y a trop de connexions de données. Habituellement, l'ensemble de résultats d'impact d'une certaine requête est trop grand, c'est-à-dire que les éléments d'index de la requête ne sont pas suffisamment optimisés

5. Stockage du résultat dans le cache de requête


Si cet état se produit fréquemment, utilisez le profilage défini. à analyser. S'il y a une surcharge de ressources dans le SQL global. Si la proportion de surcharge est trop importante (même s'il s'agit d'une très petite surcharge, regardez la proportion), cela signifie que la requête Il existe de nombreux fragments de cache. Utilisez le cache de requêtes vide pour le nettoyer immédiatement. Les paramètres du cache de requêtes peuvent être définis de manière appropriée

Ce qui précède sont les détails de MySQL Analysis-show PROCESSLIST Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal