Jak zobaczyć pełne zapytanie z SHOW PROCESSLIST

296

Po wydaniu zapytania SHOW PROCESSLIST w kolumnie informacyjnej zwracane jest tylko pierwsze 100 znaków uruchomionego zapytania SQL.

Czy można zmienić konfigurację MySQL lub wysłać zapytanie innego rodzaju, aby zobaczyć pełne zapytanie (zapytania, na które patrzę, są dłuższe niż 100 znaków)

Ghostrider
źródło

Odpowiedzi:

482
SHOW FULL PROCESSLIST

Jeśli nie użyjesz FULL, „w Infopolu pojawi się tylko pierwsze 100 znaków każdej instrukcji ” .

Korzystając z phpMyAdmin, powinieneś również kliknąć opcję „Pełny tekst” („← T →” w lewym górnym rogu tabeli wyników), aby zobaczyć nieskalowane wyniki.

James McNellis
źródło
3
Wygląda na to, że phpmyadmin nie dba o to i nadal wyświetla skrócone informacje.
giorgio79
@ giorgio79: Jeśli dobrze pamiętam, phpMyAdmin obcina wszystkie wyniki łańcucha. Minęły cztery lata, odkąd zajmowałem się tworzeniem stron internetowych, więc mogłem się bardzo mylić.
James McNellis
2
Widzę, że zapytania są obcinane po pewnym czasie, nawet podczas używania SHOW FULL PROCESSLIST. Czy mogę jakoś go jeszcze wypełnić?
wizonesolutions
polecenie SHOW FULL PROCESSLISTwymaga średnika ;na końcu, prawda?
Rakibul Haq
1
@ R.Haq Jeśli to jedyne zapytanie, które chcesz wykonać, średnik nie jest konieczny. Jeśli chcesz wykonać więcej niż jedno zapytanie, potrzebujesz średnika po każdym z nich.
Julio Garcia,
85

Pokaż listę procesów pobiera informacje z innej tabeli. Oto jak możesz pobrać dane i spojrzeć na kolumnę „INFO”, która zawiera całe zapytanie:

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

Możesz dodać dowolny warunek lub zignorować w zależności od wymagań.

Wynik zapytania jest uzyskiwany jako:

+-------+------+-----------------+--------+---------+------+-----------+----------------------------------------------------------+
| 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
źródło
12
To prawdopodobnie najbardziej przydatna odpowiedź.
dr_
Moja kolumna informacji pokazuje COMMIT. Czy wiesz, jak mogę wyświetlić więcej szczegółów na temat rzeczywistego zapytania?
m.spyratos
localhost: 41060, co oznacza 41060? jakieś pomysły ?
Farveen Hassan
12

Właśnie przeczytałem w dokumentacji MySQL, która SHOW FULL PROCESSLISTdomyślnie zawiera listę wątków z bieżącego połączenia użytkownika .

Cytat z dokumentacji MySQL SHOW FULL PROCESSLIST:

Jeśli masz uprawnienie PROCES, możesz zobaczyć wszystkie wątki.

Możesz więc włączyć Process_privkolumnę w swojej mysql.usertabeli. Pamiętaj, aby wykonać FLUSH PRIVILEGESpóźniej :)

hardcoder
źródło
12

Zobacz pełne zapytanie z SHOW PROCESSLIST:

SHOW FULL PROCESSLIST;

Lub

 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
Hasib Kamal
źródło
10

Jeśli chcesz ciągle otrzymywać zaktualizowane procesy (na przykład 2 sekundy) w sesji powłoki bez konieczności ręcznej interakcji z nią, użyj:

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

Jedyną wadą show [full] processlistjest to, że nie można filtrować wyniku wyjściowego. Z drugiej strony, udostępnienie SELECT * FROM INFORMATION_SCHEMA.PROCESSLISTotwartych możliwości usunięcia z danych wyjściowych wszystkiego, czego nie chcesz widzieć:

SELECT * from INFORMATION_SCHEMA.PROCESSLIST
WHERE DB = 'somedatabase'
AND COMMAND <> 'Sleep'
AND HOST NOT LIKE '10.164.25.133%' \G
Cristianoms
źródło