如何从 SHOW PROCESSLIST 查看完整查询
Posted
技术标签:
【中文标题】如何从 SHOW PROCESSLIST 查看完整查询【英文标题】:How to see full query from SHOW PROCESSLIST 【发布时间】:2011-04-08 00:15:22 【问题描述】:当我发出 SHOW PROCESSLIST 查询时,info 列中只返回正在运行的 SQL 查询的前 100 个字符。
是否可以更改 mysql 配置或发出不同类型的请求以查看完整的查询(我正在查看的查询超过 100 个字符)
【问题讨论】:
【参考方案1】:SHOW FULL PROCESSLIST
如果你不使用FULL
,"only the first 100 characters of each statement are shown in the Info
field"。
使用 phpMyAdmin 时,您还应该单击“全文”选项(结果表左上角的“← T →”)以查看未截断的结果。
【讨论】:
看来phpmyadmin并不关心这个,仍然显示截断的信息。 @giorgio79:如果我没记错的话,phpMyAdmin 会截断所有字符串结果。不过,我已经四年没有做任何 Web 开发了,所以我很可能会弄错。 我看到查询在一定长度后被截断,即使使用SHOW FULL PROCESSLIST
。我可以让它更饱满吗?
命令SHOW FULL PROCESSLIST
末尾需要一个分号;
对吗?
@R.Haq 如果这是您要执行的唯一查询,则不需要分号。如果您想执行多个查询,那么您确实需要在每个查询后面加上分号。【参考方案2】:
我刚刚在MySQL documentation 中读到SHOW FULL PROCESSLIST
默认只列出来自您当前用户连接的线程。
引自 MySQL SHOW FULL PROCESSLIST 文档:
如果你有 PROCESS 权限,你可以看到所有线程。
因此您可以在mysql.user
表中启用Process_priv
列。记得之后执行FLUSH PRIVILEGES
:)
【讨论】:
如果您是root
,则不是这样。【参考方案3】:
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' |
【讨论】:
这可能是最有用的答案。 我的信息栏显示COMMIT
。您知道如何查看有关实际查询的更多详细信息吗?
localhost:41060 , 41060 代表什么?有什么猜测吗?
快速查询,用于显示正在运行的查询以及在 Amazon Aurora MySQL 上结束查询的能力:select id pid, user, concat('CALL mysql.rds_kill(', id, ');'), time, state, info from information_schema.processlist where info is not null order by time desc;
【参考方案4】:
查看来自 SHOW PROCESSLIST 的完整查询:
SHOW FULL PROCESSLIST;
或者
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
【讨论】:
【参考方案5】:如果想要在 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
【讨论】:
以上是关于如何从 SHOW PROCESSLIST 查看完整查询的主要内容,如果未能解决你的问题,请参考以下文章
MySQL中 show processlist 和 show full processlist命令详解
MySQL中 show processlist 和 show full processlist命令详解
mysql 的show processlist和show full processlist区别