382 Stimmen

Wie kann man die vollständige Abfrage vom SHOW PROCESSLIST sehen?

Wenn ich die Abfrage SHOW PROCESSLIST ausführe, werden nur die ersten 100 Zeichen der laufenden SQL-Abfrage in der Info-Spalte zurückgegeben.

Ist es möglich, die MySQL-Konfiguration zu ändern oder eine andere Art von Abfrage zu stellen, um die komplette Abfrage zu sehen (die Abfragen, die ich betrachte, sind länger als 100 Zeichen)?

618voto

James McNellis Punkte 337231
SHOW FULL PROCESSLIST

Wenn Sie nicht FULL verwenden, werden im Info-Feld nur "die ersten 100 Zeichen jedes Statements angezeigt"..

Bei Verwendung von phpMyAdmin sollten Sie auch auf die Option "Vollständige Texte" klicken (" T " oben links in einer Ergebnistabelle), um nicht abgeschnittene Ergebnisse zu sehen.

3 Stimmen

Es scheint, dass phpmyadmin sich nicht darum kümmert und die abgeschnittene Information immer noch anzeigt.

0 Stimmen

@gorgio79: Wenn ich mich richtig erinnere, kürzt phpMyAdmin alle String-Ergebnisse ab. Es sind jedoch vier Jahre her, seit ich mich mit der Webentwicklung beschäftigt habe, daher könnte ich mich auch täuschen.

2 Stimmen

Ich sehe, dass Anfragen nach einer bestimmten Länge abgeschnitten werden, auch wenn ich SHOW FULL PROCESSLIST verwende. Kann ich es irgendwie noch vollständiger machen?

148voto

Yogesh A Sakurikar Punkte 1531

Show Processlist ruft die Informationen aus einer anderen Tabelle ab. So können Sie die Daten abrufen und die 'INFO'-Spalte betrachten, die die gesamte Abfrage enthält:

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

Sie können Bedingungen hinzufügen oder ignorieren, je nach Bedarf.

Das Ergebnis der Abfrage lautet:

+-------+------+-----------------+--------+---------+------+-----------+----------------------------------------------------------+
| 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' |

19 Stimmen

Dies ist wahrscheinlich die nützlichste Antwort.

0 Stimmen

Meine Infospalte zeigt COMMIT. Weißt du, wie ich weitere Details über die tatsächliche Abfrage anzeigen kann?

0 Stimmen

Localhost:41060, wofür steht 41060? Irgendeine Vermutung?

25voto

Siehe die vollständige Abfrage von SHOW PROCESSLIST :

SHOW FULL PROCESSLIST;

Oder

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;

15voto

hardcoder Punkte 553

Ich habe gerade in der MySQL-Dokumentation gelesen, dass SHOW FULL PROCESSLIST standardmäßig nur die Threads von Ihrer aktuellen Benutzerverbindung auflistet.

Zitat aus der MySQL SHOW FULL PROCESSLIST-Dokumentation:

Wenn Sie das PROZESS-Privileg haben, können Sie alle Threads sehen.

Sie können also die Process_priv-Spalte in Ihrer mysql.user-Tabelle aktivieren. Denken Sie daran, danach FLUSH PRIVILEGES auszuführen :)

0 Stimmen

Das stimmt nicht, wenn du root bist.

15voto

cristianoms Punkte 2906

Wenn man fortlaufend aktualisierte Prozesse erhalten möchte (in diesem Beispiel alle 2 Sekunden) in einer Shell-Sitzung, ohne manuell damit interagieren zu müssen, verwendet man:

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

Das einzige Problem bei show [full] processlist ist, dass man das Ergebnis nicht filtern kann. Andererseits ermöglicht es das Ausführen von SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST, alles zu entfernen, was man nicht sehen möchte:

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

1 Stimmen

Dies ist die einzige Antwort, die das Schlüsselelement zu enthalten scheint, um die ursprüngliche Frage zu beantworten, nämlich die info Spalte ohne die Abfrage abgeschnitten zu bekommen: die Abfrage mit \G statt ; zu beenden

0 Stimmen

Sie könnten versuchen, mytop(1) zu verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X