MySQL 占用 CPU 过高问题定位及优化( 四 )


logging slow query
线程正在往慢日志中写入语句
login
连接线程的初始状态,直到客户端成功完成验证
manage keys
服务端开启或者关闭表的索引
Opening tables
线程正在打开表,这应该是一个很快的过程,除非有些事情组织了打开表 。例如 ALTER TABLE or a LOCK TABLE 会在结束前阻止打开表操作 。再就是有必要检查 table_open_cache 参数的值设置是否足够大 。
optimizing
服务端正在对查询进行初始化优化
preparing
查询优化状态
Purging old relay logs
线程正在删除不需要的中继日志
query end
处理完查询,在 freeing items 之前的状态
Receiving from client
服务端正在读取客户端的包,该状态在 5.7.8 叫 Reading from net
Removing duplicates
查询正在使用 SELECT DISTINCT,这个过程 MySQL 在早期阶段无法完成,因此需要一个额外的阶段在把结果返回给客户端前需要删除重复行
removing tmp table
线程在执行完 SELECT 后删除中间临时表,如果没有使用临时表,无该状态
rename
重命名表
rename result table
线程正在执行 ALTER TABLE 语句,创建一个新表,重命名新表替换老表
Reopen tables
线程给表加锁,但是发现在获取表后发现表结构发生了变化 。当释放锁,关闭表之后尝试重新打开表
Repair by sorting
使用排序创建索引修复代码
preparing for alter table
服务端正准备就地执行 ALTER TABLE
Repair done
线程已完成对 MyISAM 表的多线程修复
Repair with keycache
创建索引缓存修复代码,比 Repair by sorting 慢的多
Rolling back
线程在回滚事务
Saving state
对于 MyISAM 表的修复和分析操作,线程将新表保存到.MYI 文件头,状态包含行数,AUTO_INCREMENT 计数器,键值分布之类的信息
Searching rows for update
线程正在执行第一阶段查询未更新的数据,如果更新了索引所在行就会执行有该状态
Sending data
线程正在读取和处理 SELECT 的行记录,发送给客户端,由于在这个状态下的操作会执行大量的磁盘访问(读),因此它通常是查询生命周期最长的状态 。
Sending to client
服务端正在给客户端发送包,在 5.7.8 该状态叫 Writing to net
setup
线程开始执行 ALTER TABLE 操作
Sorting for group
线程正在做排序来满足 GROUP BY
Sorting for order
线程正在做排序来满足 ORDER BY
Sorting index
线程正在做索引页优化来使得 MyISAM 表优化操作期间有更高效的访问
Sorting result
对于一个 SELECT 语句,类似不使用临时表的 Creating sort index
starting
语句执行的第一个状态
【MySQL 占用 CPU 过高问题定位及优化】statistics
服务端正在计算统计信息对一个查询创建执行计划,如果持续很长时间,服务端可能正在执行其他的操作
System lock
线程调用了 mysql


推荐阅读