定位问题连接。比如查看事务、锁等时,其中都会有一个thread_id
,这个就是对应的processlist.ID
;通过这个关系,在分析复杂问题时可定位到具体连接
在下一篇博文的《事务/锁相关统计》中有提到
字面意思,创建数据库连接的用户。
即可用于用户行为追踪,也可用于用户行为统计。
创建连接的服务器,一般由服务器IP+端口组成;
实际使用中,往往只有IP部分有用,比如按请求来源进行统计,使用时可以截取:substring(host, 1, instr(host, ":")-1)
。
该连接执行SQL的数据库。
有些连接创建时可能未指定数据库,因此该项可能为空。
最早以为是“命令”,用的时候才发现表示连接状态。
该项值常见的有Sleep(休眠)、Query(查询)、Connect(连接),其他值一般也不常见/用,有兴趣可参考官方文档说明2。
连接的在当前状态(STATE
)的持续时间,单位为秒。
注意是“当前状态的持续时间”。
官方文档释义:
The time in seconds that the thread has been in its current state. For a slave SQL thread, the value is the number of seconds between the timestamp of the last replicated event and the real time of the slave machine.
一般状态变化非常快、在每个状态持续时间很短,如果持续多秒,说明就出现了问题。所以这个设定,让时间成为判断SQL是否正常的关键要素。如果TIME
是连接存在的时间,那么就失去了这个意义了。
有朋友在主从模式下,遇到过时间为负数的情况,可参考这篇文章:https://www.jianshu.com/p/9f180c37d983
SQL执行的状态。
An action, event, or state that indicates what the thread is doing. 1
该项非常重要,往往会指出问题所在。
STATE
要结合TIME
来使用,即持续的时间比较长,则有问题的概率越大。
Most states correspond to very quick operations. If a thread stays in a given state for many seconds, there might be a problem that needs to be investigated.
STATE的值比较多,建议阅读完本文后,阅读《MySQL性能分析 - (三) processlist的state属性详解》来深入了解
正在执行的完整SQL语句。
在实际分析中,该项也是很重要的信息。
- 定位到SQL,具体定位业务代码、彻底解决问题也就不远了
- 可通过提取多个SQL特征,进行合并统计
以上。感谢您的耐心阅读。
在mysql里,我们一般通过show (full)processlist查看当前连接情况,处理各种数据库问题。现在在information_schema模式下,5.5以后增加了processlist表,里面存储了当前连接信息,跟show (full) processlist存储的一样。通过processlist 我们可以统计分析一些信息,而不依赖于shell命令(如 grep、awk等)
如 查询当前ip的连接信息
mysql> select substring_index(host,':',1
一个标识,你要kill一个语句的时候很有用,用命令杀掉此查询 /*/mysqladmin kill 进程号。
user列
显示单前用户,如果不是root,这个命令就只显示你权限范围内的sql语句。
host列
显示这个语句是从哪个ip的哪个端口上发出的。用于追踪出问题语句的用户。
显示这个进程目前连接的是哪个数据库。
command列
显示当前连接的执行的命令,.
use information_schema;
select concat(round(sum(data_length/1024/1024/1024),2),'G') from tables; #查询所有数据库的容量大小
二、查询指定数据库、指定表的容量大小(单位:MB)
use information_schema;
select concat(round(sum(DATA_LENGTH/1024/1024...
一、是什么?怎么玩?
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。
由他来查看哪些S...