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;    
MySQL 性能分析-show profile
     用于查询那条语句执行用了多少时间,找出来最耗时,也就是说出了问题的语句,进行进一步的诊断。
(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;
MySQL 性能分析-show profile

(6) 一般性建议:
    ① 对于单键索引,尽量选择针对当前query过滤性更好的索引;
    ② 在选择组合索引的时候,当前Query中过滤性最好的字段在索引字段顺序中,位置越靠前越好;
    ③ 在选择组合索引的时候,尽量选择可以能够包含当前query中的where字句中更多字段的索引;
    ④ 尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的。