So sehen Sie die vollständige Abfrage in der SHOW PROCESSLIST

296

Wenn ich die SHOW PROCESSLIST-Abfrage ausstelle, werden nur die ersten 100 Zeichen der ausgeführten SQL-Abfrage in der Info-Spalte zurückgegeben.

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

Geisterfahrer
quelle

Antworten:

482
SHOW FULL PROCESSLIST

Wenn Sie nicht verwenden FULL, werden "nur die ersten 100 Zeichen jeder Anweisung im InfoFeld angezeigt " .

Wenn Sie phpMyAdmin verwenden, sollten Sie auch auf die Option "Volltexte" ("← T →" in der oberen linken Ecke einer Ergebnistabelle) klicken, um nicht abgeschnittene Ergebnisse anzuzeigen.

James McNellis
quelle
3
Es scheint, dass phpmyadmin sich nicht darum kümmert und immer noch die abgeschnittenen Informationen anzeigt.
Giorgio79
@ giorgio79: Wenn ich mich richtig erinnere, schneidet phpMyAdmin alle String-Ergebnisse ab. Es ist jedoch vier Jahre her, seit ich eine Webentwicklung durchgeführt habe, also könnte ich mich sehr gut irren.
James McNellis
2
Ich sehe, dass Abfragen nach einer bestimmten Länge abgeschnitten werden, selbst wenn sie verwendet werden SHOW FULL PROCESSLIST. Kann ich es irgendwie noch voller machen?
Zauberlösungen
Der Befehl SHOW FULL PROCESSLISTbenötigt ;am Ende ein Semikolon, oder?
Rakibul Haq
1
@ R.Haq Wenn dies die einzige Abfrage ist, die Sie ausführen werden, ist das Semikolon nicht erforderlich. Wenn Sie mehr als eine Abfrage durchführen möchten, benötigen Sie nach jeder Abfrage das Semikolon.
Julio Garcia
85

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

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

Sie können je nach Anforderung eine beliebige Bedingung hinzufügen oder ignorieren.

Die Ausgabe der Abfrage ergibt sich wie folgt:

+-------+------+-----------------+--------+---------+------+-----------+----------------------------------------------------------+
| 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
quelle
12
Dies ist wahrscheinlich die nützlichste Antwort.
dr_
Meine Info-Spalte zeigt COMMIT. Wissen Sie, wie ich weitere Details zur eigentlichen Abfrage anzeigen kann?
m.spyratos
localhost: 41060, wofür steht 41060? Irgendwelche Ideen ?
Farveen Hassan
12

Ich habe gerade in der MySQL-Dokumentation gelesen, dass SHOW FULL PROCESSLISTstandardmäßig nur die Threads Ihrer aktuellen Benutzerverbindung aufgelistet sind .

Zitat aus der MySQL SHOW FULL PROCESSLIST-Dokumentation:

Wenn Sie über die Berechtigung PROCESS verfügen, können Sie alle Threads anzeigen.

So können Sie die Process_privSpalte in Ihrer mysql.userTabelle aktivieren . Denken Sie daran, FLUSH PRIVILEGESdanach auszuführen :)

Hardcoder
quelle
12

Siehe vollständige Abfrage von SHOW PROCESSLIST:

SHOW FULL PROCESSLIST;

Oder

 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
Hasib Kamal
quelle
10

Wenn Sie in einer Shell-Sitzung ständig aktualisierte Prozesse (im Beispiel 2 Sekunden) erhalten möchten, ohne manuell damit interagieren zu müssen, verwenden Sie:

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

Das einzig schlechte daran show [full] processlistist, dass Sie das Ausgabeergebnis nicht filtern können. Auf der anderen Seite geben Sie die SELECT * FROM INFORMATION_SCHEMA.PROCESSLISToffenen Möglichkeiten aus, um alles, was Sie nicht sehen möchten, aus der Ausgabe zu entfernen:

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