当我发出
SHOW PROCESSLIST
查询时,信息列中仅返回正在运行的 SQL 查询的前 100 个字符。
是否可以更改 MySQL 配置或发出不同类型的请求来查看完整的查询(我正在查看的查询长度超过 100 个字符)
SHOW FULL PROCESSLIST
如果不使用
FULL
,“仅每个语句的前 100 个字符显示在 Info
字段中”。
使用 phpMyAdmin 时,您还应该单击“全文”选项(结果表左上角的“← T →”)以查看未截断的结果。
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' |
查看 SHOW PROCESSLIST 的完整查询:
SHOW FULL PROCESSLIST;
或者
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
我刚刚在 MySQL 文档中读到,
SHOW FULL PROCESSLIST
默认情况下仅列出来自当前用户连接的线程。
引用 MySQL SHOW FULL PROCESSLIST 文档:
如果你有PROCESS权限,你可以看到所有线程。因此您可以启用
Process_priv
表中的
mysql.user
列。之后记得执行
FLUSH PRIVILEGES
:)
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 FULL PROCESSLIST
这显示了包含更多信息的完整进程列表。
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