一、开启Slow Log
查看慢查询是否开启
show global variables like 'slow_query_log%';
1、动态开启
set global slow_query_log = 1;
设置慢查询日志的路径
set global slow_query_log_file = "/data/mysql/log/mysql-slow.log";
慢查询的阈值
show global variables like 'long_query_time';
2、永久开启
修改配置文件my.cnf
slow_query_log_file = /data/mysql/log/mysql-slow.log
slow_query_log = 1 # 开启慢查询日志
long_query_time = 1 # 设置慢查询阈值1秒
二、slow log的特殊设置
在 MySQL 中,log_slow_admin_statements、log_queries_not_using_indexes 和 min_examined_row_limit 是与慢查询日志相关的参数,它们的作用如下:
-
log_slow_admin_statements-
作用:当启用该参数时,MySQL 会将慢的管理类语句记录到慢查询日志中。这些管理类语句包括
ALTER TABLE、CREATE INDEX、DROP INDEX、OPTIMIZE TABLE等。 -
默认值:默认为关闭(OFF)。
-
应用场景:通常这些操作会在维护或迁移脚本中运行,因此默认不记录。但如果应用程序动态执行这些操作,启用该参数可以帮助监控这些语句的性能。
-
-
log_queries_not_using_indexes-
作用:启用该参数后,MySQL 会记录那些未使用索引的查询语句。即使这些查询的执行时间未超过
long_query_time设置的阈值,它们也会被记录到慢查询日志中。 -
默认值:默认为关闭(OFF)。
-
应用场景:此参数有助于识别那些可能需要添加索引以优化性能的查询。但需要注意,启用后可能会显著增加日志的详细程度,尤其是对于繁忙的服务器。
-
-
min_examined_row_limit-
作用:该参数设置了一个查询必须检查的最小行数,只有达到或超过此值的查询才会被记录到慢查询日志中。这有助于过滤掉那些对性能影响较小的查询,专注于那些可能扫描大量数据的查询。
-
默认值:默认为 0,即记录所有符合其他条件的查询。
-
应用场景:通过设置较高的值,可以减少日志中的“噪声”,专注于那些真正可能影响性能的查询。
-
三、查看慢查询的额外信息的输出
1、开启慢查询额外输出
set global log_slow_extra = on;
四、官方慢查询分析工具mysqldumpslow
1、不加任何选项
mysqldumpslow /data/mysql/log/mysql-slow.log
2、按查询时间排序
mysqldumpslow -s t -t 5 /data/mysql/log/mysql-slow.log
这样就显示出,执行时间最长的5条SQL
3、按访问次数排序
mysqldumpslow -s c -t 5 /data/mysql/log/mysql-slow.log
五、Rows_sent 和 Rows_examined 指标
在MySQL的慢查询日志中,Rows_sent 和 Rows_examined 是两个重要的指标,它们可以帮助我们了解查询的性能和效率。以下是它们的定义和区别:
-
Rows_sent:表示查询实际返回给客户端的行数。这个值反映了客户端接收到的行数,通常与查询的结果集大小相关。
-
Rows_examined:表示服务器层检查的行数(不包括存储引擎内部的处理)。这个值反映了MySQL在执行查询时实际扫描的行数,通常与查询的执行计划和索引使用情况有关。
区别
-
Rows_sent 是查询返回给客户端的行数,而 Rows_examined 是查询过程中服务器检查的行数。
-
如果
Rows_examined远大于Rows_sent,这可能表明查询在执行过程中扫描了大量行,但只返回了其中的一部分,这可能是由于查询条件不够精确或索引使用不当导致的。
3381

被折叠的 条评论
为什么被折叠?



