索引优化分析(三)

一、慢查询日志分析

1、定义

        是Mysql提供的一种日志记录,用来记录在Mysql中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL, 则会被记录到慢查询日志中;long_query_time的默认值为10s,SQL语句执行超过10s,则记录下来,在结合explain + sql语句分析。

2、分析/使用步骤

(1)查看是否开启慢查询日志,默认关闭状态 > show variables like '%slow_query_log%'

(2)开启慢查询日志 > set global slow_query_log=1;

(3)慢查询日志参数配置

(1)查看当前多少秒算慢 > show variables like '%long_query_time%'
(2)设置慢查询日志的阙值时间 >set global long_query_time=3

(4)执行sql语句,如查询超过阙值,则记录到慢查询日志文件中,通过查看文件获取sql语句并分析

(5)查询当前系统中有多少条慢查询记录 >show global status like '%Slow_queries%'

3、日志分析工具mysqldumpslow

        给慢查询日志提供了查询相关的命令,方便获取想要的慢查询日记记录信息(mysqldumpslow -help命令说明)

查看mysqldumpslow的帮助信息:

(1)s:表示按照何种方式排序
(2)c:访问的次数
(3)l:锁定时间
(4)r:返回的记录
(5)t:查询时间
(6)al:平均锁定时间
(7)ar:平均返回记录数
(8)at:平均查询时间
(9)t:为返回前面多少条数据
(10)g:后边搭配一个正则匹配模式,大小写不敏感

示范:

(1)得到返回记录集最多的10个sql > mysqldumpslow -s r -t 10 /var/slow-log.log(慢查询日志路径c
(2)得到访问次数最多的10个sql > mysqldumpslow -s c -t 10 /var/slow-log.log
(3)得到按照时间排序的前10里面含有左连接的查询语句 >mysqldumpslow -s t -t 10 -g "left join" var/slow-log.log
(4)建议在使用这些命令时结合|和more使用,否则有可能出现爆屏情况 >mysqldumpslow -s r -t 10 /var/slow-log.log | more

二、Show Profile 

1、定义

        是mysql提供可以用来分析当前会话中的语句执行的资源消耗情况,可以用于SQL的调优的测量,默认的情况下,参数处于关闭的状态,并保存最近15次的运行结果。

2、分析/使用步骤

(1)是否支持,查看当前的mysql版本是否支持 >show variables like '%profiling%'

(2)开启功能,默认为关闭,使用前需要开启 >set profiling=on

(3)运行SQL

(4)查看结果,show profile

(5)诊断SQL,show profile cpu,block io for query number                      -- number:上一步查询出来的数字号码

查询的类型有:
	all:显示所有的开销信息
	block io:显示块io相关开销
	context switches:上下文切换相关开销
	cpu:显示cpu相关开销信息
	ipc:显示发送和接收相关开销信息
	memory:显示内存相关开销信息
	page faults:显示页面错误相关开销信息
	source:显示和source_function,source_file,source_line相关的开销信息
	swaps:显示交换次数相关开销信息

(6)结果分析结论

1、converting HEAP to ondisk:表示查询结果太大,内存都不够用了往磁盘上搬了
2、creating temp table 创建临时表(查询时将结果复制到临时表中,用完在删除)
3、copying to temp table ondisk:把内存中的临时表复制到磁盘中,耗io

三、优化分析总结

(1)开启慢查询日志,设置阙值、捕获慢SQL

(2)explain + 慢SQL分析

(3)show profile查询SQL在Mysql服务器里面的执行细节和生命周期情况

(4)SQL数据库服务器的参数调优

你可能感兴趣的:(mysql)