MySQL慢查询配置

171 阅读2分钟

1:打开慢SQL日志(临时)

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

(1) 查看慢SQL是否开启:show VARIABLES like '%slow_query_log%';
(2) 开启慢SQL日志:set global slow_query_log=1;
(3) 查看慢SQL阈值:show VARIABLES like '%long_query_time%',单位秒;
(4) 设定慢SQL阈值set long_query_time=5

2.打开慢SQL日志(永久)

2.1在MySQL配置文件中添加如下配置

[mysqld]
slow_query_log=ON
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=3 #5.6以后的版本支持小于1\

2.2windows版本:如永久生效需要修改配置文件 my.ini中

[mysqld]
slow_query_log=ON
slow_query_log_file=D:\mysql-5.7.21-winx64\data\LAPTOP-VC53HCIP-slow.log
long_query_time=3\

慢SQL日志解析

# Time: 2023-02-17T03:17:03.910750Z
# User@Host: root[root] @ [113.98.246.225] Id: 4
# Query_time: 0.104151 Lock_time: 0.000116 Rows_sent: 1000 Rows_examined: 1000
SET timestamp=1676603823;
SELECT * FROM js_sys_area LIMIT 0, 1000;\

第一行,SQL查询执行的时间
第二行,执行SQL查询的连接信息,用户和连接IP
第三行,记录了一些我们比较有用的信息,如下解析:

  • Query_time,这条SQL执行的时间,越长则越慢
  • Lock_time,在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间
  • Rows_sent,查询返回的行数
  • Rows_examined,查询检查的行数,越长就当然越费时间
    第四行,设置时间戳,没有实际意义,只是和第一行对应执行时间。
    第五行及后面所有行(第二个# Time:之前),执行的sql语句记录信息,因为sql可能会很长。

MYSQL慢查询日志分析方法

(1) 使用mysql程序自带的mysqldumpslow命令分析

mysqldumpslow -s c -t 10 /tmp/slow-log
这会输出记录次数最多的10条SQL语句,得出的结果和上面一般慢查询记录的格式没什么太大差别,这里就不展开来详细解析了。
参数意义:
image.png