【问题标题】:How to see full query from SHOW PROCESSLIST如何从 SHOW PROCESSLIST 查看完整查询
【发布时间】:2011-04-08 00:15:22
【问题描述】:

当我发出 SHOW PROCESSLIST 查询时,info 列中只返回正在运行的 SQL 查询的前 100 个字符。

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

【问题讨论】:

    标签: mysql


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2011-08-13
        • 2012-04-17
        • 2012-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        相关资源
        最近更新 更多