MySQL 慢查询日志开启与问题排查指南

MySQL 慢查询日志开启与问题排查指南

MySQL 的慢查询日志(Slow Query Log)是优化数据库性能的重要工具。它可以帮助我们识别执行时间较长的 SQL 语句,从而有针对性地进行优化。然而,在实际使用中,可能会遇到一些意外情况,比如执行时间很短的查询也被记录到慢查询日志中。本文将详细介绍如何开启慢查询日志,并解决常见问题。


一、什么是慢查询日志?

慢查询日志是 MySQL 提供的一种日志功能,用于记录执行时间超过指定阈值的 SQL 语句。通过分析这些慢查询,我们可以发现潜在的性能瓶颈,并采取相应的优化措施。


二、如何开启慢查询日志?

1. 检查慢查询日志状态

登录 MySQL 后,执行以下命令查看慢查询日志是否已启用:

SHOW VARIABLES LIKE 'slow_query_log';

• 如果结果为 ON,表示慢查询日志已启用。
• 如果结果为 OFF,需要手动启用。

2. 临时启用慢查询日志

在 MySQL 中执行以下命令:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;  -- 设置慢查询阈值(单位:秒)
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';  -- 指定日志文件路径
3. 永久启用慢查询日志

编辑 MySQL 配置文件(通常为 /etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf),添加或修改以下内容:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2  -- 执行时间超过 2 秒的查询将被记录
log_queries_not_using_indexes = 1  -- 记录未使用索引的查询(可选)

保存后重启 MySQL 服务:

sudo systemctl restart mysqld

三、如何查看慢查询日志?

1. 查看日志文件

慢查询日志默认保存在 /var/log/mysql/slow.log(路径可通过 slow_query_log_file 变量查看)。使用以下命令查看日志内容:

sudo cat /var/log/mysql/slow.log
2. 使用 mysqldumpslow 分析日志

MySQL 提供了 mysqldumpslow 工具,用于分析慢查询日志并生成统计信息。以下是常用命令示例:
• 查看最慢的 10 条查询:

sudo mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

• 查看未使用索引的查询:

sudo mysqldumpslow -g 'not_using_index' /var/log/mysql/slow.log

• 按执行次数排序:

sudo mysqldumpslow -s c -t 10 /var/log/mysql/slow.log

四、常见问题及解决方案

1. 执行时间很短的查询被记录

默认情况下,MySQL 只会记录执行时间超过 long_query_time 的查询。如果执行时间很短的查询也被记录,可能是以下原因:

(1) 启用了 log_queries_not_using_indexes

如果启用了该选项,MySQL 会记录所有未使用索引的查询,即使它们的执行时间很短。

检查是否启用:

SHOW VARIABLES LIKE 'log_queries_not_using_indexes';

禁用该选项:

SET GLOBAL log_queries_not_using_indexes = 'OFF';
(2) long_query_time 设置过低

如果 long_query_time 设置得非常低(例如 0.001 秒),即使是执行时间很短的查询也会被记录。

检查当前设置:

SHOW VARIABLES LIKE 'long_query_time';

调整阈值:

SET GLOBAL long_query_time = 2;
(3) 查询涉及 INFORMATION_SCHEMA

某些工具生成的查询(如 INFORMATION_SCHEMA.PROFILING)可能会被记录,即使它们的执行时间很短。

优化建议:
• 避免频繁查询 INFORMATION_SCHEMA
• 使用缓存减少查询频率。

2. 慢查询日志文件过大

如果慢查询日志文件未被正确轮转或清理,可能会导致日志文件过大。

清理日志文件:

echo "" > /var/log/mysql/slow.log

启用日志轮转:
创建 /etc/logrotate.d/mysql-slow 文件:

/var/log/mysql/slow.log {dailyrotate 7missingokcompressdelaycompressnotifemptycreate 640 mysql mysqlsharedscriptspostrotate/usr/bin/mysql -e "FLUSH SLOW LOGS;"endscript
}

五、优化慢查询的建议

  1. 添加索引:确保查询字段已建立索引。
    CREATE INDEX idx_name ON table_name(column_name);
    
  2. 优化 SQL 语句:避免全表扫描,使用 EXPLAIN 分析查询计划。
    EXPLAIN SELECT * FROM table_name WHERE condition;
    
  3. 调整表结构:将大表拆分为小表,或使用分区表。
  4. 缓存结果:对于频繁查询且数据变化较少的场景,使用缓存(如 Redis)。

六、总结

慢查询日志是优化 MySQL 性能的重要工具,但需要正确配置和使用。通过本文的指南,您可以轻松开启慢查询日志,并解决常见问题。如果仍有疑问,欢迎在评论区留言讨论!


参考文档:
• MySQL 官方文档
• mysqldumpslow 使用指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39876.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数仓架构告别「补丁」时代!全新批流一体 Domino 架构终结“批流缝合”

在数字化转型的浪潮中,企业对数据处理的需求日益复杂多变,传统的批处理和流处理架构已难以满足日益增长的性能和时效性要求。在此背景下,YMatrix CEO 姚延栋发布了深度文章《数仓架构告别「补丁」时代!全新批流一体 Domino 架构终…

HTB 笔记 | SQL 注入基础 + 实操小练习 P2

1. 数据库类型 数据库分为两类: 关系型数据库(Relational Databases) 使用表格存储数据(行和列)。数据通过“键”连接,形成逻辑关系。示例:MySQL、PostgreSQL、SQL Server。特点:结…

MySQL 入门大全:数据类型

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

解决 Not allowed to load local resource 问题

记录一下遇到的问题&#xff1a;html跳转本地资源&#xff0c;用相对路径 这样是不对的&#xff0c;要用 <script src"/jquery.min.js"></script> 网络路径也行&#xff0c;慢了一点 记得一定要关闭浏览器的广告屏蔽器 绝对路径也行&#xff0c;不过要…

STM32实现智能温控系统(暖手宝):PID 算法 + DS18B20+OLED 显示,[学习 PID 优质项目]

一、项目概述 本文基于 STM32F103C8T6 单片机&#xff0c;设计了一个高精度温度控制系统。通过 DS18B20 采集温度&#xff0c;采用位置型 PID 算法控制 PWM 输出驱动 MOS 管加热Pi膜&#xff0c;配合 OLED 实时显示温度数据。系统可稳定将 PI 膜加热至 40℃&#xff0c;适用于…

[深度学习]图像分类项目-食物分类

图像分类项目-食物分类(监督学习和半监督学习) 文章目录 图像分类项目-食物分类(监督学习和半监督学习)项目介绍数据处理设定随机种子读取文件内容图像增广定义Dataset类 模型定义迁移学习 定义超参Adam和AdamW 训练过程半监督学习定义Dataset类模型定义定义超参训练过程 项目介…

C++初阶入门基础二——类和对象(中)

1类的默认成员函数 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个默认成员函数&#xff0c;需要注意的是这6个中最重要的是前4个&#xff0c;最后两个取地址重载不重…

基于SSM框架的线上甜品销售系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此网上销售信息的…

3.25学习总结java 接口+内部类

JDK8以后新增的方法 可以将接口中静态方法和抽象方法中重复的部分抽离出来&#xff0c;作为私有方法&#xff0c;用去private修饰&#xff0c;此方法只为接口提供服务&#xff0c;不需要外界访问。 接口的应用 接口代表规则&#xff0c;是行为的抽象&#xff0c;想让哪个类拥有…

Linux--环境变量

ok&#xff0c;今天我们来学习Linux中的环境变量、地址空间、虚拟内存 环境变量 基本概念 环境变量(environmentvariables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我…

Java 集合 List、Set、Map 区别与应用

一、核心特性对比 二、底层实现与典型差异 ‌List‌ ‌ArrayList‌&#xff1a;动态数组结构&#xff0c;随机访问快&#xff08;O(1)&#xff09;&#xff0c;中间插入/删除效率低&#xff08;O(n)&#xff09;‌‌LinkedList‌&#xff1a;双向链表结构&#xff0c;头尾操作…

基于 arco 的 React 和 Vue 设计系统

arco 是字节跳动出品的企业级设计系统&#xff0c;支持React 和 Vue。 安装模板工具 npm i -g arco-cli创建项目目录 cd someDir arco init hello-arco-pro? 请选择你希望使用的技术栈React❯ Vue? 请选择一个分类业务组件组件库Lerna Menorepo 项目❯ Arco Pro 项目看到以…

JVM-GC(G1)实践—GC异常定位、参数调整、GC更换

前言 如SpringBoot官方介绍所说的那样&#xff0c;从SpringBoot3.x开始支持的最低JDK版本为&#xff1a;JDK17&#xff08;官方推荐使用BellSoft Liberica JDK&#xff09;&#xff0c;其对应的GC为G1。 本文笔者从应用实践的角度出发&#xff0c;记录一些关于GC的一些实践总…

吾爱出品,文件分类助手,高效管理您的 PC 资源库

在日常使用电脑的过程中&#xff0c;文件杂乱无章常常让人感到困扰。无论是桌面堆积如山的快捷方式&#xff0c;还是硬盘中混乱的音频、视频、文档等资源&#xff0c;都急需一种高效的整理方法。文件分类助手应运而生&#xff0c;它是一款文件管理工具&#xff0c;能够快速、智…

修改Flutter工程中Android项目minSdkVersion配置

Flutter项目开发过程中&#xff0c;根据模板自动生成.android项目&#xff0c;其中app>build.gradle中minSdkVersion的值是19&#xff0c;但是依赖了一个三方库&#xff0c;它的Android sdk 最小版本只支持到21&#xff0c;运行报错如下&#xff1a; 我们可以手动修改.andro…

如何设计一个订单号生成服务?应该考虑那些问题?

如何设计一个订单号生成服务&#xff1f;应该考虑那些问题&#xff1f; description: 在高并发的电商系统中&#xff0c;生成全局唯一的订单编号是关键。本文探讨了几种常见的订单编号生成方法&#xff0c;包括UUID、数据库自增、雪花算法和基于Redis的分布式组件&#xff0c;并…

Java学习总结-Stream流

啥是Stream流&#xff1f; 用于操作集合或数组的数据。他就像把数据化为成一条河流&#xff0c;我们可以对这条流操作&#xff0c;例如过滤。 获取Stream流 Stream流的常用方法&#xff1a; Stream流的终结方法&#xff1a; 收集Stream流

《TypeScript 面试八股:高频考点与核心知识点详解》

“你好啊&#xff01;能把那天没唱的歌再唱给我听吗&#xff1f; ” 前言 因为主包还是主要学习js&#xff0c;ts浅浅的学习了一下&#xff0c;在简历中我也只会写了解&#xff0c;所以我写一些比较基础的八股&#xff0c;如果是想要更深入的八股的话还是建议找别人的。 Ts基…

热门面试题第14天|Leetcode 513找树左下角的值 112 113 路径总和 105 106 从中序与后序遍历序列构造二叉树 (及其扩展形式)以一敌二

找树左下角的值 本题递归偏难&#xff0c;反而迭代简单属于模板题&#xff0c; 两种方法掌握一下 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html 我们来分析一下题目&#…

Qt窗口控件之浮动窗口QDockWidget

浮动窗口QDockWidget QDockWidget 用于表示 Qt 中的浮动窗口&#xff0c;浮动窗口与工具栏类似&#xff0c;可以停靠在主窗口的上下左右位置&#xff0c;也可以单独拖出来作浮动窗口。 1. QDockWidget方法 方法说明setWidget(QWiget*)用于使浮动窗口能够被添加控件。setAllo…