我们来学mysql -- 8.4版本记录慢查询

记录慢查询

  • 开启慢查询的配置
    • 查看慢查询状态
    • 动态开启慢查询日志
    • 永久开启配置
    • log_throttle_queries_not_using_indexes
  • 记录慢查询对性能的影响
  • 实际案例说明
      • 第一条记录
      • 第二条记录
      • 第三条记录
      • 第四条记录

开启慢查询的配置

查看慢查询状态

-  执行 `show variables like 'slow_query_log%';`,
- 查看 `slow_query_log` 是否为 `ON`,若为 `OFF` 则未开启
- 查看慢查询日志文件路径

在这里插入图片描述

动态开启慢查询日志

  • 执行 set global slow_query_log='ON'; 可动态开启慢查询日志,但数据库重启后会失效

永久开启配置

  • 修改my.cnfmy.ini,在 [mysqld] 部分添加

    参数说明
    slow_query_logon :开启
    slow_query_log_file记录慢sql日志路径
    long_query_time默认为 10 秒,查询耗时超过该阈值的 SQL 语句会被记录
    log_queries_not_using_indexeson : 查询sql没有使用索引,会记录到慢查询日志中
    log_throttle_queries_not_using_indexes = 5每分钟最多记录 5 次未使用索引的查询
    log_slow_slave_statements
    min_examined_row_limit扫描行数超过 100 行的查询才会被记录为慢查询

    在这里插入图片描述

      ```sqlslow_query_log = on slow_query_log_file = /u01/soft/oracle/logs/mysqld_slow.log long_query_time = 2log_queries_not_using_indexes = onlog_throttle_queries_not_using_indexes = 5log_slow_slave_statements = 1min_examined_row_limit = 100```
    
    • 保存后重启 MySQL 服务使配置生效

log_throttle_queries_not_using_indexes

  • 不是只记录 5 次,而是每分钟最多记录 5 次未使用索引的查询。
  1. 设置目的

    • 这个参数主要是为了防止慢查询日志文件被大量未使用索引的查询信息瞬间淹没。因为在实际的应用场景中,可能会有一些频繁执行但未使用索引的查询语句,如果不加以限制,这些语句的日志记录会迅速占据大量的存储空间,使得日志文件变得臃肿,不方便对真正有价值的慢查询信息进行分析。
  2. 工作原理

    • 当开启 log_queries_not_using_indexes 选项后,MySQL 会检查查询语句是否使用了索引。如果没有使用索引,并且符合其他慢查询的条件(如查询时间超过 long_query_time 设定的阈值等),MySQL 会准备记录这条查询语句到慢查询日志中。
    • 但是,为了控制记录的频率,log_throttle_queries_not_using_indexes 就发挥作用了。例如,当设置为 5 时,每分钟最多记录 5 次未使用索引的查询。如果在这一分钟内有大量未使用索引的查询,超过 5 次后,后续的同类查询在这一分钟内就不会再被记录了。这样既能保证能够获取到未使用索引查询的关键信息,又能够避免日志文件被过多相似的记录填满。

记录慢查询对性能的影响

开启慢查询日志会对系统性能产生一定影响,因为记录日志需要消耗磁盘 I/O 资源。在高并发写入的场景下,这种影响可能会稍明显。如果 MySQL 是主从结构,可考虑在从服务器上开启慢查询日志,以减少对主服务器性能的影响

实际案例说明


# User@Host: root[root] @ serverName [10.256.22.2]  Id: 249625
# Query_time: 0.016972  Lock_time: 0.000005 Rows_sent: 11  Rows_examined: 19185
use test-dev;
SET timestamp=1749630891;
SELECT * FROM *** GROUP BY **;
# Time: 2025-06-11T16:35:44.791481+08:00
# User@Host: [] @  []  Id: 249254
# Query_time: 0.041186  Lock_time: 0.000076 Rows_sent: 0  Rows_examined: 0
use tmp_dev;
SET timestamp=1749630944;
throttle:         17 'index not used' warning(s) suppressed.;
# Time: 2025-06-11T16:36:44.807640+08:00
# User@Host: [] @  []  Id: 249254
# Query_time: 0.015413  Lock_time: 0.000041 Rows_sent: 0  Rows_examined: 0
SET timestamp=1749631004;
throttle:         11 'index not used' warning(s) suppressed.;
# Time: 2025-06-11T16:37:44.821526+08:00
# User@Host: [] @  []  Id: 249565
# Query_time: 0.010364  Lock_time: 0.000032 Rows_sent: 0  Rows_examined: 0
SET timestamp=1749631064;
throttle:         13 'index not used' warning(s) suppressed.;

在 MySQL 慢查询日志中,每条记录通常以 # User@Host: 开始,接着记录了查询的执行时间、用户、主机、查询相关的性能指标,以及查询语句本身等信息。以下是对上述日志信息的详细解释:

第一条记录

  • # User@Host: root[root] @ serverName [10.256.22.2] Id: 249625

    • 表示执行查询的用户是 root,客户端主机是 serverName ,其 IP 地址是 10.256.22.2,连接的线程 ID 是 249625。
  • # Query_time: 0.016972 Lock_time: 0.000005 Rows_sent: 11 Rows_examined: 19185

    • Query_time:查询实际执行的时间是 0.016972 秒。
    • Lock_time:获取锁所花费的时间是 0.000005 秒。
    • Rows_sent:查询返回的行数是 11 行。
    • Rows_examined:查询过程中扫描的行数是 19185 行,这表明查询可能没有使用索引或者索引使用效率低,导致扫描了大量的数据行。
  • use test-dev;

    • 表示该查询是在 test-dev 数据库中执行的。
  • SET timestamp=1749630891;

    • 设置了时间戳,对应的时间可以通过 Unix 时间戳转换工具转换为具体时间。
  • SELECT ...

    • 这是具体的查询语句。
  • # Time: 2025-06-11T16:35:44.791481+08:00

    • 这是查询执行的时间戳,表明该查询是在 2025 年 6 月 11 日 16 点 35 分 44 秒左右执行的。

第二条记录

  • # User@Host: [] @ [] Id: 249254

    • 这里的用户和主机信息显示为 [],可能是因为在日志中未记录具体的用户和主机信息,或者该查询是由系统内部进程或其他未明确标识的客户端发起的,连接的线程 ID 是 249254。
  • # Query_time: 0.041186 Lock_time: 0.000076 Rows_sent: 0 Rows_examined: 0

    • Query_time:查询实际执行的时间是 0.041186 秒。
    • Lock_time:获取锁所花费的时间是 0.000076 秒。
    • Rows_sent:查询返回了 0 行数据。
    • Rows_examined:查询过程中没有扫描到任何行,这可能是因为查询条件没有匹配到任何数据,或者表中没有数据。
  • use tmp_dev;

    • 表示该查询是在 tmp_dev 数据库中执行的。
  • SET timestamp=1749630944;

    • 设置了时间戳,对应的时间可以通过 Unix 时间戳转换工具转换为具体时间。
  • throttle: 17 'index not used' warning(s) suppressed.;

    • 这提示有 17 个 “index not used” 的警告被抑制,表明该查询没有使用索引,这可能是导致查询性能不佳的一个因素。
  • # Time: 2025-06-11T16:36:44.807640+08:00

    • 这是查询执行的时间戳,表明该查询是在 2025 年 6 月 11 日 16 点 36 分 44 秒左右执行的。

第三条记录

  • # User@Host: [] @ [] Id: 249254

    • 同样未明确显示用户和主机信息,连接的线程 ID 是 249254。
  • # Query_time: 0.015413 Lock_time: 0.000041 Rows_sent: 0 Rows_examined: 0

    • Query_time:查询实际执行的时间是 0.015413 秒。
    • Lock_time:获取锁所花费的时间是 0.000041 秒。
    • Rows_sent:查询返回了 0 行数据。
    • Rows_examined:查询过程中没有扫描到任何行。
  • SET timestamp=1749631004;

    • 设置了时间戳,对应的时间可以通过 Unix 时间戳转换工具转换为具体时间。
  • throttle: 11 'index not used' warning(s) suppressed.;

    • 提示有 11 个 “index not used” 的警告被抑制,表明该查询也没有使用索引。
  • # Time: 2025-06-11T16:37:44.821526+08:00

    • 这是查询执行的时间戳,表明该查询是在 2025 年 6 月 11 日 16 点 37 分 44 秒左右执行的。

第四条记录

  • # User@Host: [] @ [] Id: 249565

    • 未明确显示用户和主机信息,连接的线程 ID 是 249565。
  • # Query_time: 0.010364 Lock_time: 0.000032 Rows_sent: 0 Rows_examined: 0

    • Query_time:查询实际执行的时间是 0.010364 秒。
    • Lock_time:获取锁所花费的时间是 0.000032 秒。
    • Rows_sent:查询返回了 0 行数据。
    • Rows_examined:查询过程中没有扫描到任何行。
  • SET timestamp=1749631064;

    • 设置了时间戳,对应的时间可以通过 Unix 时间戳转换工具转换为具体时间。
  • throttle: 13 'index not used' warning(s) suppressed.;

    • 提示有 13 个 “index not used” 的警告被抑制,表明该查询也没有使用索引。
  • # Time: 2025-06-11T16:38:44.83+08:00

    • 这是查询执行的时间戳,表明该查询是在 2025 年 6 月 11 日 16 点 38 分 44 秒左右执行的。

综上所述,在这些慢查询日志记录中,有的查询返回了数据并扫描了大量行,有的查询未返回数据且没有扫描到行,且很多查询存在未使用索引的情况,这可能是导致查询速度慢或效率低的原因之一。
在这里插入图片描述

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

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

相关文章

2025 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第七届CCPC河南省大学生程序设计竞赛(补题)

文章目录 前言F、幻形之路G、直径与最大独立集H,树论函数M, 川陀航空学院总结 前言 本次比赛,只能说太多没接触的知识了,还有太容易被题面吓住。 F、幻形之路 题目链接:幻形之路 解题思路: 对于这一题只…

如何使用k8s安装redis呢

在Kubernetes (k8s) 上安装Redis 在Kubernetes上安装Redis有几种方法,下面我将介绍两种常见的方式:使用StatefulSet直接部署和使用Helm chart部署。 一、安装redis 1.1 拉去ARM镜像(7.4.2) docker pull registry.cn-hangzhou.ali…

SpringBoot的5种日志输出规范策略

在企业级应用开发中,合理规范的日志记录是系统稳定运行、问题排查和性能优化的关键保障。 SpringBoot作为流行的Java开发框架,提供了强大而灵活的日志支持,但如何建立统一、高效的日志输出规范却是许多团队面临的挑战。 本文将介绍SpringBo…

Python Cookbook-7.11 在 PostgreSQL 中储存 BLOB

任务 需要将 BLOB 存入一个 PostgreSQL 数据库。 解决方案 PostgreSQL7.2 以及更新的版本支持大对象,而psycopg 模块提供了二进制转义函数: import psycopg,cPickle #连接到数据库,用你的本机来测试数据库,并获得游标 connection = psycopg.connect("dbname = test…

Android端口转发

如上图所示,有一个Android设备,Android设备里面有主板,主板上有网络接口和Wi-Fi,网络接口通过网线连接了一个网络摄像头,这就跟电脑一样,电脑即可以通过网线接入一个网络,也可以同时用Wi-Fi接入…

Unity基础-协程

Unity基础-协程 四、协程 概述 协程(Coroutine),本质上并不是多线程,而是在当前线程中将代码分时执行,不卡主线程。可以理解为,协程会把可能使主线程卡顿的程序分时分布进行。 协程通常用来:…

UniApp组件封装,2025年最新HarmonyOS鸿蒙模块化开发项目式教程

一、环境配置与前置条件 ‌开发工具要求‌ HBuilderX 4.64(鸿蒙插件已预装)DevEco Studio 5.0.3.400(真机调试必备)鸿蒙离线SDK(通过HBuilderX导入,每个项目独立配置) ‌项目初始化 # 创建Vu…

C++ 精简知识点

目录 一、核心语法 1.指针VS引用 2. 类与对象(必写代码) 3. 继承与多态(必写代码) 4. 模板(必写代码) 5.智能指针 6. 异常处理(必写结构) 二、简答题速记 三、考试应急策略 一…

7.Vue的compute计算属性

3.8. 【computed】 作用&#xff1a;根据已有数据计算出新数据&#xff08;和Vue2中的computed作用一致&#xff09;。 <template><div class"person">姓&#xff1a;<input type"text" v-model"firstName"> <br>名&am…

在VSCode中借助AI丰富C++Qt应用程序

随着国内外各类自动化编程助手的普及&#xff0c;作为传统桌面C开发者&#xff0c;也要及时地用上这样强大的工具。考虑到网速问题&#xff0c;国外的服务时断时续&#xff0c;还是倾向于使用一些国产的大语言模型助手。我们今天就来看看在VSCode下使用大语言模型辅助Qt开发。 …

Java八股文——JVM「内存模型篇」

JVM的内存模型介绍一下 面试官您好&#xff0c;您问的“JVM内存模型”&#xff0c;这是一个非常核心的问题。在Java技术体系中&#xff0c;这个术语通常可能指代两个不同的概念&#xff1a;一个是JVM的运行时数据区&#xff0c;另一个是Java内存模型&#xff08;JMM&#xff0…

RabbitMQ 高可用与可靠性保障实现

RabbitMQ 高可用与可靠性保障实现详解 一、高可用架构设计1.1 集群部署模式1.2 镜像队列&#xff08;Mirrored Queue&#xff09; 二、可靠性保障机制2.1 消息持久化2.2 确认机制&#xff08;Confirm & Ack&#xff09;2.3 死信队列&#xff08;DLX&#xff09; 三、容灾与…

12.7Swing控件6 JList

在 Java Swing 中&#xff0c;列表框&#xff08;JList&#xff09;是用于显示一组选项的组件&#xff0c;用户可以从中选择一个或多个项目。以下是关于 Swing 列表框的详细介绍&#xff1a; 1. 基本概念与用途 作用&#xff1a;以垂直列表形式展示选项&#xff0c;支持单选或…

C++: condition_variable: wait_for -> unlock_wait_for_lock?

作为C++的初学者,面临的一个很大的问题,就是很多的概念并不是可以通过名称直观的预知它要完成的细节,比如这里的condition_variable的wait_for。C++的设计意图好像是,我告诉你这样用,你只要这样做就行,又简单还实用!而且需要记住的规则量又大的惊人。最后看起来,更像是…

HTML版英语学习系统

HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具&#xff0c;使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章&#xff0c;系统朗读帮助练习听力和发音&#xff0c;适合跟读练习&#xff0c;模仿学习&#xff1b;实时词典查询 - 双…

【JUC面试篇】Java并发编程高频八股——线程与多线程

目录 1. 什么是进程和线程&#xff1f;有什么区别和联系&#xff1f; 2. Java的线程和操作系统的线程有什么区别&#xff1f; 3. 线程的创建方式有哪些? 4. 如何启动和停止线程&#xff1f; 5. Java线程的状态模型&#xff08;有哪些状态&#xff09;&#xff1f; 6. 调用…

LSTM-SVM多变量时序预测(Matlab完整源码和数据)

LSTM-SVM多变量时序预测&#xff08;Matlab完整源码和数据&#xff09; 目录 LSTM-SVM多变量时序预测&#xff08;Matlab完整源码和数据&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 代码主要功能 该代码实现了一个LSTM-SVM多变量时序预测模型&#xff0c…

ES6——数组扩展之Set数组

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;JavaScript的Set对象提供了一种存储任何值唯一性的方式&#xff0c;类似于数组但又不需要索引访问。这对于需要确保元素唯一性的场景非常有用。Set对象本身并不直接提供数组那样的方法来操作数据&#xff08;例如ma…

日志收集工具-logstash

提示&#xff1a;Windows 环境下 安装部署 logstash 采集日志文件 文章目录 一、下载二、解压部署三、常用插件四、常用配置 Logstash 服务器数据处理管道&#xff0c;能够从多个来源采集数据&#xff0c;转换数据&#xff0c;然后将数据发送到您最喜欢的存储库中。Logstash 没…

6个月Python学习计划 Day 21 - Python 学习前三周回顾总结

✅ 第一周&#xff1a;基础入门与流程控制&#xff08;Day 1 - 7&#xff09; “打地基”的一周&#xff0c;我们走完了从变量、输入输出、判断、循环到第一个小型系统的完整链路。 &#x1f4d8; 学习重点&#xff1a; Python 基础语法&#xff1a;变量类型、字符串格式化、注…