定位慢查询
1、进入mysql命令行
mysql -u 用户名 -p
退出mysql命令行 exit;
2、在mysql命令行中输入一下配置
show variables like '%slow%';
set global slow_query_log='ON'; (开启慢查询日志功能)
slow_query_log_file (这个参数中存放的是慢查询日志文件的位置)show variables like '%long%';
set global long_query_time=0.1; (这个值是个数字,单位是秒,是一个标准时间,认为单条sql语句执行所花费的时间超过这个数字就算比较慢,就要把这个sql记录到慢查询日志文件中,实际操作过程中根据实际情况设定即可)show variables like '%log_queries%';
set global log_queries_not_using_indexes='ON'; (把未使用索引的sql也记录到慢查询日志文件中)
3、慢查询日志文件的位置slow_query_log_file这个参数值就是
show variables like '%log_file%';
/var/lib/mysql/localhost-slow.log如果有符合条件的sql语句,会被记录到这个文件中,后续分析这个文件即可
4、进一步缩小慢查询范围;使用工具mysqldumpslow
mysql自带了一个查看慢日志的工具mysqldumpslow
执行mysqldumpslow –h可以查看帮助信息。主要介绍两个参数-s和-t
-s 这个是排序参数,可选的有:al: 平均锁定时间ar: 平均返回记录数at: 平均查询时间c: 计数l: 锁定时间r: 返回记录t: 查询时间
-t n 显示头n条记录。
-g, 后边可以写一个正则匹配模式,大小写不敏感的
实例:
# 按照执行次数对查询进行排序,并展示执行最频繁的前 20 条 SQL 语句
mysqldumpslow -s c -t 20 host-slow.log
# 从慢查询日志中筛选并展示 按 “扫描行数” 排序的前 20 条最耗时查询
# 扫描行数:查询执行过程中,MySQL 为了找到符合条件的数据,实际扫描(读取)的行数(包括索引扫描或全表扫描的行数)
mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。mysqldumpslow -t 10 -s t -g “left join” host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句# 找到有问题的SQL
eg:
SELECT `id`, `name`
FROM `bf_product`
WHERE is_dropped = "S"
ORDER BY `display_order` DESC
用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。
慢查询开启方式:
5、在Navicat中先将SQL语句跑通
6、然后使用explain分析SQL
explain
SELECT `id`, `name`
FROM `bf_product`
WHERE is_dropped = "S"
ORDER BY `display_order` DESC
执行后查看type的值
Explain的使用:
链接:https://blog.csdn.net/why15732625998/article/details/80388236?spm=1001.2014.3001.5506