mysql查询慢的sql
‘壹’ 如何查找Mysql中查询慢的SQL语句
开启慢查询日志
mysql> set global slow_query_log=1;
定义时间SQL查询的超时时间
mysql> set global long_query_time = 0.005;
查看慢查询日志的保存路径
mysql> show global variables like 'slow_query_log_file';
查看慢查询
cat /var/log/mysql/slow.log
‘贰’ 如何查找MySQL中查询慢的SQL语句
问题
我们有一个 SQL,用于找到没有主键 / 唯一键的表,但是在 MySQL 5.7 上运行特别慢,怎么办?
实验
我们搭建一个 MySQL 5.7 的环境,此处省略搭建步骤。
写个简单的脚本,制造一批带主键和不带主键的表:
可以看到执行时间变成了 0.67s。
整理
我们诊断的关键点如下:
1. 对于 information_schema 中的元数据表,执行计划不能提供有效信息。
2. 通过查看 MySQL 改写后的 SQL,我们猜测了优化器发生了误判。
3. 我们增加了 hint,指导 MySQL 正确进行优化判断。
但目前我们的实验仅限于猜测,猜中了万事大吉,猜不中就无法做出好的诊断。
‘叁’ 如何查找MySQL中查询慢的SQL语句
如何查找MySQL中查询慢的SQL语句
一、MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句
1,slow_query_log
这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。
2,long_query_time
当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。
3,slow_query_log_file
记录日志的文件名。
4,log_queries_not_using_indexes
这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。
‘肆’ mysql如何找出慢sql
long_query_time 参数的查看
默认是10秒,10秒以上的sql会记录。可进行值的修改,
long_query_time 默认不开启 ,如果不是需要进行开始调优,一般不建议开启此参数。
永久开启:
在my.cnf中的
1.查看慢查询的时长
看此图默认10秒,是大于10秒,不等于10秒。
2.修改此时长
临时修改,重启mysql后失效,修改后需要新开连接才能查询到
永久在配制文件中修改
查看慢sql个数
将所有没有使用带索引的查询语句全部写到慢查询日志中
设置没带索引的慢sql进行记录
最后汇总my.cnf配制
‘伍’ 如何查找MySQL中查询慢的SQL语句
1、首先,要开启mysql的慢查询日志。在mysql的配置文件:my.ini中添加如下两个配置项:
log-slow-queries = E:\Servers\MySql5.5\data\mysql_slow_query.log //mysql慢查询日志记录位置
long_query_time=5 //定义慢查询sql的时间,当前配置表示超过5秒的sql为慢查询,进入到日志里
2、查询慢查询日志
找到配置的慢查询日志文件,如E:\Servers\MySql5.5\data\mysql_slow_query.log ,这里就是所有的慢查询sql啦
‘陆’ 如何查找MySQL中查询慢的SQL语句
这是一个慢查询日志的展示工具,能够帮助 DBA 或者开发人员分析数据库的性能问题,给出全面的数据摆脱直接查看 slow-log。QAN(Query Analytics)
PMM 目前有 2 个版本,但是对于 QAN 来说其大致由三部分组成:
QAN-Agent(client):负责采集 slow-log 的数据并上报到服务端
QAN-API(server):负责存储采集的数据,并对外提供查询接口
QAN-APP:专门用来展示慢查询数据的 grafana 第三方插件
1. 数据流转
slow-log --> QAN-Agent --> QAN-API <--> QAN-APP(grafana)
2. pmm1 架构图
‘柒’ 如何在mysql查找效率慢的SQL语句
查看慢SQL是否启用,查看命令:show variables like 'log_slow_queries';
如果结果为ON则是开启了,如果为OFF则表示禁用了。
开启慢查询命令:set global log_slow_queries = on;
查看是否开启:show variables like 'log_slow_queries';
查看慢查询参数,即设置超过多少秒的查询归为了慢查询。参数为:long_query_time,查询命令:showglobal variables like 'long_query_time';
mysql默认时间为10秒,即10秒及以上的查询被归为了慢查询。我们的实际项目中根本就不可能这么包容你,所以得提供查询效率优化sql,让程序更快的执行。
这里设置时间为1秒,即超过1秒就会被认为慢查询。设置命令:set global long_query_time =1;用命令设置的,会立即生效,不用重启mysql服务。但重启mysql服务后就会失效。
查看设置的时间,show global variables like 'long_query_time';即可看到现在已经变为1秒了
查看慢查询存放日志,命令:show variables like 'slow_query_log_file';
去相应目录下查看即可。