慢SQL语句
1. 查看慢SQL是否开启
查看慢SQL是否启用,查看命令:show variables like ‘slow_query_log’; 如果结果为ON则是开启了,如果为OFF则表示禁用了
show variables like 'slow_query_log';
2. 开启慢查询
开启慢查询命令:set global slow_query_log = 'ON';
退出重新登录查询,查看是否开启:show variables like 'slow_query_log';
查看慢查询参数,即设置超过多少秒的查询归为了慢查询。参数为:long_query_time
,查询命令: show global variables like 'long_query_time';
mysql默认时间为10秒,即10秒及以上的查询被归为了慢查询。我们的实际项目中根本就不可能这么包容你,所以得提供查询效率优化sql,让程序更快的执行。
这里设置时间为3秒,即超过3秒就会被认为慢查询。设置命令:set global long_query_time =3;
用命令设置的,会立即生效,不用重启mysql服务。但重启mysql服务后就会失效。
查看慢查询存放日志,命令: show variables like 'slow_query_log_file';
去相应目录下查看即可。
3. 《Mysql新能优化和高可用框架》关于慢SQL语句优化思路
3.1 前言
对于慢SQL语句优化一般可以按下面几步思路:
开启慢查询日志,
设置超过几秒为慢SQL语句,
抓取慢SQL语句,
通过explain查看执行计划,
对慢SQL语句分析;
创建索引并调整语句,
再查看执行计划,
对比调优结果。
3.2 抓取慢SQL语句
索引是提高Mysql查询性能的一个重要途径。应当尽量避免事后才想起添加索引,因为事后可能需要监控大量的SQL才能定位到问题所在,而且增加索引的时间肯定远大于初始增加索引所需要的时间。
某些SQL语句执行完毕所花费的时间特别长,我们将这种影响比较慢的语句记录在慢查询日志中。不要被“查询日志”的名字误导。错误地认为慢查询日志只会记录执行比较慢的select语句,其实不然,insert、delete、update、call等DML操作只要是超过了指定的时间,都可以称为“慢查询”,都会被记录在慢查询日志中,默认情况下慢查询日志是不被开启的,如果需要可以手动开启。开启慢查询日志之后,默认设置下执行超过10秒的语句才会被记录到慢查询日志中,当然这个时间可以自己设置。
慢查询日志相关的参数如下:
3.3利用explain分析查询语句
3.4 利用show profiles分析慢SQL语句
show profile 也是分析慢SQL语句的一种手段,通过它可以分析出一条SQL语句的性能瓶颈在什么地方,它可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,I/O等,以及该SQL执行所耗费的时间等。
4.索引使用原则