如何从 SHOW PROCESSLIST 查看完整查询?

问题描述 投票:0回答:8

当我发出

SHOW PROCESSLIST
查询时,信息列中仅返回正在运行的 SQL 查询的前 100 个字符。

是否可以更改 MySQL 配置或发出不同类型的请求来查看完整的查询(我正在查看的查询长度超过 100 个字符)

mysql processlist
8个回答
618
投票
SHOW FULL PROCESSLIST

如果不使用

FULL
“仅每个语句的前 100 个字符显示在
Info
字段中”

使用 phpMyAdmin 时,您还应该单击“全文”选项(结果表左上角的“← T →”)以查看未截断的结果。


148
投票

Show Processlist 从另一个表中获取信息。以下是如何提取数据并查看包含整个查询的“INFO”列:

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

25
投票

查看 SHOW PROCESSLIST 的完整查询:

SHOW FULL PROCESSLIST;

或者

 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;

15
投票

我刚刚在 MySQL 文档中读到,

SHOW FULL PROCESSLIST
默认情况下仅列出来自当前用户连接的线程

引用 MySQL SHOW FULL PROCESSLIST 文档:

如果你有PROCESS权限,你可以看到所有线程。

因此您可以启用

Process_priv

 表中的 
mysql.user
 列。之后记得执行
FLUSH PRIVILEGES
:)


15
投票
如果希望在 shell 会话上不断获取更新的进程(在示例中为 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
    

7
投票
SHOW FULL PROCESSLIST
这显示了包含更多信息的完整进程列表。


1
投票

bash


## identify the query id mysql -e 'SHOW processlist' ## show only the related sql query for this process omitting the other columns ## change: YOUR_QUERY_ID_YOU_LOOKED_UP mysql -sre 'SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id=YOUR_QUERY_ID_YOU_LOOKED_UP'|tr '\n' ' ';echo ## bonus: get mysql EXPLAIN for this query (when its too long to copy properly) ## change: YOUR_DATABASE,YOUR_QUERY_ID_YOU_LOOKED_UP mysql -e "USE YOUR_DATABASE;EXPLAIN $(mysql -sre 'SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id=YOUR_QUERY_ID_YOU_LOOKED_UP'|tr '\n' ' ';echo)"

mysql


-- identify the query id SHOW processlist; /* show only the related sql query for this process omitting the other columns change: YOUR_QUERY_ID_YOU_LOOKED_UP */ SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id=YOUR_QUERY_ID_YOU_LOOKED_UP \G
    

0
投票
在 phpmyadmin 中必须启用全文选项。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.