如何进行mysql慢查询日志设置以及日志管理与分析

1、引言

MySQL的慢查询日志是MySQL提供的一种日志记录功能,它用于记录在MySQL中响应时间超过设定阈值的SQL语句。

主要作用如下:

发现性能问题 :通过分析慢查询日志,可以找出执行时间较长的SQL语句,从而发现潜在的性能瓶颈。

优化查询性能 :基于慢查询日志的分析结果,可以对SQL语句进行优化,如添加索引、重写SQL语句等,以提高查询效率。

监控数据库健康:慢查询日志还可以用于监测数据库的运行状态,确保数据库的稳定性和高效性。

2、相关参数与配置

2.1、slow_query_log

slow_query_log:控制是否开启慢查询日志功能,默认值为OFF(关闭)。要启用慢查询日志,需要将其设置为ON。

查看慢查询日志功能是否开启,在mysql命令窗口执行:SHOW VARIABLES LIKE '%slow_query_log%'; 如下:

复制代码
mysql> SHOW VARIABLES LIKE '%slow_query_log%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log      | OFF                                  |
| slow_query_log_file | /var/lib/mysql/92a08ceba24b-slow.log |
+---------------------+--------------------------------------+
2 rows in set (0.03 sec)

在命令窗口执行:set global slow_query_log = 1; 如下:

复制代码
mysql> set global slow_query_log = 1;
Query OK, 0 rows affected (0.07 sec)

再次执行SHOW VARIABLES LIKE '%slow_query_log%';如下:

复制代码
mysql> SHOW VARIABLES LIKE '%slow_query_log%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log      | ON                                   |
| slow_query_log_file | /var/lib/mysql/92a08ceba24b-slow.log |
+---------------------+--------------------------------------+
2 rows in set (0.04 sec)

查询当前系统中有多少条慢查询记录,在命名窗口执行:show global status like '%Slow_queries%'; 如下:

复制代码
mysql> show global status like '%Slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 0     |
+---------------+-------+
1 row in set (0.03 sec)

2.2、slow_query_log_file

指定慢查询日志文件的位置和名称。默认情况下,日志文件位于MySQL数据目录下,文件名通常为"主机名-slow.log"。

指定慢查询日志文件的位置和名称:/var/lib/mysql/localhost-slow.log,再次查看慢日志文件名称和位置已经改变,如下:

复制代码
mysql> SET GLOBAL slow_query_log_file = '/var/lib/mysql/localhost-slow.log';
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW VARIABLES LIKE '%slow_query_log%';
+---------------------+-----------------------------------+
| Variable_name       | Value                             |
+---------------------+-----------------------------------+
| slow_query_log      | ON                                |
| slow_query_log_file | /var/lib/mysql/localhost-slow.log |
+---------------------+-----------------------------------+
2 rows in set (0.09 sec)

2.3、long_query_time

定义查询执行时间的阈值,默认值为10秒。只有执行时间超过此阈值的SQL语句才会被记录到慢查询日志中。可以根据需要调整此参数的值,以捕获更多的慢查询。

查看当前慢查询阈值:SHOW VARIABLES LIKE 'long_query_time%';

复制代码
mysql> SHOW VARIABLES LIKE 'long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.04 sec)

设置慢查询阈值:SET GLOBAL long_query_time = 5;

复制代码
mysql> SET GLOBAL long_query_time = 5;
Query OK, 0 rows affected (0.00 sec)

2.4、log_queries_not_using_indexes

决定是否记录未使用索引的查询,默认值为OFF(关闭)。开启此参数后,可以更容易地发现潜在的索引缺失问题,从而进行优化。

查询是否开启记录未使用索引的查询,如下:

复制代码
mysql> SHOW VARIABLES LIKE 'log_queries_not_using_indexes%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF   |
+-------------------------------+-------+
1 row in set (0.04 sec)

开启记录未使用索引的查询,如下:

复制代码
mysql> SET GLOBAL log_queries_not_using_indexes = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'log_queries_not_using_indexes%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON    |
+-------------------------------+-------+
1 row in set (0.07 sec)
相关推荐
友莘居士25 分钟前
高效处理 Excel 海量数据入库:编程脚本、CSV 中间件、图形工具优化全攻略
数据库·中间件·excel·csv·海量数据·入库
柳鲲鹏1 小时前
交叉编译:strip: Unable to recognise the format of the input file xx.c.o
linux·运维·服务器
Han.miracle1 小时前
数据库圣经第二章——简单的my.ini基础配置介绍
数据库
Le1Yu1 小时前
微服务拆分以及注册中心
linux·运维·服务器
zzzsde2 小时前
【Linux】linux基础指令入门(1)
linux·运维·学习
八怪2 小时前
KILL MTS的一个worker线程会怎么样
数据库
disanleya2 小时前
MySQL数据库安装后,如何设置自动化备份策略?
mysql
moxiaoran57532 小时前
nginx中proxy_pass配置
运维·服务器·nginx
leellun2 小时前
在Centos上安装Python指定版本
linux·运维·centos