MySql数据库分析命令

Step 1:show full processlist;

该指令是用来查看那些线程正在运行,你也可以得到这些信息,从INFORMATION_SCHEMA PROCESSLIST这个表,或者通过mysqladmin processlist指令。如果你有PROCESS权限,你可以查看所有的线程。否则,你只能查看你自己当前账户的线程。如果你没有使用FULL关键字,你只能查看每个记录中Info字段里面的前100个字符。

> show full processlist;
+----------+----------------+----------------------+----------------+---------+------+-------+-----------------------+----------+
| Id       | User           | Host                 | db             | Command | Time | State | Info                  | Progress |
+----------+----------------+----------------------+----------------+---------+------+-------+-----------------------+----------+
| 18849875 | df             | 18.10.212.61:44852   | common         | Sleep   |    1 |       | NULL                  |    0.000 |
| 22548511 | monitor        | localhost:38282      | monitor        | Sleep   |    2 |       | NULL                  |    0.000 |
| 23596429 | activity       | 18.21.27.22:44971    | activity       | Sleep   |  219 |       | NULL                  |    0.000 |
| 23775691 | df             | 18.10.253.1:56296    | common         | Sleep   |   89 |       | NULL                  |    0.000 |
+----------+----------------+----------------------+----------------+---------+------+-------+-----------------------+----------+
4 rows in set (0.00 sec)

这里,可以看到SHOW PROCESSLIST指令里面的输出内容,有几个字段,下面给予解释说明,只有搞清楚了这些字段的含义,才对我们的实际项目问题分析才有价值:

  • Id:
    连接标识符。这与information_schema.processlist表,性能的processlist_id列架构线程表,并由连接函数返回。

  • User:
    发出该语句的mysql用户。如果这是系统用户,则表示非客户机线程由服务器生成,用于内部处理任务。这可能是用于复制的I/O或SQL线程从或延迟的行处理程序。未经身份验证的用户引用的线程与客户端连接关联,但尚未对其进行客户端用户身份验证。事件调度程序是指监视计划事件的线程。对于系统用户,没有主机列中指定的主机。

  • Host:
    发出该语句的客户端的主机名(没有主机的系统用户除外)。show processlist报告主机\u name:client\u port中TCP/IP连接的主机名设置格式以便于确定哪个客户机正在执行什么操作。

  • db:
    如果选择了默认数据库,则为空。

  • Command:
    线程正在执行的命令类型。

  • Time:
    线程处于其当前状态的时间(秒)。对于从属SQL线程,该值是上次复制事件的时间戳与从属计算机的实时之间的秒数。

  • State:
    大多数状态对应于非常快速的操作。如果一个线程在给定的状态下保持很多秒,可能有一个问题需要调查。
    指示线程正在执行的操作、事件或状态。

  • Info:
    线程正在执行的语句,如果不执行任何语句,则为空。该语句可能是发送到服务器的语句,如果该语句执行其他语句,则可能是最内部的语句。例如,如果一个call语句执行一个执行select语句的存储过程,那么info值将显示select语句。

杀掉线程

> KILL [CONNECTION | QUERY] processlist_id

connection选项,kill的时候,将连接也断掉,而query选项,kill的过程只是将该指令杀掉,连接还保持。 kill指令不指定connection或者query选项时,默认是connection。

Step 2:show status like 'Threads%'

+-------------------+--------+
| Variable_name     | Value  |
+-------------------+--------+
| Threads_cached    | 8      |
| Threads_connected | 149    |
| Threads_created   | 649192 |
| Threads_running   | 1      |
+-------------------+--------+

mysql是通过线程缓存来完成线程重用的。客户端发起连接时,首先会去线程缓冲池里找是不是有空闲的线程。如果没有才会去新建线程。当一个连接断开的时候,并不会马上销毁线程释放资源。而是暂时把线程放在缓冲池中挂起。
所以这里就涉及到了三个参数,一个是treads_cached这个是缓冲池中的线程个数。还有一个是treads_connected这个是连接中的线程数。第三个是Threads_created,它的含义是已经创建的线程数。在并发数低的情况下,一般Threads_created参数是treads_cached和treads_connected参数之和。当并发数高的情况下,Threads_created就会暴增,这个时候就需要考虑thread_cache_size来设置缓冲池的大小了。

你可能感兴趣的:(MySql数据库分析命令)