发布于: 2022-05-23 15:24:37

临时开启慢查询日志(重启失效)

set global slow_query_log = on;

如果想关闭慢查询日志,只需要执行 set global slow_query_log = off;即可


临时慢查询时间临界点  查询时间高于这个临界点的都会被记录到慢查询日志中(重启失效)

set long_query_time = 1;

如果设置为1,查询时长超过1s的语句会被记录为慢查询。


查询慢查询日志的开启状态和慢查询日志储存的位置

show variables like '%query_log%';


参数说明:

slow_query_log : 是否已经开启慢查询

slow_query_log_file : 慢查询日志文件路径

long_query_time :  超过多少秒的查询就写入日志

log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(做性能优化时开启此项,平时不要开启


查看存放日志的形式

show variables like 'log_output';

永久开启慢日志

修改my.cnf

在配置文件my.cnf(一般为/etc/my.cnf)中的[mysqld] section增加如下参数。

[mysqld]slow_query_log= 1slow_query_log_file= /var/lib/mysql/slow-query.log # 若没有指定,默认名字为hostname_slow.loglong_query_time= 1log_queries_not_using_indexes= 1

其中,slow_query_log = 1表示开启慢查询,0表示关闭

slow_query_log_file 指定慢查询日志路径,需要MySQL对该路径有写权限

long_query_time = 1,表示查询时间>=1秒才记录日志,默认10s

log_queries_not_using_indexes = 1,表明记录没有使用索引的 SQL 语句

重启MySQL服务

重启MySQL后会看到 ~/mysql/slow-query.log文件。


慢查询测试

制造慢查询并执行。如下。

mysql> select sleep(1);


慢查询分析工具

mysqldumpslow

常用参数如下

-s:排序方式,值如下

c:查询次数

t:查询时间

l:锁定时间

r:返回记录

ac:平均查询次数

al:平均锁定时间

ar:平均返回记录书

at:平均查询时间-t:topN查询-g:正则表达式


获取访问次数最多的5个SQL语句

mysqldumpslow -s t -t 5 ~/mysql/slow-query.log



按照时间排序且含有'like'的top 5个SQL语句

$ mysqldumpslow -s t -t 3 -g "like" /var/lib/mysql/slow-query.log



MySQL 清理slowlog方法

SET GLOBAL slow_query_log = 'OFF';

ALTER TABLEmysql.slow_log RENAME mysql.slow_log_drop;

CREATE TABLE mysql.slow_log LIKEmysql.slow_log_drop;

SET GLOBAL slow_query_log = 'ON';

DROP TABLE mysql.slow_log_drop;



默认情况下,MySQL不启动慢查询日志。若要检查慢查询,需要我们手动设置这个参数。一般情况下,若非调优需要,不建议启动该参数,因为开启慢查询日志或多或少会带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。


延伸阅读
    发表评论