1.慢查询的用途mysql
它能记录下全部执行超过long_query_time时间的SQL语句,帮咱们找到执行慢的SQL,方便咱们对这些SQL进行优化。sql
2.查看是否开启慢查询数据库
show variables like 'slow_query%';markdown
slow_query_log = off,表示没有开启慢查询工具
slow_query_log_file 表示慢查询日志存放的目录性能
3.开启慢查询(须要的时候才开启,由于很耗性能,建议使用即时性的)优化
方式一:(即时性的,重启mysql以后失效,经常使用的)spa
set global slow_query_log=1; 或者 set global slow_query_log=ON;日志
开启以后 咱们会发现 /var/lib/mysql下已经存在 localhost-slow.log了,未开启的时候默认是不存在的。code
方式二:(永久性的)
在/etc/my.cfg文件中的[mysqld]中加入:
slow_query_log=ON
slow_query_log_file=/var/lib/mysql/localhost-slow.log
复制代码
4.设置慢查询记录的时间
查询慢查询记录的时间:show variables like 'long_query%',默认是10秒钟,意思是大于10秒才算慢查询。
咱们如今设置慢查询记录时间为1秒:set long_query_time=1;
5.执行select count(1) from order o where o.user_id in (select u.id where users);
由于咱们开启了慢查询,且设置了超过1秒钟的就为慢查询,此sql执行了24秒,因此属于慢查询。
咱们在日志中查看:
more /var/lib/mysql/localhost-slow.log,
咱们能够看到查询的时间,用户,花费的时间,使用的数据库,执行的sql语句等信息。在生产上咱们就可使用这种方式来查看 执行慢的sql。
6.查询慢查询的次数:show status like 'slow_queries';
在咱们从新执行刚刚的查询sql后,查询慢查询的次数会变为8
固然,用 more /var/lib/mysql/localhost-slow.log 也是能够看到详细结果的。
在生产中,咱们会分析查询频率高的,且是慢查询的sql,并非每一条查询慢的sql都须要分析。
7.慢查询日志分析工具Mysqldumpslow
因为在生产上会有不少慢查询,因此采用上述的方法查看慢查询sql会很麻烦,还好MySQL提供了慢查询日志分析工具Mysqldumpslow。
其功能是, 统计不一样慢sql的出现次数(Count),执行最长时间(Time),累计总耗费时间(Time),等待锁的时间(Lock),发送给客户端的行总数(Rows),扫描的行总数(Rows)
(1)查询Mysqldumpslow的帮助信息,随便进入一个文件夹下,执行:mysqldumpslow --help
查看mysqldumpslow命令安装在哪一个目录:whereis mysqldumpslow
说明:
(2)案例:取出耗时最长的两条sql
格式:mysqldumpslow -s t -t 2 慢日志文件
mysqldumpslow -s t -t 2 /var/lib/mysql/localhost-slow.log
参数分析:
(3)案例:取出查询次数最多,且使用了in关键字的1条sql
mysqldumpslow -s c -t 1 -g 'in' /var/lib/mysql/localhost-slow.log
这种方式更加方便,更加快捷!
8.show profile
用途:用于分析当前会话中语句执行的资源消耗状况
(1)查看是否开启profile,mysql默认是不开启的,由于开启很耗性能
show variables like 'profiling%';
(2)开启profile(会话级别的,关闭当前会话就会恢复原来的关闭状态)
set profiling=1; 或者 set profiling=ON;
(3)关闭profile
set profiling=0; 或者 set profiling=OFF;
(4)显示当前执行的语句和时间
show profiles;
(5)显示当前查询语句执行的时间和系统资源消耗
show profile cpu,block io for query 4;(分析show profiles中query_id等于4的sql所占的CPU资源和IO操做)
或者直接 : show profile for query 4;