特别说明
默认情况下,MysQL 数据库没有开启慢查询日志,需要我们手动来设置这个参数
当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件
slow_query_log 是否启用慢查询日志,默认为0,可设置为0、1,1表示开启。
slow_query_log_file 指定慢查询日志位置及名称,默认值为host_name-slow.log,可指定绝对路径。
long_query_time 慢查询执行时间阈值,超过此时间会记录,默认为10,单位为s。
log_output 慢查询日志输出目标,默认为file,即输出到文件。
log_timestamps 主要是控制 error log、slow log、genera log 日志文件中的显示时区,默认使用UTC时区,建议改为 SYSTEM 系统时区。
log_queries_not_using_indexes 是否记录所有未使用索引的查询语句,默认为off。
min_examined_row_limit 对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中,默认为0。
log_slow_admin_statements 慢速管理语句是否写入慢日志中,管理语句包含 alter table、create index 等,默认为 off 即不写入
查看是否开启慢查询日志
show variables like '%slow_query_log%';
开启慢查询-临时 当前会话有效
set global slow_query_log='ON';
如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)。
my.cnf要增加或修改参数slow_query_log 和slow_query_log_file,如下所示:
slow_query_log = 1
slow_query_log_file = /tmp/mysql_slow.log
查看慢查询日志存放文件位置
show variables like '%slow_query_log_file%';
查看long_query_time阈值
show variables like '%long_query_time%';
设置long_query_time阈值—临时的,当前会话有效。时间根据自己需求设置
set global long_query_time=3
查询和设置log_output-(参数指定日志的存储方式)
log_output=‘FILE’表示将日志存入文件,默认值也是’FILE’。
log_output='TABLE’表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。
同时也支持两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=‘FILE,TABLE’。不过为了性能考虑建议优先写入到文件中
查询
show variables like '%log_output%';
设置
set global log_output='TABLE';
可以直接sql查询慢sql
select * from mysql.slow_log;
查询和设置log_queries_not_using_indexes-可选项-如果调优的话,建议开启这个选项。
该系统变量指定未使用索引的查询也被记录到慢查询日志中。
查询:
show variables like 'log_queries_not_using_indexes';
设置开启
set global log_queries_not_using_indexes=1;
查询有多少条慢SQL查询日志-Slow_queries
show global status like '%Slow_queries%';
在 MySQL 中,慢查询日志中默认不记录管理语句,如:
alter table,
analyze table,
check table
开启
set global log_slow_admin_statements = "ON";
直接修改配置文件-全局需要重启mysql服务谨慎执行
#编辑配置文件
vim /etc/my.cnf
# 修改配置项(如果没有就加上)
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/my-slow.log
long_query_time = 1
log_timestamps = SYSTEM
log_output = FILE
# 重启mysqld服务
systemctl restart mysqld
# 查看mysqld服务
systemctl status mysqld
-mysql自带的慢查询分析工具,专业的分析工具还有Navicat Monitor,hertzbeat,pt-query-digest等分析工具
Percona Toolkit是一套用于MySQL性能分析和优化的工具集合。其中包括 pt-query-digest工具,它可以分析MySQL慢查询日志并生成详细的报告-以后单独出文章编写
pt-query-digest /path/to/slow.log
[root@DB-Server ~]# mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
Parse and summarize the MySQL slow query log. Options are
--verbose verbose
--debug debug
--help write this text to standard output
-v verbose
-d debug
-s ORDER what to sort by (al, at, ar, c, l, r, t), 'at' is default(排序方式)
al: average lock time(平均锁定时间)
ar: average rows sent(平均返回记录数)
at: average query time(平均查询时间)
c: count(访问计数)
l: lock time(锁定时间)
r: rows sent(返回记录)
t: query time(查询时间)
-r reverse the sort order (largest last instead of first)
-t NUM just show the top n queries(返回前面n条数据)
-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 grep: only consider stmts that include this string(正则匹配模式,大小写不敏感)
-h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
default is '*', i.e. match all
-i NAME name of server instance (if using mysql.server startup script)
-l don't subtract lock time from total time
得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log
得到访问次数最多的10个SQL:
mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log
得到按照时间排序的前10条里面含有左连接的查询语句:
mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log
取出查询时间最慢的10条慢查询
mysqldumpslow -s t -t 10 /database/mysql/mysql06_slow.log