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 开启慢查询日志的方法 - Python技术站