目录
Mysql默认情况下没有打开慢日志,主要是因为慢日志可能会对数据库的性能产生一定的影响。当开启慢日志时,Mysql需要在每次执行语句时判断是否超过了慢日志的阈值,这会增加额外的计算和存储开销。此外,如果慢日志记录的数据量过大,也会占用大量的磁盘空间,进一步影响数据库性能。因此,开启慢日志需要在保证数据库性能的前提下进行,需要根据实际需求进行设置。
一、开启慢查询日志
1、命令开启
1、查看、开启慢查询日志
show global variables like 'slow_query_log'
set global slow_query_log=on;
默认慢查询日志是关闭的。on为打开,才会记录慢SQL
2、查看、设置慢查询阈值
show global variables like 'long_query_time'
set global long_query_time=1;
默认阈值时间10s,SQL执行时间超过这个阈值就会被记录到慢查询日志里面
3、查找慢查询日志存储路径
show global variables like 'slow_query_log_file'
以下为可选项:
1、查找、设置保存方式
show variables like '%log_output%';
set global log_output='FILE,TABLE';
默认FILE。FILE:保存在文件,通过慢日志查询存储路径命令查询保存位置
TABLE:保存在数据库,会保存到mysql库的slow_log表中
2、查询有多少条慢SQL
show global status like '%Slow_queries%'
3、查询、设置未使用索引的SQL记录
show variables like 'log_queries_not_using_indexes'
set global log_queries_not_using_indexes=on;
默认OFF。该系统变量指定未使用索引的查询也被记录到慢查询日志中(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使用full index scan的SQL也会被记录到慢查询日志。
2、配置my.cnf 文件
[mysqld]
slow_query_log=ON #开启慢查询日志的开关
slow_query_log_file=/var/mysql/sql.log #慢查询日志的目录和文件名信息
long_query_time=10 #设置慢查询的阈值为10秒,超出此设定值的SQL即被记录到慢查询日志
log_output=FILE # 一般有两种形式,一种是输出到文件FILE中,一种是写入数据表格table中,会保存到mysql库的slow_log表中
注意:配置后重启mysql服务。
二、测试慢查询日志
睡眠3s
SELECT SLEEP(3);
打开慢查询日志查看
# Time: 2023-11-28T13:26:37.347302Z
# User@Host: root[root] @ localhost [::1] Id: 8
# Query_time: 10.005503 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1
SET timestamp=1701177987;
SELECT SLEEP(10);
Time: 发生时间
User: 用户
root: 主机
localhost: IP
Id: 连接ID
Query_time:查询执行时间
Lock_time: 锁定时间,0.000000,表示没有涉及锁定操作
Rows_sent: 查询结果集的行数
Rows_examined:查询期间的检查行