如何进行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)
相关推荐
老苏畅谈运维30 分钟前
MySQL性能分析的“秘密武器”,深度剖析SQL问题
数据库·sql·mysql
金融OG37 分钟前
99.16 金融难点通俗解释:营业总收入
大数据·数据库·python·机器学习·金融
Java诗人DK1 小时前
windows 安装 mysql 教程
数据库·windows·mysql
头铁散人2 小时前
IMX6ull项目环境配置
linux·运维·服务器
loser~曹3 小时前
Redis实现,分布式Session共享
数据库·redis·分布式
半夏一4 小时前
中级运维工程师面试题汇总(含答案)
运维
患得患失9495 小时前
【Django DRF Apps】【文件上传】【断点上传】从零搭建一个普通文件上传,断点续传的App应用
数据库·后端·django·sqlite·大文件上传·断点上传
怡步晓心l5 小时前
Linux下Ubuntun系统报错find_package(BLAS REQUIRED)找不到
linux·运维·服务器
老大白菜6 小时前
GoFrame MongoDB 使用指南
数据库·mongodb
Elastic 中国社区官方博客6 小时前
使用 Confluent Cloud 的 Elasticsearch Connector 部署 Elastic Agent
大数据·数据库·elasticsearch·搜索引擎·全文检索·confluent