Jw
首页
技术
英语
首页
技术
英语
  • MySQL

    • MySQL 基础
    • 环境变量配置(PATH)
    • SQL 语法与分类
    • MySQL 数据类型
    • SQL - DDL 数据定义语言
    • SQL - DML 数据操作语言
    • SQL - DQL 数据查询语言
    • SQL - DCL 数据控制语言
    • MySQL 函数
    • SQL 约束
    • SQL 外键约束
    • 多表关系
    • 多表查询(连接查询)
    • 隐式内连接 vs 显式内连接
    • 子查询
    • 多表查询案例
    • 事务
    • 并发事务问题与隔离级别
    • MySQL 体系结构与存储引擎
    • 索引概述
    • 索引结构
    • 索引分类
    • 索引语法
    • SQL 性能分析
    • 索引使用
    • 索引设计原则
    • SQL 优化 - 插入数据与主键优化
    • SQL 优化 - order by 与 group by
    • SQL 优化 - limit / count / update
    • 视图
    • 存储过程
    • 存储过程 - 变量
    • 存储过程 - 流程控制、游标与条件处理
    • 存储函数
    • 触发器
    • 锁概述与全局锁
    • 表级锁
    • 行级锁
    • InnoDB 逻辑存储结构
    • InnoDB 架构
    • 事务原理(redo / undo log)
    • MVCC
    • MySQL 系统数据库
    • MySQL 常用工具
    • 数据备份与导入导出
    • 错误日志与二进制日志
    • 查询日志与慢查询日志
    • 主从复制 - 概述与原理
    • 主从复制 - 搭建
    • Mycat 配置
    • Mycat 垂直拆分与水平拆分
    • Mycat 分片规则
    • Mycat 管理与监控
    • Mycat 读写分离 - 一主一从
    • Mycat 读写分离 - 双主双从

查询日志与慢查询日志

查询日志记录客户端的所有操作语句,默认关闭;慢查询日志记录执行超时且扫描行数达到阈值的 SQL,是定位慢 SQL 的主要入口。

一、查询日志

  • 查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的 SQL 语句。
  • 默认情况下,查询日志是未开启的。
-- 查看查询日志状态与文件位置
SHOW VARIABLES LIKE 'general%';
参数默认值含义
general_logOFF是否开启查询日志
general_log_file/var/lib/mysql/localhost.log日志文件位置

开启方式:修改 MySQL 配置文件 /etc/my.cnf,添加如下内容后重启服务:

# 该选项用来开启查询日志,可选值:0 或者 1;0 代表关闭,1 代表开启
general_log=1

# 设置日志的文件名,如果没有指定,默认的文件名为 host_name.log
general_log_file=mysql_query.log

查询日志会记录每一条语句,开销较大,一般只在排查问题时临时开启。

二、慢查询日志

2.1 介绍

慢查询日志记录了所有执行时间超过参数 long_query_time 设置值并且扫描记录数不小于 min_examined_row_limit 的所有 SQL 语句的日志。

  • 默认未开启。
  • long_query_time 默认为 10 秒,最小为 0,精度可以到微秒。
# 慢查询日志
slow_query_log=1

# 执行时间参数
long_query_time=2

2.2 记录范围控制

默认情况下,不会记录管理语句,也不会记录不使用索引进行查找的查询。可以通过以下参数更改:

# 记录执行较慢的管理语句
log_slow_admin_statements=1

# 记录执行较慢的未使用索引的语句
log_queries_not_using_indexes=1

2.3 查看与验证

-- 是否开启、阈值、日志文件位置
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';

-- 运行时开启(重启失效,永久生效需改配置文件)
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;

-- 查看慢查询条数
SHOW GLOBAL STATUS LIKE 'Slow_queries';

速查

-- 查询日志:状态 / 文件
SHOW VARIABLES LIKE 'general%';

-- 慢查询日志:状态 / 阈值 / 文件
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';

-- 运行时开启慢查询(重启失效)
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;

-- 慢查询累计条数
SHOW GLOBAL STATUS LIKE 'Slow_queries';
# /etc/my.cnf:查询日志
general_log=1
general_log_file=mysql_query.log

# /etc/my.cnf:慢查询日志
slow_query_log=1
long_query_time=2
log_slow_admin_statements=1
log_queries_not_using_indexes=1
要做什么用什么
记录客户端所有语句general_log=1(开销大,临时开启)
找出执行慢的 SQLslow_query_log=1 + long_query_time
连未走索引的慢 SQL 也记log_queries_not_using_indexes=1
让配置永久生效写入 /etc/my.cnf 后重启

相关

  • 错误日志与二进制日志:错误日志、binlog 的格式与清理
  • SQL 性能分析:慢查询日志之后的 profile 与 EXPLAIN
  • 索引使用:log_queries_not_using_indexes 抓到的未走索引 SQL
最近更新: 2026/10/25 11:41
Contributors: liujw
Prev
错误日志与二进制日志
Next
主从复制 - 概述与原理