沃梦达 / IT编程 / 数据库 / 正文

MySQL 开启慢查询日志的方法

MySQL 慢查询日志是用来记录执行时间较长的 SQL 语句的。通过分析慢查询日志,可以找出性能问题并进行优化。本文将介绍如何开启 MySQL 的慢查询日志,并且会给出两个示例。

MySQL 慢查询日志是用来记录执行时间较长的 SQL 语句的。通过分析慢查询日志,可以找出性能问题并进行优化。本文将介绍如何开启 MySQL 的慢查询日志,并且会给出两个示例。

步骤一:编辑 MySQL 配置文件

首先,需要找到 MySQL 的配置文件 my.cnf 或者 my.ini。通常在 Linux 上,my.cnf 文件位于 /etc/mysql/ 目录中;Windows 上则位于 MySQL 安装目录。打开该文件,找到 [mysqld] 配置块,添加以下内容:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
  • slow_query_log = 1:表示开启慢查询日志。0 表示关闭,默认为关闭状态。
  • slow_query_log_file:表示慢查询日志文件的存储路径。该路径必须有写权限。我们可以将日志文件保存在 /var/log/mysql/ 目录下。
  • long_query_time:表示执行时间达到多少秒的 SQL 查询会被记录到慢查询日志中。这里设置为 2 秒。

完成修改后,保存文件并重启 MySQL 服务,让设置生效。

步骤二:测试慢查询日志

为了测试慢查询日志是否生效,我们创建一张名为 users 的表,并向其中插入 100 万条数据:

CREATE TABLE users (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);

INSERT INTO users (name, email)
SELECT CONCAT('user', i), CONCAT('user', i, '@example.com')
FROM (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) sub1,
     (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) sub2,
     (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) sub3,
     (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) sub4;

接着,执行一个执行时间达到 5 秒的查询:

SELECT COUNT(*) FROM users u1, users u2, users u3, users u4, users u5;

我们可以通过以下命令检查慢查询日志文件的内容:

sudo tail /var/log/mysql/mysql-slow.log

可以看到输出结果如下:

# Time: 2021-09-06T08:05:42.543792Z
# User@Host: root[root] @ localhost []  Id:     3
# Query_time: 5.000064  Lock_time: 0.000119 Rows_sent: 1  Rows_examined: 1099511627776
SET timestamp=1630920342;
SELECT COUNT(*) FROM users u1, users u2, users u3, users u4, users u5;

可以看到我们执行的查询被记录到了慢查询日志中,并且查询时间超过了我们所设定的阈值。

示例二:手动记录慢查询

有时候我们需要手动记录某个查询语句到慢查询日志中,可以通过 MySQL 提供的 /*!50000 */ 注释来实现。

例如,我们想手动将下面这个查询加入到慢查询日志中:

SELECT * FROM users WHERE name LIKE '%john%';

只需要在该查询语句前加上 /*!50000 */ 注释:

/*!50000 SELECT * FROM users WHERE name LIKE '%john%'; */

接下来会将这个查询语句记录到慢查询日志中。

结束语

开启 MySQL 的慢查询日志有助于我们找出性能瓶颈,并进行优化。通过本文,你已经了解了如何开启慢查询日志,并且也学会了如何手动记录某个查询到日志中。

本文标题为:MySQL 开启慢查询日志的方法