MySQL 性能分析-show profile
1.是什么
show profile 就是mysql提供的可以用来分析当前会话中语句执行的资源损耗情况。可以用来sql的调优和测量,值得注意的是默认情况下为关闭状态,如果开启,保存当前会话最近的15次运行结果。
2.分析步骤:
(1) 是否支持,看看当前的mysql版本是否支持,默认关闭:Show variables like 'profiling';
(2) 开启功能,默认是关闭,使用前需要开启:
set profiling=on;
(3) 运行SQL:select * from emp;
(4) 查看结果: show profiles;
用于查询那条语句执行用了多少时间,找出来最耗时,也就是说出了问题的语句,进行进一步的诊断。
(5) 定位问题sql可以使用语句,则可以具体查询某条sql的整体运行情况
show profile cpu,block io for query Query_ID;
定位语句常见参数
show profile 'params' for query Query_ID;
params:
ALL 显示所有开销
BLOCK IO 显示块io开销
CONTEXT SWITCHES 上下文切换相关开销
CPU 显示CPU相关信息开销
IPC 显示发送和接收相关开销信息
MEMORY 显示内存相关开销信息
PAGE FAULTS 显示页面错误相关开销信息
SOURCE 显示source_function,source_file,source_line相关开销信息
SWAPS 显示交换次数相关开销信息
注意的结论:
converting HEAP to MyISAM 查询结果太大,内存不够用了往磁盘上搬
creating tmp table 创建了临时表
copying to tmp table on disk 内存中临时表复制到磁盘,比较危险,开销大
locked 存在表锁
例如:
show profile cpu,block io for query 3;
(6) 一般性建议:
① 对于单键索引,尽量选择针对当前query过滤性更好的索引;
② 在选择组合索引的时候,当前Query中过滤性最好的字段在索引字段顺序中,位置越靠前越好;
③ 在选择组合索引的时候,尽量选择可以能够包含当前query中的where字句中更多字段的索引;
④ 尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的。