三、Show Profile
- show profile 是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于sql调优的测量。
- 默认情况下,参数处于关闭状态,并保存最近15次的运行结果。
3.分析步骤:看看当前的MySQL版本是否支持,以及是否开启。
命令show variables like 'profiling'
进行查看是否开启,默认关闭,命令set profiling = on
将其开启-
用show profile 查看结果
SHOW PROFILES;
可以查看运行过的sql,如下图
-
诊断sql
show profile 后面可以有很多参数,来查看执行的详细情况,其中我们主要用的是cpu,block io。详细参数介绍:- all :显示所有的开销信息
- block io : 显示io相关开销
- context switches : 上下文切换相关开销
- cpu : 显示cpu相关开销
- ipc : 显示发送和接收相关开销信息
- memory : 显示内存相关开销信息
- page faults : 显示页面错误相关开销信息
- source :显示source_function,source_file,source_line相关的开销信息
-
swaps : 显示交换次数相关的开销信息
例如使用命令show profile cpu,block io for query 10
查看Query_ID为10的sql,cpu,block io的开销以及执行生命周期,如下图:
-
根据诊断情况需要注意哪些
- status 出现 converting HEAP to MyISAM 查询结果太大内存不够用,结果放到了磁盘上
- status 出现creating tmp table 创建临时表,拷贝数据到临时表,用完再删除。
- status 出现 copying to tmp table 把内存中临时表复制到磁盘,非常危险!
- status 出现 locked ;
四、全局查询日志
- 开启全局查询日志以后,所有的sql都会被记录下来(生产环境不要开启这个)
- 可以在my.cnf中配置开启,设置general_log = 1,general_log_file=/路径,log_output=FILE,或者log_output=TABLE,设置了输出到文件中,那么所有的sql都被记录到了general_log_file中配置的路径里面,如果设置了输出到table,那么所有的记录都被记录到了mysql库中的general_log表中。
- 可以使用命令开启,命令开启的mysql重启以后将失效; 执行命令
set global general_log = 1;set global log_output='TABLE'
;之后所有的sql都将被记录到general_log中。使用select * from mysql.general_log
将查处所有的sql。