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

MySQL如何定位慢查询

MySQL中定位慢查询通常涉及到以下几个步骤:

1. 慢查询日志

开启慢查询日志是识别慢查询的第一步。通过设置slow_query_log变量为1,MySQL会记录所有执行时间超过long_query_time秒的查询。

-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';-- 设置慢查询时间阈值(单位:秒)
SET GLOBAL long_query_time = 2;-- 设置慢查询日志文件的路径
SET GLOBAL slow_query_log_file = '/path/to/your/log/file';

一旦慢查询日志开启,就可以通过查看日志文件来定位执行缓慢的查询。

2. 使用EXPLAIN

对于已经识别的慢查询,使用EXPLAIN来获取查询的执行计划,这样可以理解MySQL是如何处理该查询的。

EXPLAIN SELECT * FROM your_table WHERE your_column = 'some_value';

3. 分析索引使用情况

检查你的查询是否在使用有效的索引。你可以通过EXPLAIN结果中的key列来查看。

-- 添加索引来优化查询
ALTER TABLE your_table ADD INDEX (your_column);

4. 优化查询和表结构

  • 重构查询,例如,避免使用子查询,而使用连接(JOINs)。
  • 优化表结构,例如,使用合适的数据类型,分区大表。

5. 分析服务器状态

利用MySQL提供的各种状态变量来了解服务器的状况。

SHOW STATUS LIKE 'Threads_running';

6. 使用性能模式(Performance Schema)

MySQL的性能模式提供了查询执行时的详细内部信息。

-- 开启性能模式
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES';
-- 查询性能模式中记录的信息
SELECT * FROM performance_schema.events_statements_history_long WHERE SQL_TEXT IS NOT NULL;

源码级别分析

如果你想深入源码层面理解MySQL的查询执行,可以查看下列关键源文件:

  • 慢查询日志的实现

    • sql/log.cc:慢查询日志的实现。
    • sql/mysqld.cc:服务器启动和慢查询日志初始化。
  • Query Execution

    • sql/sql_parse.cc:处理SQL语句的解析。
    • sql/sql_optimizer.cc:查询优化相关实现。
    • sql/sql_executor.cc:查询执行逻辑。
  • 性能模式的实现

    • storage/perfschema/:性能模式的数据结构和实现。

示例:源码中处理慢查询日志的片段

sql/log.cc中,MySQL如何写入慢查询日志的大致逻辑如下:

void MYSQL_LOG::write_slow(THD *thd, time_t start_time,time_t query_start_arg, const char *user_host,ulong user_host_len, const char *query_arg,ulong query_length, ha_rows examined_row_count)
{...if (thd->sent_row_count > 0 || examined_row_count > 0){slow_log_print(thd, start_time, query_start_arg, user_host, user_host_len,query_arg, query_length,current_thd->status_var.last_insert_id_sent,current_thd->insert_id(),current_thd->get_trans_pos(), examined_row_count);}...
}

这个函数检查了查询发送的行数和检查的行数,如果存在,则执行slow_log_print来打印日志。

结论

优化慢查询的过程是系统性的,它涉及到监控、诊断、分析和优化多个环节。虽然源码级别的分析可能对绝大多数用户来说不是必需的,但对于数据库管理员和高级用户来说,理解这些内部机制有助于更好地把握MySQL的性能调优。一般情况下,通过配置和查询优化可以解决大部分的性能问题。

相关文章:

MySQL如何定位慢查询

MySQL中定位慢查询通常涉及到以下几个步骤: 1. 慢查询日志 开启慢查询日志是识别慢查询的第一步。通过设置slow_query_log变量为1,MySQL会记录所有执行时间超过long_query_time秒的查询。 -- 开启慢查询日志 SET GLOBAL slow_query_log ON;-- 设置慢…...

npm 上传一个自己的应用(4) 更新自己上传到NPM中的工具版本 并进行内容修改

前面 npm 上传一个自己的应用(2) 创建一个JavaScript函数 并发布到NPM 我们讲了将自己写的一个函数发送到npm上 那么 如果我们想到更好的方案 希望对这个方法进行修改呢? 比如 我们这里加一个方法 首先 我们还是要登录npm npm login然后 根据要求填写 Username 用…...

Linux开发:PAM1 介绍

PAM(Pluggable Authentication Modules )是Linux提供的一种通用的认证方式,他可以根据需要动态的加载认证模块,从而减少认证开发的工作量以及提供认证的灵活度。 1.PAM的框架 PAM的框架由一下几个部分构成 1)应用程序,即需要使用认证服务的程序,这些应用程序是使用抽象…...

Leetcode 3036. Number of Subarrays That Match a Pattern II

Leetcode 3036. Number of Subarrays That Match a Pattern II 1. 解题思路2. 代码实现 3036. Number of Subarrays That Match a Pattern II 1. 解题思路 这一题其实有点水,因为本质上还是一道套路题目,和前两周的两道题目一样,都是考察的…...

华为环网双机接入IPTV网络部署案例

环网双机接入IPTV网络部署案例 组网图形 图2 环网双机场景IPTV基本组网图 方案简介配置注意事项组网需求数据规划配置思路操作步骤配置文件 方案简介 随着IPTV业务的迅速发展,IPTV平台承载的用户也越来越多,用户对IPTV直播业务的可靠性要求越来越高。…...

“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【上】

“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【上】 前言预备知识1温湿度检测系统需求2.代码整合2.1找到编程实现LCD1602显示一行工程,打开代码文件,将所需的LCD1602驱动代码拷贝到温湿…...

牛客网SQL进阶137:第二快/慢用时之差大于试卷时长一半的试卷

官网链接: 第二快慢用时之差大于试卷时长一半的试卷_牛客题霸_牛客网现有试卷信息表examination_info(exam_id试卷ID, tag试卷类别,。题目来自【牛客题霸】https://www.nowcoder.com/practice/b1e2864271c14b63b0df9fc08b559166?tpId240 0 问题描述 试…...

CVE-2022-0760 漏洞复现

CVE-2022-0760 NSS [HNCTF 2022 WEEK2]ohmywordpress 【CVE-2022-0760】 题目描述:flag在数据库里面。 开题: 顺着按钮一直点下去会发现出现一个按钮叫安装WordPress 安装完之后的界面,有一个搜索框。 F12看看network。 又出现了这个Wor…...

WordPress突然后台无法管理问题

登录WordPress后台管理评论,发现点击编辑、回复均无反应。 尝试清除缓存、关闭CF连接均无效。 查看插件时发现关闭wp-china-yes插件可以解决问题。 后来又测试了下发现加速管理后台这项,在启用时会发生点击无效问题,禁用就好了,不…...

STM32F1 - 标准外设库_规范

STM32F10x_StdPeriph_Lib_V3.6.0 1> 头文件包含关系2> .c文件内部结构3> 宏定义位置4> 位掩码bit mask5> .c文件中定义私有变量6> 枚举类型定义 1> 头文件包含关系 1个头文件stm32f10x.h 就把整个MCU以及标准外设库,就管理了; 2>…...

推荐系统|召回04_离散特征处理

离散特征处理 离散特征是什么 怎么处理离散特征 One-hot编码 Embedding嵌入 从one-hot到Embedding,已经节省了很多的存储空间,但当数据量大的时候,还是占空间,所以工业界仍会对Embedding进行优化 而一个物品所对应的Embedding参数…...

一个查看armv8系统寄存器-值-含义的方式

找到解压后的SysReg_xml_v86A-2019-12目录 wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/SysReg_xml_v86A-2019-12.tar.gz wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-archi…...

LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略

LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略 目录 miqu-1-70b的简介 miqu-1-70b的安装和使用方法 1、安装 2、使用方法 miqu-1-70b的案例应用 miqu-1-70b的简介 2024年1月28日,发布了miqu 70b,潜在系列中的…...

npm 下载报错

报错信息 : 证书过期 (CERT_HAS_EXPIRED) D:\Apps\nodejs-v18.16.1\npx.cmd --yes create-next-app"latest" . --ts npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/create-next-app failed…...

GPT-4登场:多模态能力革新,提升ChatGPT与必应体验,开放API助力游戏革新

GPT-4登场:多模态能力革新,提升ChatGPT与必应体验,开放API助力游戏革新 引言 在人工智能领域,GPT-4的发布标志着一个新时代的到来。这一多模态大模型不仅在技术性能上实现了飞跃,更在功能层面带来全新的突破。GPT-4的…...

【芯片设计- RTL 数字逻辑设计入门 11.1 -- 状态机实现 移位运算与乘法 1】

文章目录 移位运算与乘法状态机简介SystemVerilog中的测试平台VCS 波形仿真 阻塞赋值和非阻塞赋值有限状态机(FSM)与无限状态机的区别 本篇文章接着上篇文章【芯片设计- RTL 数字逻辑设计入门 11 – 移位运算与乘法】 继续介绍,这里使用状态机…...

MongoDB系列:管道操作:聚合阶段操作符(二)

MongoDB系列:管道操作:聚合阶段操作符(二) 聚合阶段操作符介绍 本节只编写了个人认为可能用到的操作符,详细更多的操作符以及使用注意事项请前往MongoDB官网。 $match 过滤匹配数据。 // 插入数据 db.orders.inse…...

C++ //练习 5.12 修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff、fl和fi。

C Primer(第5版) 练习 5.12 练习 5.12 修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff、fl和fi。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /****…...

C语言-----自定义类型-----结构体枚举联合

结构体和数组一样,都是一群数据的集合,不同的是数组当中的数据是相同的类型,但是结构体中的数据类型可以不相同,结构体里的成员叫做成员变量 结构体类型是C语言里面的一种自定义类型,我们前面已经了解到过int,char,fl…...

elasticsearch下载及可视化工具下载使用

elasticsearch下载及配置、启动 一、下载 Download Elasticsearch | Elastic 二、启动 双击bat即可。 出现如下说明启动成功: 访问测试: 三、注意 (1)因为es启动默认端口是:9200,所以需要检查此端口是否被占用。…...

Windows Cleaner终极指南:3分钟解决C盘爆满,让电脑重获新生![特殊字符]

Windows Cleaner终极指南:3分钟解决C盘爆满,让电脑重获新生!🚀 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是…...

BG3 Mod Manager终极指南:如何轻松管理《博德之门3》模组

BG3 Mod Manager终极指南:如何轻松管理《博德之门3》模组 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 你是否曾经因为《博德之门3》模…...

WarcraftHelper:魔兽争霸3终极增强插件,让经典游戏在现代电脑焕发新生

WarcraftHelper:魔兽争霸3终极增强插件,让经典游戏在现代电脑焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper Warcraf…...

慕尼黑电子展深度攻略:从技术侦察到资源对接的实战指南

1. 展会项目概述与核心价值解析又到了一年一度的行业盛会密集期,对于身处电子、嵌入式、物联网这些硬科技赛道的从业者来说,参加一场高质量的线下展会,其价值远不止是“逛一逛”那么简单。它更像是一次集中的行业体检、一次高效的技术社交和一…...

【声纳技术手册】3 三维水声传播的快速计算:从海底山脉到水平折射

三维水声传播的快速计算:从海底山脉到水平折射 副标题:当我们在深海中"听见"一座山——3D射线追踪、Normal Mode Coupling与剪切波效应的直觉之旅 写在前面:为什么我们需要三维? 别急,我们先从一个你熟悉的场景开始想象。 想象你站在一个巨大的游泳池边,水面…...

SillyTavern角色卡片系统:从图片到智能伙伴的魔法之旅

SillyTavern角色卡片系统:从图片到智能伙伴的魔法之旅 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 你是否曾想过,一张普通的图片如何能变成一个会思考、会对话、…...

5 分钟快速上手 hoist-non-react-statics:提升组件静态属性的完整教程

5 分钟快速上手 hoist-non-react-statics:提升组件静态属性的完整教程 【免费下载链接】hoist-non-react-statics Copies non-react specific statics from a child component to a parent component 项目地址: https://gitcode.com/gh_mirrors/ho/hoist-non-reac…...

充电桩源头厂家怎么选?五大核心维度教你精准选型

充电桩源头厂家怎么选?五大核心维度教你精准选型新能源充电基础设施建设进入高速发展期,物业、城投、能源企业、物流园区等采购方在选择充电桩源头厂家时,往往陷入“品牌多、难分辨、怕踩坑”的困境:贴牌组装产品质量无保障、小厂…...

WarcraftHelper:魔兽争霸3终极兼容性增强插件完整指南

WarcraftHelper:魔兽争霸3终极兼容性增强插件完整指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为《魔兽争霸…...

Spring Boot条件装配原理

Spring Boot条件装配原理 引言 条件装配是Spring Boot自动配置的核心机制,通过Conditional及其派生注解,Spring能够根据当前环境、classpath、配置属性等因素智能地决定是否创建某个Bean。本文将深入剖析条件装配的实现原理、各种条件注解的使用方法以及…...