Mysql 基础学习(二十)-- 慢查询日志

慢查询日志

Mysql的慢查询日志是Mysql 提供的一种日志记录,它用来记录在Mysql中响应时间超过 阈值 的语句,具体指运行时间超过 long_query_time 值得SQL,则会被记录到慢查询日志中,long_query_time得默认值为10,意思是运行 10 秒以上得语句,比如一条 SQL 执行超过 10 秒钟,我们就算慢SQL,收集超过10 秒以上的 SQL, 结合之前 explain 进行全面分析。

默认情况下,MySQL得数据库没有开启慢查询日志,需要我们手动来设置该参数,需要我们手动来设置这个参数, 当然,如果不是调优需要的话,一般不建议开启该参数,因为开启慢查询之后,会或多或少得带来一定的性能影响。慢查询日志 支持将日志记录写入文件

查看是否开启以及如何开启
# 查看语句
SHOW VARIABLES LIKE "%slow_query_log%";
+---------------------+-----------------+
| Variable_name       | Value           |
+---------------------+-----------------+
| slow_query_log      | ON              |
| slow_query_log_file | GSSZNB-slow.log |
+---------------------+-----------------+

开启 慢查询日志

SET GLOBAL slow_query_log = 1;

开启之后只对当前数据库有效,重启数据库之后,就会恢复默认。

关闭慢查询日志

SET GLOBAL slow_query_log = 0

如果想要永久性 修改,那么修改配置文件 my.cnf 在 [mysqld] 下增加或者修改参数

slow_query_log=1
slow_query_log_file=/var/lib/mysql/log/gssznb-slow.log

如果慢查询的参数 slow_query_log_file , 它指定慢查询日志文件得存放路径,系统会给一个默认得缺省文件 host_name-slow.log(如果没有指定参数得slow_query_log_file的话)

开启了慢查询日志之后,什么样的SQL,才会记录到慢查询日志记录中呢

这个是由参数 long_query_time 控制,默认情况下 long_query_time 的值为 10秒

查看 参数 long_query_time 值

show variables like "long_query_time%";
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)

假如运行时间刚好等于 long_query_time的时间,是不会被记录下来的。只有大于 long_query_time. 并非 大于等于

设置慢的 阈值 时间

SET GLOBAL long_query_time = 3;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like "long_query_time%";
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)
# 重新设置阈值之后查看这之后还是 10s 。
# 只有重新连接或者新开一个绘画才能够看到修改值
# 重新创建一个连接
mysql -uroot -proot

 show variables LIKE "%long_query_time%";
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 3.000000 |
+-----------------+----------+
1 row in set, 1 warning (0.00 sec)

# 这个时候发现 long_query_time 的值 变为了 3

开启了慢查询日志之后,模拟一个慢查询SQL,然后查看慢查询日志


show variables like "%slow%";
+---------------------+--------------------------------------------------------------------------------------------------------------+
| Variable_name       | Value                                                                                                        |
+---------------------+--------------------------------------------------------------------------------------------------------------+
| log_slow_filter     | admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk |
| log_slow_queries    | ON                                                                                                           |
| log_slow_rate_limit | 1                                                                                                            |
| log_slow_verbosity  |                                                                                                              |
| slow_launch_time    | 2                                                                                                            |
| slow_query_log      | ON                                                                                                           |
| slow_query_log_file | VM_0_11_centos-slow.log                                                                                      |
+---------------------+--------------------------------------------------------------------------------------------------------------+
# VM_0_11_centos-slow.log 是慢查询日志文件名
# 模拟慢查询SQL
SELECT SLEEP(15);
# 进入到  /var/lib/mysql/
# 找到日志文件并查看
[root@VM_0_11_centos mysql]# cat VM_0_11_centos-slow.log
/usr/libexec/mysqld, Version: 5.5.60-MariaDB (MariaDB Server). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 191009 14:00:39
# User@Host: root[root] @ localhost []
# Thread_id: 71919  Schema:   QC_hit: No
# Query_time: 15.008155  Lock_time: 0.000000  Rows_sent: 1  Rows_examined: 0 
SET timestamp=1570600839;   
select sleep(15); # 对应的SQL语句

想要永久性生效,修改 mysqld 下配置

slow_query_log=1;
slow_query_log_file=/var/lib/mysql/gss-slow.log;
log_query_time=3;
log_output=FILE;
使用 mysqldumpslow 慢查询日志分析工具
# 得到返回记录中最多的 10 个SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/slow.log
# 得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/slow.log
# 得到时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/slow.log
# 建议与more 命令一起使用,
mysqldumpslow -s r -t 10 /var/lib/mysql/slow.log | more
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值