MySQL 实战宝典(六):MySQL慢查询排查

lattice 黑盒子的生成和使用(Creating Your Own Black Box Modules) 很多客户,特别是外包项目,需要做黑盒子,防止他人看到源码,那么这就需要对相关的源码打包加封了。diamond help 说的也是模糊模糊的,这次给出实际验证过的流程。 1.先将要加封的模块间一个工程,建好工程,写好代码之后,模块名字叫做crosslink(这个使用黑盒子的时候要用),代码如下: module crosslink( output wire[3:0] led, input wire clk, input wire reset ); reg [29:0] cnt; reg [3:0] led1; 阅读详情

一、基础排查:SQL 执行报错

当 SQL 语句无法执行时,首先要解决的是语法或逻辑错误。

常用工具: Navicat, DBeaver, MySQL Workbench, CLI

1. 错误码分析

当执行出错时,MySQL 会返回 Error Code 和 Message。

示例错误:
1064 - You have an error in your SQL syntax; ... near '* from admin' at line 1

  • 定位方法:重点关注 near 关键字后面的内容,通常错误就发生在它的前一个单词或当前单词。
  • 常见原因:
    • 关键字拼写错误(如 form 写成 from)。
    • 标点符号错误(中文逗号、缺失分号)。
    • 使用了 MySQL 保留字作为字段名且未加反引号(`)。

2. 善用搜索引擎

遇到生僻的错误码(如 ERROR 1205: Lock wait timeout exceeded),直接将 “MySQL + 错误码 + 报错信息” 放入搜索引擎。


二、进阶排查:慢查询日志 (Slow Query Log)

当系统变慢,但没有报错时,慢查询日志是捕获问题的“黑匣子”。

1. 核心参数解析

参数名说明推荐配置
slow_query_log开关,ON 开启,OFF 关闭。ON
slow_query_log_file日志文件的存储路径。/var/log/mysql/slow.log
long_query_time阈值。超过该时间的 SQL 会被记录(单位:秒)。1 或 0.5
log_queries_not_using_indexes是否记录未使用索引的 SQL。ON (前期排查时建议开启)

2. 配置实战

方式 A:命令行配置(临时生效,重启失效)

适合临时排查问题,无需重启数据库。

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/lib/mysql/slow-query.log';
SET GLOBAL log_queries_not_using_indexes = 'ON';
SET GLOBAL long_query_time = 1; -- 记录超过1秒的SQL

验证配置:

SHOW VARIABLES LIKE '%slow_query%';

方式 B:配置文件配置(永久生效)

修改 my.cnf (Linux) 或 my.ini (Windows),添加以下内容并重启服务:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

3. 日志分析技巧

直接查看日志文件

# Time: 2023-03-12T09:32:24.818300Z
# User@Host: root[root] @ localhost [::1]  Id: 11
# Query_time: 2.003975  Lock_time: 0.000116 Rows_sent: 393  Rows_examined: 100000
SET timestamp=1678613544;
SELECT * FROM orders WHERE amount < 100;
  • Query_time: 实际执行耗时(重点)。
  • Lock_time: 等待锁的时间。如果该值很高,说明存在锁竞争或死锁。
  • Rows_examined: 扫描行数。如果 Rows_sent 很小但 Rows_examined 很大(例如送回 10 行却扫描了 10 万行),说明索引效率极低。

使用 mysqldumpslow 工具

直接看日志眼花缭乱,MySQL 自带了分析工具。

# 得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/slow.log

# 得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/slow.log

# 得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/slow.log

三、深度分析:EXPLAIN 执行计划

找到慢 SQL 后,使用 EXPLAIN 像做“CT扫描”一样分析它的执行逻辑。

1. 性能分析概览图 (Mermaid)

在分析 type 字段时,性能从最优到最差的排序如下:

性能极好

性能极差

system/const

eq_ref

ref

range

index

ALL

优化目标:至少达到 range 级别,最好是 ref 或 const。

2. 核心字段详解

(1) type - 访问类型 (最重要)

类型含义场景示例
system/const只有一行匹配,极快主键或唯一索引查找 WHERE id = 1
eq_ref唯一索引扫描多表连接时,使用主键或唯一索引关联
ref非唯一索引扫描WHERE user_name = 'Tom' (普通索引)
range索引范围扫描WHERE id > 10 或 BETWEEN
index全索引扫描SELECT id FROM table (扫描整个索引树,不回表)
ALL全表扫描SELECT * FROM table (无索引,数据量大时必死)

(2) key_len - 索引使用的长度

  • 作用:判断联合索引是否被完全使用。
  • 示例:联合索引 (a, b, c),如果 key_len 只显示了列 a 的长度,说明 b 和 c 没用到,索引失效中断了。

(3) Extra - 额外信息 (调优金钥匙)

值评价含义与建议
Using index🟢 完美覆盖索引。查询列全在索引中,无需回表,性能最高。
Using where🟡 一般存储引擎返回数据后,Server 层还在过滤。
Using index condition🟡 不错索引下推。MySQL 5.6+ 优化,减少回表次数。
Using temporary🔴 警告产生了临时表(常见于 GROUP BY 或 DISTINCT)。需优化索引或 SQL 逻辑。
Using filesort🔴 严重文件排序。无法利用索引顺序,需在内存/磁盘排序。需优化 ORDER BY 字段索引。

四、实战案例分析

假设表结构:

  • users: id (PK), name (index), age, city
  • orders: id (PK), user_id (index), create_time

案例 1:高效的关联查询

EXPLAIN SELECT u.name, o.amount 
FROM users u 
JOIN orders o ON u.id = o.user_id 
WHERE o.create_time > '2023-01-01';

分析结果:

  • orders 表 type 为 range (利用 create_time 索引)。
  • users 表 type 为 eq_ref (利用主键 id 关联)。
  • 结论:性能良好。

案例 2:全表扫描灾难

EXPLAIN SELECT * FROM users WHERE age > 30;

分析结果:

  • type: ALL (全表扫描)。
  • key: NULL (无索引可用)。
  • 优化:给 age 字段添加索引。

案例 3:文件排序 (Using filesort)

EXPLAIN SELECT * FROM users ORDER BY city;

分析结果:

  • Extra: Using filesort。因为 city 字段没有索引,MySQL 必须将所有数据加载排序。
  • 优化:给 city 建立索引,或者避免对无索引字段进行全表排序。

五、总结:MySQL 问题排查全流程

是

否

Lock_time 高

Rows_examined 大

是 ALL/index

是 range/ref

filesort/temporary

Using index

发现数据库变慢/报错

有报错信息?

排查语法/表名/字段

重试 SQL

查看慢查询日志

定位到具体慢 SQL

分析耗时原因

排查死锁/事务堆积

执行 EXPLAIN

检查 type 字段

添加/优化索引

检查 Extra 字段

优化 SQL 写法/联合索引

优化完成


参考资料

流体仿真软件:COMSOL Multiphysics二次开发_(3).流体仿真基础理论 流体仿真基础理论包括流体的基本性质、流体运动方程、边界条件、初始条件、湍流模型和网格生成等。在使用COMSOL Multiphysics进行流体仿真时,正确设置这些参数和条件是获得准确仿真结果的关键。通过实际应用案例,可以更好地理解如何在COMSOL中进行流体仿真,并提取和分析仿真结果。希望本文对流体仿真初学者和从业人员有所帮助。 阅读详情

相关推荐

在 Ansys Mechanical 中使用“螺栓工具”插件自动生成螺栓

在有限元分析 (FEA) 中,高效创建螺栓连接对于确保机械装配的结构完整性和性能至关重要。螺栓是连接组件不可或缺的一部分,它们在负载下的精确建模会影响整个系统。快速高效的螺栓建模使工程师能够快速优化设计,满足紧迫的期限,并通过为其他关键设计任务释放资源来提高整体生产力。此外,螺栓建模的精度可以最大限度地降低模型创建过程中出错的风险,这对于获得可靠和准确的分析结果至关重要。因此,在 FEA 中快速且无错误地创建螺栓连接对于高效、可靠和成功的工程结果至关重要。

jkh920184196的博客 3100

mysql线上问题排查思路及常用命令

一、常用命令 1.查看数据库配置的最大连接数 show VARIABLES like 'max_connections' 2.SHOW PROCESSLIST查看当前数据库运行的所有线程、命令、状态、耗时、SQL SHOW PROCESSLIST 如果是root用户执行,能看到所有用户的当前的连接状态。 如果是普通账号,只能看到当前账号占用的数据库连接。 show proccesslist只能列出前100条,如果想看全数据的话要使用 show full processlist。.

Sid小杰的博客 4956

[小技巧] 如何复制知乎电子书中的文字和图片

文章目录一、背景二、复制文字1.最简单的方法(适合短小文字)2. 进阶方法(适合大段文字)三、复制图片四、注意事项 一、背景 有时候希望从书中摘录一部分文字作为笔记,但是知乎电子书阅读时候是禁止copy的,要么手打,要么OCR,给学习带来了一些不便。 审查元素后发现,知乎电子书是把文字分成一段一段的,试图F12直接copy不太方便。 本问将以谷歌Chrome浏览器为例,给出复制小技巧。 二、复制文字 1.最简单的方法(适合短小文字) 选中你需要的文字,左键单击不放,直接拖到地址栏。 然后可以从地址栏中

江南蜡笔小新 9246

mysql问题排查有那些手段_Mysql负荷较高,排查原因的方式有哪些?

Mysql负荷较高,排查原因的方式有哪些? processlist/slowlog都没发现啥过慢的SQL语句,但负荷就是一波一波飚上去。简单说1:内存是否占用较多swap分区2:i/o压力大不大,最好把top显示的信息贴出来3:神马引擎,myisam还是innodb4:如果是i/o压力,反解binlog分析写入频繁度5:如果不是i/o压力,采样查询请求分析查询频繁度show status;查看具体...

weixin_31008853的博客 1635

Qlib数据获取避坑指南:从CSV导入到自定义数据源的完整解决方案

本文详细解析了Qlib数据获取的完整解决方案,从CSV导入到自定义数据源,涵盖了股票数据处理的关键技巧和常见陷阱。特别针对Qlib平台的数据格式要求和复权处理提供了实用指南,帮助量化投资者高效整合Wind等第三方数据源,确保数据质量与模型性能。

weixin_29047919的博客 304

Linux下搭建J-Link调试环境:OpenOCD+GDB实战指南

嵌入式开发中,调试器是连接开发主机与目标硬件的关键桥梁,其核心原理是通过标准协议(如JTAG/SWD)访问芯片内部的调试模块。GDB作为通用的调试客户端,通过远程协议与调试服务器通信,而OpenOCD则扮演了协议转换与硬件驱动的角色,实现了调试命令的翻译与执行。这种开源工具链的组合,为开发者提供了高度的定制化与自动化能力,尤其适合需要与持续集成流程深度结合的复杂项目。在实际应用中,针对特定芯片(如ARM7TDMI)进行正确的内存控制器与时钟初始化是成功调试的前提,这常常涉及对板级支持包的深入理解。本文以S3

weixin_29889665的博客 333

MySQL 内存问题排查思路

简介:MySQL 内存持续增长的问题虽然不会经常发生,但是如果偶尔发生了,也会让我们不知所措。一 、如果碰到MySQL 内存持续升高问题的主要情况有4种:MySQL 没有合理设置 innodb_buffer_pool_size服务器上还有一些其他进程可以分配内内存。MySQL 内存泄漏。内存缓慢增长属于正常现象,但存在因为一些慢sql频繁执行并因MySQL的内存分配使用了系统glibc,而glibc本身的内存分配算法存在缺陷,导致内存释放不完全。二、MySQL 内存持续排查思路: 1 基于服务器的检查:

u012565458的博客 3143

在Simulink中实现一个基于SiC MOSFET的高效率电机驱动系统

本文介绍了在Simulink中构建基于SiC MOSFET的高效率电机驱动系统的详细流程。系统由直流电源模块、SiC MOSFET逆变器模块、PMSM电机模型、控制策略模块(包括矢量控制和PWM生成)以及反馈测量模块组成。文章逐步指导了从模型创建到参数设置的完整过程,包括各模块的具体实现方法。通过仿真可以评估系统在不同负载条件下的响应速度、效率、功率密度等性能指标。该建模方法为电机驱动系统的设计和优化提供了有效工具,同时建议根据实际硬件规格和工程需求进行参数调整和定制化开发。

xiaoheshang_123的博客 248

mysql问题排查有那些手段_MySQL的内存和相关问题排查

我们都知道数据库是IO密集型一类应用,为了提高其性能大量使用内存代替文件(交换分区)的IO操作是保证数据库稳定、高效的基本原则。那么数据库是如何使用内存的,我们如何查看数据库内存的占用,如何通过通过数据库内存配置设置提高其性能?本文虫虫就以Mysql数据库(InnoDB引擎)为例和大家一起了解下Linux数据库和内存相关的主题。读取内存数据非常快,为了提高性能我们要尽最大可能把数据集都放到内存中以...

weixin_36332394的博客 1787

Android编译系统——Android.bp语法介绍(十五)

Android.bp 是 Android 构建系统(Android Build System)中的配置文件,用于描述如何编译和打包项目中的模块。它是用 Blueprint 编写的,其语法类似于 JSON,但专为 Android 编译系统设计,提供了更高效、灵活的模块化管理。

小旭的专栏 939

华为OD机考双机位C卷:精准核酸检测 (C/C++/Py/Java/Js/Go)

华为OD机试双机位C卷 精准核酸检测,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 精准核酸检测。

qq_45776114的博客 1728

阿里巴巴倾情发布:Java进阶必备宝典,从理论到实战的全方位指南

许多新手程序员初入江湖,倘若已掌握一门基础编程语言,工作与学习之路必将如履平地。更重要的是,这基础将成为他们未来学习新知识的动力源泉,使他们在探索其他编程语言时满怀信心,游刃有余。而那些开头就因技术更新迅速、基础不扎实而无法坚持的朋友,往往只能黯然转行。最后我只想说的是,编程基础是决定程序员能走多远的重要因素。需要完整版PDF学习资源请扫描下方名片100%获取免费下载方式!👇👇点击下方名片👇👇。

资料免费分享,点击名片 991

[特殊字符] RK3588 平台上基于 Panfrost 的 Mesa 驱动编译全过程

摘要: 本文详细记录了在RK3588平台(Ubuntu 20.04 aarch64)上编译基于Panfrost的Mesa驱动的全过程。内容包括:1)系统依赖安装;2)libdrm编译;3)Mesa配置参数优化;4)LLVM 15与SPIRV工具链的安装方法;5)SPIRV-Tools版本问题的解决方案;6)最终编译命令及常见错误处理。关键点在于正确设置工具链路径(PKG_CONFIG_PATH)和版本匹配(LLVM 15对应SPIRV-LLVM-Translator v15.0.0),推荐将组件安装在/op

梁俊星的博客 940

阿里巴巴荣誉出品:Java进阶必备宝典,引领你从理论走向实战的巅峰之路

许多新手程序员初入江湖,倘若已掌握一门基础编程语言,工作与学习之路必将如履平地。更重要的是,这基础将成为他们未来学习新知识的动力源泉,使他们在探索其他编程语言时满怀信心,游刃有余。而那些开头就因技术更新迅速、基础不扎实而无法坚持的朋友,往往只能黯然转行。最后我只想说的是,编程基础是决定程序员能走多远的重要因素。需要完整版PDF学习资源请扫描下方名片100%获取免费下载方式!👇👇点击下方名片👇👇。

Reische的博客 948

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java进阶必备宝典”助你轻松掌握核心知识,从理论到实战一网打尽

作为一名Java方向的程序员,筑牢基础是非常关键的。如今,大厂面试对程序员基础知识的掌握要求愈发严格。尽管技术更新迅速,但只有基础扎实,我们才能更深入地理解每一个技术要点。对于Java程序员如何筑基,许多新手可能会感到迷茫。不过,好消息来了!阿里巴巴首推的“Java进阶必备宝典”为您提供了全面的学习资源。这本书的内容完整,从基础到高级再到实战,让您清晰认识Java系统的结构,一键搞定!这本“Java进阶必备宝典。

m0_74825488的博客 841

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

阿里巴巴大赞:Java进阶宝典,从理论到实战,轻松掌握成功秘籍

许多编程新手初入职场时,若已掌握一定的编程基础,工作与学习之路将更为顺畅。这不仅能使你在编程领域更自信,更是未来学习新知识的动力源泉。无论你打算深入哪种编程语言,这份信心都将伴你左右。而那些曾说放弃的朋友,多半是因为技术更迭迅速,基础不扎实,最终无法坚持下去。归根结底,编程基础决定了程序员能走多远。关于Java进阶的所有内容,我都有完整的pdf版资料可供分享。如果你渴望这份Java进阶的秘籍,只需多多支持,即可免费获取。如果你需要完整版PDF学习资源请扫描下方名片100%获取免费下载方式!👇👇。

资料免费分享,点击名片 804

阿里巴巴技术官必备指南:Java进阶宝典,理论实战结合,引领技术前沿

许多编程新手初入职场时,若已掌握一定的编程基础,工作与学习之路将更为顺畅。这不仅能使你在编程领域更自信,更是未来学习新知识的动力源泉。无论你打算深入哪种编程语言,这份信心都将伴你左右。而那些曾说放弃的朋友,多半是因为技术更迭迅速,基础不扎实,最终无法坚持下去。归根结底,编程基础决定了程序员能走多远。关于Java进阶的所有内容,我都有完整的pdf版资料可供分享。如果你渴望这份Java进阶的秘籍,只需多多支持,即可免费获取。如果你需要完整版PDF学习资源请扫描下方名片100%获取免费下载方式!👇👇。

资料免费分享,点击名片 902

“Java进阶必备宝典”,让你从理论到实战无缝对接,轻松掌握核心技能

很多程序员新手在初入职场时,如果已经具备了一定的编程基础,那么在工作和学习中会更加顺利。更重要的是,拥有扎实的基础编程语言知识可以为未来的学习提供源源不断的动力,使自己在面对新的编程语言或技术时更加有信心。开头提到的身边朋友转行,往往是因为他们无法跟上技术更新的速度,或者由于基础不牢固而最终放弃学习。因此,编程基础是决定程序员能够走多远的重要因素。对于Java程序员来说,掌握Java进阶内容同样至关重要。为了帮助大家更好地学习和提升,我们特地整理了一份完整的Java进阶必备宝典资料。获取方式:需要这份。

资料免费分享,点击名片 952

阿里巴巴力荐:Java进阶宝典,理论实战相结合,一键获取成功秘籍

许多编程新手初入职场时,若已掌握一定的编程基础,工作与学习之路将更为顺畅。这不仅能使你在编程领域更自信,更是未来学习新知识的动力源泉。无论你打算深入哪种编程语言,这份信心都将伴你左右。而那些曾说放弃的朋友,多半是因为技术更迭迅速,基础不扎实,最终无法坚持下去。归根结底,编程基础决定了程序员能走多远。关于Java进阶的所有内容,我都有完整的pdf版资料可供分享。如果你渴望这份Java进阶的秘籍,只需多多支持,即可免费获取。如果你需要完整版PDF学习资源请扫描下方名片100%获取免费下载方式!👇👇。

Reische的博客 968

理论到实战 一键搞定 阿里巴巴首推“Java进阶必备宝典”

作为一名Java方向的程序员,打好夯实的基础是非常重要的,现在大厂面试对于程序员基础知识的掌握考察也越来越严格,虽然说现在技术更新比较快,但基础扎实才能够更深入的去理解每一个知识技术点。关于Java程序员如何筑基,大部分小白是比较迷茫的!不过今天让人兴奋激动的是,阿里巴巴首推的“Java进阶必备宝典”,内容完整,能够让读者清晰认识Java系统的结构,从基础到高级再到实战,带你一键搞定!核心一:大厂必问并发编程技术核心二:JVM的深度剖析核心三:网络编程与高效IO(Netty)

m0_74824517的博客 709

阿里巴巴精心打造:Java进阶必备宝典,一册在手,进阶无忧

许多新手程序员初入江湖,倘若已掌握一门基础编程语言,工作与学习之路必将如履平地。更重要的是,这基础将成为他们未来学习新知识的动力源泉,使他们在探索其他编程语言时满怀信心,游刃有余。而那些开头就因技术更新迅速、基础不扎实而无法坚持的朋友,往往只能黯然转行。最后我只想说的是,编程基础是决定程序员能走多远的重要因素。需要完整版PDF学习资源请扫描下方名片100%获取免费下载方式!👇👇点击下方名片👇👇。

资料免费分享,点击名片 821

从理论到实战,包含六大核心技术,这份阿里巴巴首推的《Java进阶必备宝典》太牛了!

前言 作为一名Java方向的程序员,打好夯实的基础是非常重要的,现在大厂面试对于程序员基础知识的掌握考察也越来越严格,虽然说现在技术更新比较快,但基础扎实才能够更深入的去理解每一个知识技术点。 关于Java程序员如何筑基,大部分小白是比较迷茫的!不过今天让人兴奋激动的是,阿里巴巴首推的“Java进阶必备宝典”,内容完整,能够让读者清晰认识Java系统的结构,从基础到高级再到实战,带你一键搞定!这本“Java进阶必备宝典”包括六大核心知识点,主要涉及到的内容有: 核心一:大厂必问并发编程技术 核心二:

JavaBUGa的博客 1559
上一篇: MySQL 实战宝典(四):深入理解 MySQL 事务,从日志原理到 ACID 实现
下一篇: Spring Boot 实战指南(五):自定义注解、拦截器
TracyCoder123
博客等级 码龄8年 1万+粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracyCoder123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值