Как увидеть полный запрос из SHOW PROCESSLIST


296

Когда я выполняю запрос SHOW PROCESSLIST, в информационном столбце возвращаются только первые 100 символов запущенного SQL-запроса.

Можно ли изменить конфигурацию Mysql или выполнить другой тип запроса, чтобы увидеть полный запрос (запросы, на которые я смотрю, длиннее 100 символов)

Ответы:


482
SHOW FULL PROCESSLIST

Если вы не используете FULL, «в Infoполе отображаются только первые 100 символов каждого оператора » .

При использовании phpMyAdmin вы также должны нажать на опцию «Полные тексты» («← T →» в верхнем левом углу таблицы результатов), чтобы увидеть не усеченные результаты.


3
Кажется, phpmyadmin не заботится об этом, и все еще показывает усеченную информацию.
giorgio79

@ giorgio79: Если я правильно помню, phpMyAdmin обрезает все строковые результаты. Прошло четыре года с тех пор, как я занимался веб-разработкой, поэтому я вполне мог ошибиться.
Джеймс МакНеллис

2
Я вижу, что запросы обрезаются после определенной длины даже при использовании SHOW FULL PROCESSLIST. Могу ли я сделать это еще как-нибудь еще?
wizonesolutions

Команде SHOW FULL PROCESSLISTнужна точка с запятой ;в конце, верно?
Ракибул Хак

1
@ R.Haq Если это единственный запрос, который вы собираетесь выполнить, то точка с запятой не нужна. Если вы хотите сделать более одного запроса, вам нужно использовать точку с запятой после каждого из них.
Хулио Гарсиа

85

Показать Processlist извлекает информацию из другой таблицы. Вот как вы можете получить данные и посмотреть на столбец «ИНФО», который содержит весь запрос:

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

Вы можете добавить любое условие или игнорировать в зависимости от ваших требований.

Вывод запроса приводится в виде:

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

12
Это, наверное, самый полезный ответ.
Dr_

Мой информационный столбец показывает COMMIT. Знаете ли вы, как я могу просмотреть более подробную информацию о фактическом запросе?
m.spyratos

localhost: 41060, что означает 41060? есть предположение?
Фарвин Хасан

12

Я только что прочитал в документацииSHOW FULL PROCESSLIST по MySQL, что по умолчанию перечисляются только потоки из вашего текущего пользовательского соединения .

Цитата из документации по MySQL SHOW FULL PROCESSLIST:

Если у вас есть привилегия PROCESS, вы можете видеть все темы.

Таким образом, вы можете включить Process_privстолбец в вашей mysql.userтаблице. Не забудьте выполнить FLUSH PRIVILEGESпотом :)



10

Если вы хотите получать обновленные процессы (на примере 2 секунды) в сеансе оболочки, не взаимодействуя с ним вручную, используйте:

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

Единственная плохая вещь в show [full] processlistтом, что вы не можете фильтровать выходной результат. С другой стороны, выдача SELECT * FROM INFORMATION_SCHEMA.PROCESSLISTоткрытых возможностей удалить из вывода все, что вы не хотите видеть:

SELECT * from INFORMATION_SCHEMA.PROCESSLIST
WHERE DB = 'somedatabase'
AND COMMAND <> 'Sleep'
AND HOST NOT LIKE '10.164.25.133%' \G
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.