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

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • MySQL/MariaDB/Percona数据库升级脚本

    MySQL/MariaDB/Percona数据库升级脚本可以帮助数据库管理员在数据库版本升级时自动化执行一些必要的操作,免去手动操作的繁琐和错误。下面是数据库升级脚本的完整攻略: 准备工作 在进行数据库升级之前,需要进行一些准备工作: 1.备份数据库:在升级前一定要备份数据库,以防操作失败或数据丢失引起的问题。 2.了解数据库版本:查看当前数据库的版本信息,…

    database 2023年5月22日
    00
  • .Net Core之Redis插件对比【CSRedisCore】【ServiceStack.Redis】【StackExchange.Redis】

    先说结论:推荐使用 【CSRedisCore】 原因:①号称Redis官方推荐的插件 ②功能应该是最全的 ③注释完美 ——————————————————那么分割线来了———————————————————- 接…

    Redis 2023年4月11日
    00
  • SQL Server 数据库的更改默认备份目录的详细步骤

    要更改 SQL Server 数据库的默认备份目录,可以按照以下步骤进行操作: 首先,在 SQL Server Management Studio 中连接到您要更改备份目录的 SQL Server 实例中; 在“对象资源管理器”窗口中选择“服务器对象”节点,并右键单击该节点; 选择“属性”选项,打开“服务器属性”对话框; 在左侧“选择页面”列表中,选择“数据…

    database 2023年5月21日
    00
  • node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例

    以下是详细的“node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例”的攻略: 步骤一:安装mongoose 在使用mongoose完成对数据库的操作之前,我们需要先安装它。可以通过npm命令来进行安装: npm install mongoose –save 步骤二:连接数据库 在使用mongoose操作数据库之前,我们需要连接到指…

    database 2023年5月22日
    00
  • Mysql中where与on的区别及何时使用详析

    下面是关于”Mysql中WHERE与ON的区别及何时使用”的完整攻略: 区别 WHERE WHERE是用于筛选行的(即对于SELECT语句或者UPDATE语句,我们使用WHERE语句来筛选需要处理的行记录); WHERE是在数据表中,查询完成后进行过滤的,即先从表中检索记录,再通过WHERE进行判断,将符合条件的记录返回; 示例1: SELECT * FRO…

    database 2023年5月22日
    00
  • MySQL 存储过程中执行动态SQL语句的方法

    MySQL 存储过程中执行动态 SQL 语句的方法: 在 MySQL 存储过程中,使用动态 SQL 是非常常见的需求。动态 SQL 可以帮助我们根据不同的参数生成不同的 SQL 语句,从而可以更加灵活地查询或操作数据。下面介绍两种执行动态 SQL 的方法。 PREPARE 和 EXECUTE 命令 使用 PREPARE 创建一个准备好的 SQL 语句,使用 …

    database 2023年5月22日
    00
  • SQL 计算非Null值的个数

    计算 SQL 表中非 Null 值的个数可以使用 COUNT 函数。COUNT 函数是 SQL 中最常用的聚合函数之一,它可以用来统计表中某列的数据个数。在计算非 Null 值的个数时,需要使用 COUNT 函数结合 IS NOT NULL 运算符来实现。下面是两个实例代码: 统计某一列中非 Null 值的个数 SELECT COUNT(column_nam…

    database 2023年3月27日
    00
  • DBMS 中的平凡函数依赖

    DBMS 中的平凡函数依赖 什么是函数依赖 在数据库设计中,函数依赖指的是一个数据关系中的一个属性在给定其他属性后可以推导出唯一的属性值。例如,一个订单中的订单号可以唯一确定订单的客户名。 函数依赖可以分为平凡函数依赖和非平凡函数依赖。 平凡函数依赖 平凡函数依赖是指一个属性A依赖于自身。就是说,A的值总是等于A的值。这种函数依赖是很无用的,因为它并没有提供…

    database 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部