Comment voir la requête complète de SHOW PROCESSLIST

296

Lorsque j'émets une requête SHOW PROCESSLIST, seuls les 100 premiers caractères de la requête SQL en cours d'exécution sont renvoyés dans la colonne d'informations.

Est-il possible de modifier la configuration de Mysql ou d'émettre un autre type de demande pour voir la requête complète (les requêtes que je regarde sont plus longues que 100 caractères)

Cavalier fantôme
la source

Réponses:

482
SHOW FULL PROCESSLIST

Si vous n'utilisez pas FULL, "seuls les 100 premiers caractères de chaque instruction sont affichés dans le Infochamp" .

Lorsque vous utilisez phpMyAdmin, vous devez également cliquer sur l'option "Texte intégral" ("← T →" dans le coin supérieur gauche d'un tableau de résultats) pour voir les résultats non tronqués.

James McNellis
la source
3
Il semble que phpmyadmin ne s'en soucie pas et affiche toujours les informations tronquées.
giorgio79
@ giorgio79: Si je me souviens bien, phpMyAdmin tronque tous les résultats de chaîne. Cela fait quatre ans que je n'ai fait aucun développement web, donc je peux très bien me tromper.
James McNellis
2
Je vois des requêtes être tronquées après une certaine durée, même lors de l'utilisation SHOW FULL PROCESSLIST. Puis-je le rendre encore plus complet d'une manière ou d'une autre?
wizonesolutions
la commande a SHOW FULL PROCESSLISTbesoin d'un point-virgule ;à la fin, non?
Rakibul Haq
1
@ R.Haq Si c'est la seule requête que vous allez faire, le point-virgule n'est pas nécessaire. Si vous souhaitez effectuer plusieurs requêtes, vous avez besoin du point-virgule après chacune d'elles.
Julio Garcia
85

Show Processlist récupère les informations d'une autre table. Voici comment vous pouvez extraire les données et regarder la colonne 'INFO' qui contient la requête entière:

select * from INFORMATION_SCHEMA.PROCESSLIST where db = 'somedb';

Vous pouvez ajouter n'importe quelle condition ou ignorer en fonction de vos besoins.

La sortie de la requête est le résultat:

+-------+------+-----------------+--------+---------+------+-----------+----------------------------------------------------------+
| ID    | USER | HOST            | DB     | COMMAND | TIME | STATE     | INFO                                                     |
+-------+------+-----------------+--------+---------+------+-----------+----------------------------------------------------------+
|     5 | ssss | localhost:41060 | somedb | Sleep   |    3 |           | NULL                                                     |
| 58169 | root | localhost       | somedb | Query   |    0 | executing | select * from sometable where tblColumnName = 'someName' |
Yogesh A Sakurikar
la source
12
C'est probablement la réponse la plus utile.
dr_
Ma colonne d'informations s'affiche COMMIT. Savez-vous comment afficher plus de détails sur la requête réelle?
m.spyratos
localhost: 41060, que signifie 41060? toute proposition ?
Farveen Hassan
12

Je viens de lire dans la documentation MySQL qui SHOW FULL PROCESSLISTpar défaut ne répertorie que les threads de votre connexion utilisateur actuelle .

Citation de la documentation MySQL SHOW FULL PROCESSLIST:

Si vous disposez du privilège PROCESS, vous pouvez voir tous les threads.

Vous pouvez donc activer la Process_privcolonne dans votre mysql.usertable. N'oubliez pas d'exécuter FLUSH PRIVILEGESensuite :)

hardcoder
la source
12

Voir la requête complète de SHOW PROCESSLIST:

SHOW FULL PROCESSLIST;

Ou

 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
Hasib Kamal
la source
10

Si l'on veut continuer à obtenir des processus mis à jour (dans l'exemple, 2 secondes) sur une session shell sans avoir à interagir manuellement avec elle, utilisez:

watch -n 2 'mysql -h 127.0.0.1 -P 3306 -u some_user -psome_pass some_database -e "show full processlist;"'

La seule mauvaise chose à propos de la, show [full] processlistc'est que vous ne pouvez pas filtrer le résultat de sortie. D'un autre côté, émettre les SELECT * FROM INFORMATION_SCHEMA.PROCESSLISTpossibilités ouvertes pour supprimer de la sortie tout ce que vous ne voulez pas voir:

SELECT * from INFORMATION_SCHEMA.PROCESSLIST
WHERE DB = 'somedatabase'
AND COMMAND <> 'Sleep'
AND HOST NOT LIKE '10.164.25.133%' \G
cristianoms
la source