zoukankan      html  css  js  c++  java
  • MySQL调优用户监控之show processlist

    简介

    show processlist显示这台MySQL正在连接的用户:

    mysql> show processlist;
    +----+------+-----------+-------+---------+------+----------+------------------+
    | Id | User | Host      | db    | Command | Time | State    | Info             |
    +----+------+-----------+-------+---------+------+----------+------------------+
    | 25 | root | localhost | mysql | Query   |    0 | starting | show processlist |
    | 26 | root | localhost | NULL  | Sleep   |   29 |          | NULL             |
    +----+------+-----------+-------+---------+------+----------+------------------+
    2 rows in set (0.00 sec)
    

    root用户能看到所有正在运行的线程,其他用户则需要被赋予了PROCESS 权限,否则只能看到自己正在运行的线程。show processlist 显示的信息来自MySQL系统库 information_schema 中的 processlist 表。可以使用下面的查询语句可以获得相同的结果(为了便于阅读避免错行直接截图):

    属性解释

    ID

    线程的唯一标识,是information_schema.processlist表的主键。

    USER

    就是指启动这个线程的用户。

    Host

    记录发送请求的客户端的 IP 和 端口号。通过这些信息在排查问题的时候,我们可以定位到是哪个客户端的哪个进程发送的请求。

    DB

    当前执行的命令是在使用哪一个数据库上。如果没有指定数据库,则该值为 NULL 。

    Command

    是指此刻该线程正在执行的命令,下面单独解释。

    Time

    表示该线程处于当前状态的时间。

    State

    线程的状态,和 Command 对应,下面单独解释。

    Info

    记录的是线程执行的语句。默认只显示前100个字符,也就是看到的语句可能是截断的,要看全部信息使用 show full processlist。

    Command详解

    这儿只列出常用且重要的部分,详细请参考MySQL官方链接:8.14.2 Thread Command Values

    sleep:线程正在等待客户端发送新的请求

    query:线程正在执行查询或正在将结果发送给客户端

    locked:在mysql的服务层,该线程正在等待表锁

    analyzing and statistics:线程正在收集存储引擎的统计信息,并生成查询的执行计划

    Copying to tmp table:线程正在执行查询,并且将其结果集都复制到一个临时表中

    sorting result:线程正在对结果集进行排序

    sending data:线程可能在多个状态之间传送数据,或者在生成结果集或者向客户端返回数据

    State详解

    这儿只列出常用且重要的部分,详细请参考MySQL官方链接:8.14.3 General Thread States

    User lock

    该线程将要请求或正在等待通过GET_LOCK()调用请求的咨询锁定 。对于 SHOW PROFILE,此状态表示线程正在请求锁定(不等待它)。

    User sleep

    线程已调用 SLEEP()

    init

    出现这种情况的初始化之前 ALTER TABLEDELETEINSERTSELECT,或 UPDATE语句。服务器在此状态下采取的操作包括刷新二进制日志,InnoDB日志和一些查询缓存清除操作。

    end

    这发生在结束,但的清理之前 ALTER TABLECREATE VIEWDELETEINSERTSELECT,或 UPDATE语句。

    对于end状态,可能发生以下操作:

    • 更改表中的数据后删除查询缓存条目
    • 将事件写入二进制日志
    • 释放内存缓冲区,包括blob

    After create

    当线程在创建表的函数的末尾创建表(包括内部临时表)时,会发生这种情况。即使由于某些错误而无法创建表,也会使用此状态。

    altering table

    服务器正在执行就地服务 ALTER TABLE

    Checking table

    线程正在执行表检查操作。

    closing tables

    线程正在将已更改的表数据刷新到磁盘并关闭已使用的表。这应该是一个快速的操作。如果没有,请确认您没有完整的磁盘,并且磁盘使用率不是很高。

    • optimizing

      服务器正在对查询执行初始优化。

    • preparing

      此状态在查询优化期间发生。

  • 相关阅读:
    [Leetcode] Median of Two Sorted Arrays
    [Jobdu] 题目1463:招聘会
    [Leetcode] Merge Two Sorted Lists
    [Leetcode] Combinations
    [Leetcode] Populating Next Right Pointers in Each Node II
    [Leetcode] Insertion Sort List
    redis在Web中的使用
    设计模式:单例模式
    设计模式:基本法则
    设计模式:工厂模式
  • 原文地址:https://www.cnblogs.com/Courage129/p/14191688.html
Copyright © 2011-2022 走看看