当前位置: 首页 > news >正文

1.MySQL之如何定位慢查询

1.慢查询出现的情况

  • 聚合查询
  • 多表查询
  • 表数据量过大查询
  • 深度分页查询

主要就这四种情况

慢查询的表现形式:

页面加载过慢、接口压测响应时间过长(超过1s)


2.如何定位慢查询

方法一: 使用开源工具

  • 调试工具: Arthas
  • 运维工具: Prometheus、Skywalking

Arthas

  • 类型命令行调试工具(非可视化)。

  • 用途:针对 Java 应用的运行时诊断(如方法调用追踪、性能分析、热修复等)。

  • 特点

    • 通过命令行交互,直接连接到 JVM 进行调试。

    • 支持实时查看方法执行耗时(tracewatch 命令)、监控线程堆栈等。

    • 无图形界面,但能生成文本或日志形式的分析结果。

  • 适用场景:快速定位代码级性能问题(如慢查询的具体方法或 SQL)。


Prometheus

  • 类型指标监控工具(带可视化能力,但需配合 Grafana)。

  • 用途:采集、存储和告警时间序列数据(如 CPU、内存、HTTP 请求延迟等)。

  • 特点

    • 通过 Pull 模式收集指标,支持灵活的查询语言(PromQL)。

    • 原生提供简单的 Web UI,但通常需集成 Grafana 实现高级可视化仪表盘。

    • 可监控慢查询的宏观指标(如数据库请求延迟、错误率)。

  • 适用场景:系统级性能监控和趋势分析,需结合其他工具定位具体慢查询。


SkyWalking

  • 类型APM(应用性能管理)工具(带完整可视化界面)。

  • 用途:分布式链路追踪、服务拓扑分析、慢请求诊断。

  • 特点

    • 自动追踪请求链路,可视化展示调用关系和耗时(如慢 SQL、慢 API)。

    • 提供丰富的 图形化界面,直接定位到慢查询的代码或数据库语句。

    • 支持与 Prometheus 集成,补充指标监控能力。

  • 适用场景:端到端的性能分析,尤其是微服务架构中的慢查询根因定位。

方法二: mysql自带慢日志

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。

如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:
 

#开启MySQL慢日志查询开关
slow_query_log=1
#设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为查询,记录查询日志
long_query_time=2

配置完毕之后,通过重新启动MVSQL服务器进行测试,查看慢日志文件中记录的信息

/var/lib/mysql/localhost-slow.log

日志格式如下:

# Time: 2023-10-20T14:23:45.123456Z
# User@Host: root[root] @ localhost []  Id:   123
# Query_time: 5.002345  Lock_time: 0.000123 Rows_sent: 10  Rows_examined: 100000
SET timestamp=1603196625;
SELECT * FROM large_table WHERE status = 'pending' ORDER BY create_time;

关键字段说明

时间标记 

# Time: 记录查询发生的时间戳,格式为ISO 8601(可配置)

用户信息

 # User@Host: 显示执行查询的用户名、主机信息及连接ID

格式:user[username] @ host [ip] Id: connection_id

性能指标 

# Query_time: 查询执行总时间(秒)

# Lock_time: 表锁等待时间(秒)

# Rows_sent: 返回给客户端的行数 

# Rows_examined: 服务器层检查的行数

SQL语句 

SET timestamp= 记录查询发生时的Unix时间戳 随后显示完整的SQL语句(可能跨越多行)

http://www.xdnf.cn/news/1077175.html

相关文章:

  • stm32 单片机主要优点有哪些?
  • 【ArcGIS】矢量数据的叠加分析
  • 在 Docker 容器中使用内网穿透
  • Hadoop、Spark、Flink 三大大数据处理框架的能力与应用场景
  • Modbus协议
  • Python OrderedDict 用法详解
  • Day 3:Python模块化、异常处理与包管理实战案例
  • A模块 系统与网络安全 第三门课 网络通信原理-3
  • 【C++】inline的作用
  • 若依中复制到剪贴板指令的使用v-clipboard
  • js严格模式和非严格模式
  • 【Python基础】13 知识拓展:CPU、GPU与NPU的区别和联系
  • 【科研绘图系列】基于R语言的复杂热图绘制教程:环境因素与染色体效应的可视化
  • SeaTunnel 社区月报(5-6 月):全新功能上线、Bug 大扫除、Merge 之星是谁?
  • 基于Spring Cloud微服务架构的API网关方案对比分析
  • 3.1.1.9 安全基线检查项目九:检查是否设置限制su命令用户组
  • [C#] WPF - 自定义样式(Slider篇)
  • 位运算经典题解
  • ELK日志分析系统(filebeat+logstash+elasticsearch+kibana)
  • Python 库 包 nltk (Natural Language Toolkit)
  • 视频断点续播全栈实现:基于HTML5前端与Spring Boot后端
  • 141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示
  • 【Maven 】 <resources> 配置中排除 fonts/** 目录无效,可能是由于以下原因及解决方案:
  • 计算机网络(二)应用层HTTP协议
  • (LangChain)RAG系统链路向量存储之Milvus(四)
  • 【1.4 漫画PostgreSQL高级数据库及国产数据库对比】
  • 【MyBatis保姆级教程下】万字XML进阶实战:配置指南与深度解析
  • 2025年6月28和29日复习和预习(C++)
  • JVM调优实战 Day 15:云原生环境下的JVM配置
  • SQLite与MySQL:嵌入式与客户端-服务器数据库的权衡