MYSQL–基础–10–慢查询日志
1、是什么
- 是MySQL提供的一种日志记录,支持将日志记录写入文件
- 将SQL查询时间超过(大于)设置阈值的语句,记录到慢查询日志中。
2、查看语句
2.1、慢日志是否开启和日志文件位置
show variables like '%slow_query_log%';
2.2、慢日志阈值
show variables like '%long_query_time%';
2.3、查询当前系统有多少条慢查询记录
show global status like '%Slow_queries%';
2、开启慢查询日志
- 默认情况下,MySQL没有开启慢查询日志。需要手动打开
- 不建议开启,因为开启会带来一定的性能影响
2.1、临时开启
# 开启慢查询日志,只对当前数据库生效,并且重启数据库后失效
set global slow_query_log = 1;
# 设置阈值
set long_query_time = 3;
2.2、永久开启
修改配置文件my.cnf,新增如下内容
[mysqld]
## 开启慢查询日志,开启后将会记录执行时间超过 long_query_time 参数值的 SQL 语句( 一般临时开启即可 )
slow_query_log = 1
## 定义执行时间超过多少秒为慢查询,默认 10s
long_query_time = 1
## 定义慢查询日志存放位置
slow_query_log_file = /data/mysql/logs/slow.log
MySQL–慢查询日志
3、mysqldumpslow
能将相同的慢SQL归类,并统计出相同的SQL执行的次数,每次执行耗时多久、总耗时,每次返回的行数、总行数,以及客户端连接信息等。
3.1、查看帮助
cd /data/mysql/install/bin/
./mysqldumpslow --help
内容
[root@crc-uat-oa-mysql bin]# ./mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
Parse and summarize the MySQL slow query log. Options are
--verbose verbose
--debug 调试
--help 帮助文档
-v verbose
-d 调试
# 表示按何种方式排序
-s ORDER what to sort by (al, at, ar, c, l, r, t), 'at' is default
al: 平均 锁定时间
ar: 平均 返回记录
at: 平均 查询时间
c: 访问次数
l: 锁定时间
r: 返回记录
t: 查询时间
-r 颠倒排序顺序(最大的最后一个而不是第一个)
-t NUM 返回前面多少条数据
-a don't abstract all numbers to N and strings to 'S'
-n NUM abstract numbers with at least n digits within names
-g PATTERN 后面搭配一个正则匹配模式,大小写不敏感。
-h HOSTNAME 数据库服务器的主机名 for *-slow.log 文件,默认是 '*', 表示匹配所有
-i NAME 服务器实例的名称(如果使用mysql.server启动脚本
-l 不要从总时间中减去锁定时间
3.2、测试
# 得到返回记录集最多的10 个SQL
./mysqldumpslow -s r -t 10 /data/mysql/logs/slow.log
# 得到访问次数最多的10 个SQL
./mysqldumpslow -s c -t 10 /data/mysql/logs/slow.log
# 得到按照时间排序的前10 条里面含有左连接的查询语句
./mysqldumpslow -s t -t 10 -g "left join" /data/mysql/logs/slow.log
# 另外建议在使用这些命令时结合| 和more 使用,否则有可能出现爆屏情况
./mysqldumpslow -s r -t 10 /data/mysql/logs/slow.log | more