【MySQL】聊聊全表查询会不会把数据库内存打爆

是实际的开发中,可能因为误操作。可能会执行一个全表扫描的SQL,如果这个表的数据比较大,比如10G,但是数据库内存8G ,会不会将这个数据库内存打爆。带着这个问题,我们来深入学习下。其实主要就是一个server层、以及存储引擎层的影响。

全表扫描对server层的影响

InnoDB的数据是保存在主键索引上的,所以全表扫描其实就是扫描表的主键索引。那么具体的执行流程是什么样?

取数据和发送数据的流程:
1.获取一行,写到net_buffer中,默认16KB,net_buffer_length 进行设置。
2.重复获取行,直到net_buffer写满,调用网络接口发出去。
3.发送成功,将net_buffer 清空,继续读区数据发送。
4.如果发送函数返回 EAGAIN 或 WSAEWOULDBLOCK,表示本地网络栈(socket send buffer)写满了,进入等待,直到网络栈重新可以写入。继续发送。

在这里插入图片描述

 show variables like '%net_buffer_length%';

在这里插入图片描述
所以可以看到,mysql占用内存的大小也就 net_buffer_length 那么大,网络发送缓存 也不会达到10G。MySQL采用的是边读边发。但是如果客户端接受比较慢的话,这个事务的执行时间就比较长。

show PROCESSLIST;
展示的 Sending to client 表示。等待客户端接受结果。Sending data:正在执行中。

全表扫描对InnoDB的影响

接着来看看,全表查询对innoDB的影响,
内存的数据页是在buffer pool中管理的,在WAL里 buffer pool 起到了加速更新的作用,同时也起到了加速查询。

比如更新了一个SQL,但是由于WAL机制,数据先是写到buffer pool中,然后磁盘的数据还是旧的,如果这个时候来了一个查询,那么就会直接从buffer pool中直接读取数据返回,可以加速读的作用。

可以通过 show engine innodb status 显示当前的命中率。

InnoDB Buffer Pool 的大小是由参数 innodb_buffer_pool_size 确定的,一般建议设置成可用物理内存的 60%~80%。

show variables like '%innodb_buffer_pool_size%';

但是数据是远远超过物理内存的,所以数据就有一定的淘汰算法,LRU。

在这里插入图片描述
使用LRU算法,发现其实在正常业务查询,使用没有问题,但是如果突然查询一个大表的操作,那么就会将buffer pool中的数据全部清空,导入的都是大表的数据,这样的话,其实命中率急剧下降。磁盘压力增加,SQL语句响应变慢。

那么InnoDB是如何解决这个问题的?

在这里插入图片描述
其实在LRU的基础上进行了优化,也就是将LRU分成young 区域和old区域,3/5进行划分:young、old区域。大概的思想就是,如果访问的数据在LRU链表中,并且youug 区域,那么就移动到head。否则如果不是的话,新增的数据,先到old区域,超过1s在移动到链表头部,小于1S位置不动。

这样就可以很大程度上,将短暂的数据保存在lru Old区域。保证buffer pool响应正常业务的查询命中率。

小结

结论是mysql采用边算边发的策略,查询很大的数据表,不会将内存打爆,而InnoDB引擎内部,有淘汰策略,并且对LRU进行了改进,对Buffer pool做到可控。

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

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

相关文章

python学习20:python中的函数知识点

python中的函数知识点 1.函数中的返回值 什么是函数的返回值?:函数在执行的时候,返回给调用者的结果返回值的应用语法:使用关键词return来返回结果注意:函数体在遇到return后就结束了,所以写在return后的…

KUKA机器人调整示教器灵敏度(校屏)

KUKA机器人KRC4的示教器升级后,示教器屏幕由之前的电阻屏改为电容屏,不仅在外观上有所变化,屏幕校准的方法也有所不同。通过以下方法分别对新旧两款示教器进行屏幕校正,调整示教器屏幕灵敏度。 对新款示教器而言: 一…

Python快速入门系列-5(Python标准库与常用模块)

第五章:Python标准库与常用模块 5.1 常用内置模块介绍5.1.1 os模块5.1.2 datetime模块5.1.3 random模块5.2 文件操作与IO处理5.2.1 文件读写5.2.2 文件复制与移动5.2.3 文件遍历与递归操作5.3 正则表达式5.3.1 匹配字符串5.3.2 替换字符串5.3.3 高级匹配结语Python作为一门强大…

工厂方法模式与抽象工厂模式的深度对比

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自:设计模式深度解析:工厂方法模式与抽象工厂模式的深…

深度学习论文中结构A+B效果很好,怎么讲故事写成一篇优质的论文?

牛牛牛肉饭: AB的故事不一定好讲 但是可以包装成:A族 B族有效成分 C杂质 D微量杂质 我们创新性的提出了全新的算法Pipeline,涵盖ABCD,极大的改进了该领域的算法范式,除此之外我们系统分析了 A以及其相似算法对 新…

P23—P25:标识符和关键字

标识符 什么是标识符? 在java源程序中,程序员有权自己命名的单词都是标识符在EditPlus编译器中,表示符以黑色高亮字体显示 标识符可以标识什么元素? 类名方法名变量名接口名常量名 … 标识符的命名规则: 只能由**数…

详解 Java多线程带来的的风险-线程安全

目录 一、什么是线程安全? 二、线程不安全的原因 1、线程调度是随机的 2、修改共享数据:多个线程修改同⼀个变量 3、原⼦性 ​编辑 (1)什么是原⼦性 (2)⼀条 java 语句不⼀定是原⼦的,也不⼀定…

文心一言指令词宝典之求职招聘篇

作者:哈哥撩编程(视频号、抖音、公众号同名) 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 🏆 推荐专栏: 🏅…

C语言函数递归调用

在C语言中,函数可以直接或间接地调用自身,这种函数调用自身的过程称为递归调用。递归是一种强大的编程技巧,能够简化程序结构、提高代码的可读性和可维护性。本文将介绍C语言函数递归调用的原理、应用场景以及注意事项。 以下是我整理的关于…

PinkysPalaceV2靶场详解IDA逆向查看缓存区溢出漏洞原理以及使用kali gdb使用超详细三次提权字典生成

下载链接: Pinkys Palace: v2 ~ VulnHub 安装: 正常用vm虚拟机打开即可,注意导入时所选择的硬盘存储目录应为空目录,否则会导入失败 根据下载链接提示我们需要更改host文件,以便于我们可以正常访问 kali中的host文件位置为 /etc/h…

弧形导轨在自动化设备中的传动原理

在自动化机械系统中,弧形导轨是一种常见的轨道结构,用于支撑和引导物体沿着指定的弧线运动。其工作原理基于几何学和物理学的原理。 弧形导轨通常由一个弧形的轨道和一个移动部件组成。轨道一般呈弧形,其几何形状可以是圆弧、椭圆弧等&#x…

智慧工地整体解决方案(3)

塔吊安全管理系统 需求分析 塔式起重机是现代施工中必不可少的关键设备,是施工企业装备水平的标志性重要装备之一。随着近年来建筑行业塔机的大量使用,由于塔机违规超限作业和塔机群干涉碰撞等引发的各类塔机运行安全事故频繁发生,造成了巨大的生命财产损失。 典型事故现…

Linux 设备树: 设备树节点与属性在 dtb 文件中的存储

前言 当前新版本的 Linux 内核 设备驱动框架,与设备树(Device Tree)结合密切,整体 设备树的设备驱动框架,比较的庞大,但又非常的经典。 一个个的 设备树解析函数,都是前人【智慧】的结晶&#…

【pysurvival Python 安装失败】

这个错误与 sklearn 包的名称更改有关,导致 pysurvival 在构建元数据时失败。现在,你需要修改 pysurvival 的安装文件以使用正确的 scikit-learn 包名 编辑安装文件:找到 pysurvival 的安装文件,可能是 setup.py 或 pyproject.to…

智慧公厕:改变城市生活的革命性基础设施

在现代城市的高品质生活要求背景下,公共厕所成为了不可或缺的基础设施。然而,传统的公厕在服务质量、管理效率方面存在一定的问题。为了提供更好的公厕服务,智慧公厕应运而生。通过智能化的管理模式,智慧公厕实现了公厕使用与管理…

玩转ChatGPT:Suno制作音乐

AI开始进军音乐领域了。 一款音乐AI神器——Suno V3发布,它能够处理从间奏到主歌、副歌、桥段直至尾奏的完整结构,零门槛创作音乐。 需要科学上网,官方网站:https://app.suno.ai/ 使用GPT写个歌词,然后丢进Suno生成…

Web APIs知识点讲解(阶段七)

正则表达式 1.能够利用正则表达式校验输入信息的合法性2. 具备利用正则表达式验证小兔鲜注册页面表单的能力 一.正则表达式 1.正则表达式 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也…

光明源@智慧厕所公厕软件系统有哪些核心功能?

在现代城市的建设中,智慧公厕的建设成为了提升城市品质和居民生活质量的重要举措。而智慧公厕的核心,不仅仅在于其硬件设备的智能化,同样重要的是其背后支持的智慧厕所公厕软件系统。让我们一起探讨,智慧厕所公厕软件系统有哪些核…

【C++】开散列实现unordered_map与unordered_set的封装

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:手撕哈希表的闭散列和开散列 > 毒鸡汤:谁不是一边受伤,一边学会坚强。 > 专栏选自:C嘎嘎进阶 > 望小伙伴们…

c语言例题,实现一个整型有序数组的二分查找

c语言中,有很多可以实现效果的方法,而在一个整型有序的数组中,我们可以使用二分查找的方法来实现对于一个数组中的元素查找。二分查找的优点在于本身需要的计算是比较少的,一次计算查找排除掉数组中一半的元素,尤其对于…