1.MYSQL 慢查询
MySQL提供的一种慢查询日志记录,用来记录在MySQL查询中响应时间超过阀值的记录
具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
2.MYSQL慢查询设置
- slow_query_log //是否开启,默认关闭,建议调优时才开启(show variables like '%slow_query_log%' )
- slow_query_log_file //慢查询日志存放路径(show variables like '%slow_query_log_file%';)
3.如何开启慢查询日志记录
1) 命令式开启: set global slow_query_log =1; //只对当前会话生效,重启失效
2) 配置文件式开启(找到my.cnf文件):
vim my.cnf
在[mysqld]下添加:
slow_query_log = 1
slow_query_log_file = /opt/mysql-5.7.28/data/linux-141-slow.log
然后重启MySQL服务
3)哪些sql语句会被记录在慢查询日志
命令 : show variables like 'long_query_time%'; -- 查看阀值(大于阀值的sql会被记录在慢查询日志中),阀值默认10s
4)慢查询日志文件属性解释
# Time: 2021-09-15T01:51:07.737834Z ###### 执行SQL时间
# User@Host: root[root] @ [192.168.36.1] Id: 2 ###### 执行SQL的主机信息
# Query_time: 6.009129 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 ###### SQL的执行信息
SET timestamp=1631670667; ###### SQL执行时间
select sleep(6); ###### SQL内容
4.设置查询阀值
1)命令设置 set global long_query_time = 1; // -- 设置慢查询阀值(设置为1s)
(注:另外开一个session或重新连接 ,才会看到变化。例如使用navicat工具时,在阀值设置前已经打开了一个窗口,设置了阀值后,打开的新窗口查询阀值时才能看到设置后的值[1s],原来打开的窗口还是会只查看到未设置之前的值[10s]。)
2)配置文件设置
vim my.cnf
[mysqld]
long_query_time = 1 //设置慢查询阀值为1s
log_output = FILE
重启MySQL服务
3)查询阀值命令 show variables like '%long_query_time%';
5.如何把未使用索引的慢查询语句写入日志
1) -- 查看设置,默认关闭 (OFF) show variables like 'log_queries_not_using_indexes';
2) -- 开启配置 set global log_queries_not_using_indexes = on;
6.模拟sql语句慢查询数据
-- 睡眠2s再执行
select sleep(2);
-- 查看慢查询条数
show global status like '%Slow_queries%';
会发现,每执行一次select sleep(2),之后,再通过show global status …命令,他的值就会+1