mysql lru_Mysql缓存-全表扫描过程、LRU算法

本文探讨了MySQL全表扫描对内存和网络的影响,以及InnoDB如何利用改进的LRU算法处理全表扫描,以降低对Buffer Pool命中率和磁盘压力的影响。全表扫描时,数据页存入old区域,避免影响young区域,保证正常业务查询的命中率。
摘要由CSDN通过智能技术生成

在日常开发中,常因为分页查询的使用,或者SQL的语法问题导致的全表扫描,这带来的问题可能会有系统的OOM,频繁的GC,以及慢SQL,数据返回慢等问题。那么我们如果光从内存这个角度看这个全表扫描的问题,他是怎么样进行查询返回结果的呢?

假设我的主机内存就几个G,但是全表的数据可能是它的几倍,那么机器的内存会直接用光吗?

结合日常的开发工作,对大表做全表扫描,看来应该是没问题的(只看数据而言)。但是,这个流程到底是怎么样的呢?

一个查询语句的状态变化

MySQL查询语句进入执行阶段后,首先把状态设置成“Sending data”;

然后,发送执行结果的列相关的信息(meta data) 给客户端;

再继续执行语句的流程;

执行完成后,把状态设置成空字符串。

仅当一个线程处于“等待客户端接收结果”的状态,才会显示"Sending to client";而如果显示成“Sending data”,它的意思只是“正在执行”。

net_buffer_length

这部分用来存放客户端连接线程的连接信息和返回客户端的结果集。当 MySQL 开始产生可以返回的结果集,会在通过网络返回给客户端请求线程之前,会先暂存在通过 net_buffer_length 所设置的缓冲区中,等满足一定大小的时候才开始向客户端发送,以提高网络传输效率。不过,net_buffer_length 参数所设置的仅仅只是该缓存区的初始化大小,MySQL 会根据实际需要自行申请更多的内存以满足需求,但最大不会超过 max_al

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值