mysql 查询优化 ~ 善用profie利器
一 简介:利用profile分析慢语句的过程有助于我们进行语句的优化
二 执行过程
set profiling=1;
set profiling=0;
2 执行sql
3 查看过程消耗
三 结果
1 查看执行过程耗时
SHOW profile FOR query 1
checking permissions:检查权限
Opening tables:打开表
init : 初始化
System lock :系统锁
optimizing : 优化
statistics : 统计
preparing :准备
executing :执行
Sending data :发送数据
Sorting result :排序
end :结束
query end :查询 结束
closing tables : 关闭表 /去除TMP 表
freeing items : 释放物品
cleaning up :清理
值得关注的值 1 sending data 2 Sorting result 3 Opening tables 以上所有的值并不是都会出现,这点要注意
2 查看资源消耗
SHOW profile all FOR query 2
"Duration": 持续时间
"CPU_user": cpu用户
"CPU_system": cpu系统
"Context_voluntary":上下文主动切换
"Context_involuntary": 上下文被动切换
"Block_ops_in": 输入块的个数
"Block_ops_out": 输出块的个数
"Page_faults_major": 主分页错误
"Page_faults_minor": 次分页错误
值得关注的值 1 CPU相关值 2 Context 相关值 3 Block相关值
5 表查询
SELECT STATE, FORMAT(DURATION, 6) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 1 ORDER BY SEQ;
6 主要问题
简介: 本人对于大量的sql进行跟踪分析,遇到最多的就是sending data的耗时过多情况
分析:Sending data 1读取数据 2 处理(过滤,排序等。。) 3发送数据,是主要的进行数据处理的过程,包含了所有server层和innodb层的交互