MySQL源码学习:关于慢查询日志中的Rows_examined=0

 最近在一个项目中DBA同学问了一个问题:为什么很多慢查询日志中显示 Rows_examined : 0?

  需要说明的是, 这类慢查询语句都是类似 select count(*) from (…)t;

 

 在说明这个问题之前,我们先指出两个相关背景:

1、MySQL的临时表,都是MyISAM的。

2、MyISAM表中的记录总数是额外存储的,count(*)的时候不需要遍历数据。

3、把count(*)转换为取一个const值这件事情,是在优化(optimize)阶段作的。

 

  问题分析:

这个值对应于代码中的examined_row_count,用于统计每次执行过程中实际扫描的记录数。

正常的流程:

查询执行过程中,每个子查询的信息都在curr_join,其中curr_join->examined_rows在每次扫一行的时候++.子查询完成后,curr_join->examined_rows累积到examined_row_count中。

 

哪里清0的?

我们上面这个语句,from内的子查询,curr_join->examined_rows是正常的,但在外部计算count的时候,上面提到的优化结果认为这个阶段是不需要扫描表的,把thd->examined_row_count给置0了。罪魁代码在JOIN::exec()中。

 

从代码中的注释来看,似乎是一个没有考虑细致的地方,待求证。

 

改进分析:

纵然有很多理由,在慢查询日志中显示的0还是不友好的,可以理解为是一个bug。

实际上从上面的分析可知,如果是复合查询中的一个环节,尤其不是第一个环节,此处清0会使显示结果出错。从当前的thd信息中可以判断出是否使用了子查询,简单一点的修改,根据thd.derived_tables信息来确定是否清0。

 

实际上每次执行开始之前的这个值是被reset过的,有理由怀疑这个地方实际上可以直接删除这句话。这个比较激进,要求证一下。

 

 简单验证:

   加了thd.derived_tables判断后,

 方便调试起见,把所有的查询都打到slow_log了。

 

Ubuntu 20.04 安装 MariaDB 生产级部署指南 关系型数据库是现代应用的核心数据底座,MariaDB 作为 MySQL 的高性能、开源替代方案,凭借其与 Linux 发行版深度集成的特性,成为 Ubuntu 系统首选。其原理基于插件化存储引擎(如 Aria、XtraDB)、兼容 MySQL 协议并增强安全与监控能力,技术价值体现在零配置适配 systemd、AppArmor/SELinux 原生支持、高稳定性及长期支持(LTS)保障。典型应用场景涵盖 Web 服务后端、RAGFlow 等向量数据库中间层、金融与政企级事务系统。本文聚焦 Ubuntu 20 阅读详情

相关推荐

MySQL Exporter实战:从连接泄漏到主从延迟的云原生监控体系

MySQL监控本质是理解其运行语义与资源行为的关系。传统SHOW命令仅提供瞬时、无维度的状态快照,缺乏时间序列、多维标签和聚合能力,难以支撑现代云环境下的根因分析。Prometheus MySQL Exporter将数据库指标转化为标准可观测性原语,通过schema、table、instance等多维标签实现精准下钻,并支持perf_schema→information_schema→global_status三级降级采集,兼顾深度与稳定性。它不仅解决连接泄漏、InnoDB锁竞争、缓冲池命中率下降等高频故障

weixin_34295316的博客 763

01. 基础架构:一条SQL查询语句是如何执行的?

文章目录1. MySQL架构2. 连接器3. 查询缓存4. 分析器5. 优化器6. 执行器问题1. 长连接、短连接 的含义2. 全部使用长连接,可能会导致MySQL内存占用涨得特别快的原因3. 怎么解决全部使用长连接,可能会导致MySQL内存占用涨得特别快4. 执行 mysql_reset_connection 会产生的影响5. 查询缓存利大于弊的原因6. 为什么对权限的检查不对优化器之前做7. 在连接器里已经做过了权限验证,为什么在执行器里还要再做一次? 1. MySQL架构 Server层(1-7均按

小青年的博客 538

MySQL实战学习路径:从源码编译到索引压测与慢日志分析

MySQL 是最主流的开源关系型数据库,其核心原理围绕存储引擎(如 InnoDB)、SQL 执行流程、索引结构(B+Tree)及事务机制展开。掌握这些底层原理,才能真正实现性能调优与故障排查。本文聚焦 Linux 环境下 MySQL 8.0 的**源码编译安装**与**systemd 服务化管理**,详解 `CMAKE_INSTALL_PREFIX`、`my.cnf` 配置路径、socket 连接异常等高频问题,并通过 Python 脚本开展**索引效果压测**,结合 `EXPLAIN` 与 `pt-que

weixin_34082695的博客 334

mysql学习笔记(一)

(包括建表、修改表结构等)和。

Sw1ng的博客 3461

HomeAssistant+HACS实战:5分钟搞定米家设备接入(附HomeKit配置技巧)

本文详细介绍了如何通过HomeAssistant和HACS插件商店快速接入米家设备,并分享HomeKit配置技巧。从HACS安装到米家设备接入,再到HomeKit设备集成,提供一站式智能家居解决方案,帮助用户实现设备统一管理和自动化场景设置。

weixin_29192141的博客 1051

【C++】小猫钓鱼纸牌游戏--C++实现

小猫钓鱼问题: 描述:初始,两个人各有n张牌(牌面0-10),顺序固定,只能按顺序出牌。然后,两个人轮流在桌面上以接龙的方式出牌,当某个人放置的牌在桌面上已经出现时,他收起相同牌面及其中间的牌作为自己的筹码,同时需要再放一张牌到桌面。某人手上的牌出完后,另一个人继续出,直到两人手上都没牌为止,输出结束时两个人手上的筹码数。 #include<iostream> using namespace std; struct queue { int head; //队列首 int tail; //

qq_41344430的博客 3202

mysql rows examined_MySQL源码学习:关于慢查询日志中的Rows_examined=0

在说明这个问题之前,我们先指出两个相关背景:1、MySQL的临时表,都是MyISAM的。2、MyISAM表中的记录总数是额外存储的,count(*)最近在一个项目中DBA同学问了一个问题:为什么很多慢查询日志中显示 Rows_examined : 0?需要说明的是, 这类慢查询语句都是类似 select count(*) from (…)t;在说明这个问题之前,我们先指出两个相关背景:1、MySQ...

weixin_39946029的博客 1826

千兆以太网的接收和crc校验

解析该以太网帧,包括统计该以太网帧长度+过滤功能(端口号对不对,是否为udp协议)+CRC校验,将解析结果存入状态fifo,一旦状态fifo开始有数,就开始开启读过程,读过程开始时,首先读状态fifo,根据从状态fifo里面读出的以太网帧长度,来读数据fifo(这样能够防止跨帧读),然后在根据状态fifo里面读出的crc校验正确标志和过滤标志,来确定是否将数据fifo读出来的数据送给下一个模块。改掉之后在抓一下,可以看到抓出来的数据完全正确,从最后开始看,除去4个crc校验的尾巴,数据是到255结束的。

weixin_45284871的博客 2740

MySQL中的慢查询

实际开发中,最直接性能指标就是SQL执行速度 慢查询 顾名思义,就是执行很慢的查询 如果定义慢?超过long_query_time参数设定的时间阈值(默认10s),就被认定是慢查询的, 是需要优化的。 慢查询日志 慢查询日志默认是不开启的 如果需要优化SQL语句,可以开启这个功能,很容易知道哪些语句是需要优化的 Query_time:实际执行的时间,Lock_time:如果加了锁的话,等到锁所消耗的时间,Row_sent:拿到了多少条数据, Rows_examined:为了得到想要的结果操作

weixin_37841366的博客 619

Latex参考文献中大写字母编译后自动变成了小写,如何保持原字母大写形式

bib文件参考文献中大写自动变为小写,如何保持原大写问题。Latex: 保持参考文献大小写,overleaf文献编译后,原大写字母自动变成了小写字母,如何保持原字母大写

我的个人博客 5806

汽车LIN总线(3) -- 协议层:帧的类型

主要介绍LIN协议层中帧的类型,介绍中加入一点自己的理解(带下划线的是,其余是官方资料)。

晴朗luo的博客 889

故障分析 | 一条本该记录到慢日志的 SQL 是如何被漏掉的

虽然现在的 MySQL 数据库大多数部署在云上或者使用了数据库管理平台收集慢查询,慢查询日志可能不是首选的排查问题 SQL 的方法。但是对于没有额外配置慢查询监控的 MySQL,慢查询日志仍然是一个非常好的定位慢 SQL 的方法,配合工具使用分析某段时间的 TOP SQL 也十分方便。并且数据库管理平台收集的慢查询数据需要额外的数据库存放,一般都会设置保留一段时间,如果要回溯更早的慢 SQL 就只能通过慢查询日志了。

ActionTech的博客 688

【nvidia-B200 生产环境】NVIDIA 570.124.06+Cuda12.8 Ubuntu22.04 nccl-test 一键部署脚本(免修改复制即用)

目录1. 初始化与日志记录2. 安装基础工具与配置更新3. NVIDIA 驱动安装 570.124.064. 安装 Mellanox OFED 24.10-2.1.8.05. 安装 CUDA 12.86. 安装 NCCL 和测试7. 配置 rc.local 和其他优化8. B200 单独步骤9. 最终测试与重启10. 完整生产脚本,复制即可直接使用总结 功能: 设置日志目录和日志文件路径。 使用 命令将标准输出和错误输出同时写入日志文件和终端。 记录脚本开始时间,并计算开始的秒数

jundao1997的专栏 2798

MySQL数据的慢查询

.MySQL 慢查询的相关参数解释: slow_query_log:是否开启慢查询日志,1表示开启,0表示关闭。 log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log long_query_tim

qq_49651914的博客 205

手把手教你学Simulink——基于Simulink的固态变压器(SST)多级协同控制

摘要:本文详细介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为新一代智能电网核心设备,通过AC-DC整流、DC-DC隔离和DC-AC逆变三级架构实现电能高效转换。针对多级耦合难题,提出能量-功率协同控制策略:纵向解耦电压环与功率前馈,横向联动级间功率指令。在Simulink中搭建10kV/400V系统模型,实现直流母线电压波动<2%的动态性能。特别设计了负载突变时的三级协同机制,通过虚拟惯性算法和前馈控制实现快速响应。文章包含完整的建模步骤、控制推导和参数设置,为电力电子工

MHD0815的博客 195

fanuc机器人KAREL中 函数的应用

本次课程讲解编程的思路。很多的同学都玩过积木,一个一个的模块逐渐累积起来,通过彼此之间的相互联系,最终形成一个完整的整体。其实编程也是这样。 将一个对象根据其特点进行模块化拆分,尤其是一些特点非常相似的内容,将其变成一个模块。然后通过传递参数,实现不同的功能,这就是模块化编程。

haier123888的博客 2744

慢日志太多看不过来?pt-query-digest 三步定位最值得修的 Top SQL

本文延续慢查询排查系列,针对生产环境海量慢日志(如309条)无法肉眼分析的痛点,介绍使用mysqldumpslow与pt-query-digest两款工具三步筛选“最值得修”的Top SQL:第一步聚合(按指纹归类),第二步排序(按总耗时优先),第三步解读(结合次数、耗时、返回行数定优先级)。通过模拟真实流量生成测试日志,演示如何快速定位高频高耗时的慢SQL,实现5分钟内输出可执行的优化清单,提升排查效率。

qq_37068139的博客 149

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MySQL慢查询分析实战:pt-query-digest从安装到避坑指南

数据库性能调优时,慢查询是导致系统响应变慢的常见根源。要想精准定位拖垮业务的SQL语句,离不开对慢查询日志的系统化分析。pt-query-digest作为Percona Toolkit中的核心工具,通过解析慢查询日志、抓包数据或processlist,将零散的SQL记录聚合为查询指纹,并输出执行次数、耗时、扫描行数等关键指标,帮助开发者快速识别高消耗查询。它适用于MySQL 5.7/8.0的日常巡检、突发故障排查以及索引优化前后的效果对比。本文从安装部署、日志开启、报告解读到高阶用法与避坑经验,完整演示如何

weixin_33824385的博客 240

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

slow log判定是否会加上锁等待时间?

作者徐晨亮,MySQL DBA,知数堂学员。热衷于数据库优化,自动化运维及数据库周边工具开发,对MySQL源码有一定的兴趣。一 前言对MySQL DBA而言,我们经常遇到...

老叶茶馆 1361

MySQL日志排查实战:从错误日志到binlog一次搞定

在数据库运维与后端开发中,日志是定位故障与性能瓶颈的核心依据。MySQL内置了多类日志体系,各自记录不同层面的运行信息:错误日志负责记录服务异常,慢查询日志暴露执行效率低下的SQL,binlog保存每一次数据变更,通用查询日志则可追溯完整操作轨迹。理解这些日志的触发原理、存储位置与分析工具,能帮助工程师快速完成故障诊断、SQL优化、主从复制与数据恢复。无论是处理线上连接数打满、接口超时,还是应对误删数据、同步中断,合理使用MySQL日志都能显著缩短排查路径。从通用查询概念到分层日志机制,再到实际排障命令与工

weixin_30768881的博客 257

Apache SkyWalking 监控 MySQL/MariaDB 完全指南:基于 mysqld_exporter 的指标采集与 fluentbit 慢 SQL 分析

Apache SkyWalking 提供了针对 MySQL/MariaDB 数据库的两条监控通道:一条基于 `prometheus/mysqld_exporter` 采集服务器性能指标,经由 OpenTelemetry Collector 转送 OAP Server 的 Meter 系统;另一条基于 fluentbit 等日志 Agent 采集慢 SQL 语句,通过 LAL 规则解析入库。本文以

gitblog_00304的博客 889

MySQL ORDER BY与GROUP BY性能优化实战指南

ORDER BY和GROUP BY是SQL中基础却关键的排序与聚合操作,其性能表现高度依赖索引设计与B+树物理有序性的匹配。当查询涉及多条件过滤、范围扫描或函数计算时,易触发临时表(Using temporary)和文件排序(Using filesort),导致CPU与IO飙升。理解索引最左前缀、列排序方向(如DESC)、覆盖索引及函数索引等机制,可将慢查询从秒级降至毫秒级。典型应用场景包括电商分页排序、运营时间聚合、多表JOIN分组、窗口函数排名及HAVING风控统计。本文结合真实执行计划与压测数据,系统

weixin_30315435的博客 409

MySQL执行流与存储引擎:一条SQL从应用到磁盘的完整旅程

在日常开发中,我们常会遇到SQL慢查询、索引失效甚至死锁回滚等棘手问题。表面上看是SQL写法或索引设计有误,但深入排查后往往会触及两个底层概念:MySQL执行流和存储引擎。所谓执行流,是指一条SQL从客户端发出,经过连接认证、解析器生成语法树、优化器选择执行计划,再到执行器调用存储引擎接口的完整链路;而存储引擎则真正负责数据落盘、日志写入和并发控制,其中InnoDB作为默认引擎,其Buffer Pool、redo log、undo log与MVCC机制决定了事务的耐用性与高并发读写的性能表现。理解执行计划如

weixin_30522983的博客 307

mysql自学

目录一、数据库概念二、mysql安装2.1 ubuntu安装mysql2.2 rockylinux安装mysql2.3 windows安装mysql2.4 数据初始化2.5 修改密码2.6 创建用户2.7 忘记密码2.8 默认端口2.9 远程连接三、数据库管理工具Dbeaver四、mysql练习库4.1 world库4.2 sakila库4.3 employees库4.4 自建库导出4.5 全库备份与恢复(all-databases)4.6 查询结果导出五、SQL语言六、五种数据类型6.1 整数型6.2 浮

zhangli2009x的博客 259

MySQL Workbench实战指南:从连接失败到高效查询的完整路径

MySQL Workbench 是面向开发者和DBA的核心数据库图形化工具,其本质是MySQL客户端与可视化管理平台的融合体。它基于标准SQL协议与MySQL服务器通信,通过图形界面封装连接管理、SQL执行、ER建模、性能监控等能力。技术价值在于降低操作门槛、提升排查效率、强化权限与字符集等关键配置的可控性。典型应用场景包括本地开发环境快速连库调试、遗留系统结构逆向分析、运营数据临时导出、索引优化验证及团队协作中的模型同步。本文聚焦真实工作流中的高频痛点——如‘Connection refused’、乱码、

weixin_30247781的博客 384
上一篇: MySQL源码学习:关于 'A' =='A '的问题
下一篇: MySQL源码学习:索引使用统计功能
iteye_621
博客等级 码龄8年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值