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

变更缓冲池简介

目录

​编辑

1. 变更缓冲池的作用

2. 为什么是二级索引

3. 缓冲类型


1. 变更缓冲池的作用

提升修改数据时的效率

怎么提升修改效率呢 ? 

更缓冲区用来缓存对二级索引数据的修改,当数据页没有被回载到内存中时先把修改缓存起来,等到其他查询操作发生时数据页被加载到内存后,再直接修改内存中的数据页,从而达到减少磁盘1/0的目的。

变更缓冲区用来缓存对二级索引数据的修改,是一个特殊的数据结构,当使用INSERT、UPDATE或DELETE 语句修改二级索引对应的数据时,如果对应的数据页在缓冲池中则直接更新,如果不在缓冲池中,那么就把修改操作缓存到变更缓冲区,这样就不用立即从磁盘读取对应的数据页了,当之后的读操作将对应的数据页从磁盘加载到缓冲池中时,变更缓冲区中缓存的修改操作再批量合并到缓冲池,从而达到减少磁盘I/O的目的。执行流程如图所示 : 

2. 为什么是二级索引

由于聚集索引具有唯一性,我们分析一下聚集索引为什么不能被放入变更缓存,假设表中有一个主键(ID),现在有两条INSER 语句,都在插入数据时ID的值相同(id=1),那么在变更缓冲区中就存在两个修改操作,如果以后要合并到缓冲池中,这时就会出现重复的主键值,所以聚集索引的修改不能被加入到变更缓冲区;

与聚集索引不同,二级索引通常是不唯一的,并且向二级索引中插入数据时由于数据列不同,所以位置相对随机,同样对于删除和更新操作可能会影响不相邻的二级索引页,如果每次都从磁盘读取数据就会发生大量的随机I/0,以变更缓冲区的方式先将修改缓存起来,当真正的读取数据时再把修改合并到缓冲池中可以提升效率。

3. 缓冲类型

在修改二级索引数据时变更缓冲区可以减少磁盘I/O从而提高效率,但是变更缓冲区占用了缓冲池的一部分空间,从而减少了可用于缓存数据页的内存,如果业务场景读多写少,或者表中的二级索引相对较少,那么可以考虑禁用更改缓冲从而提高缓冲池空间。

可以通过选项文件或 SET GLOBAL 语句对系统变量 innodb_change_buffering 进行设置,来控制变更缓冲区对于插入、册删除操作(索引记录被标记为删除)和清除操作(当索引记录被物理删除时)的开启或禁用

all:默认值,缓存插入、删除标记操作和清除

none:不缓存任何操作

inserts:只缓存插入操作

deletes :只缓存删除标记操作

changes:缓存插入和删除标记操作

purges :缓存发生在后台的物理删除操作


文章转载自:
http://characterless.wsgyq.cn
http://amyloid.wsgyq.cn
http://camp.wsgyq.cn
http://attestator.wsgyq.cn
http://botcher.wsgyq.cn
http://algometry.wsgyq.cn
http://accompt.wsgyq.cn
http://antinuclear.wsgyq.cn
http://bellow.wsgyq.cn
http://adduceable.wsgyq.cn
http://antiterrorist.wsgyq.cn
http://assuror.wsgyq.cn
http://alkyd.wsgyq.cn
http://abstruse.wsgyq.cn
http://chionodoxa.wsgyq.cn
http://avouchment.wsgyq.cn
http://aeronautic.wsgyq.cn
http://amitrole.wsgyq.cn
http://angelical.wsgyq.cn
http://adoratory.wsgyq.cn
http://calculatedly.wsgyq.cn
http://barracuda.wsgyq.cn
http://amateurish.wsgyq.cn
http://catchpole.wsgyq.cn
http://aboral.wsgyq.cn
http://birthroot.wsgyq.cn
http://beltway.wsgyq.cn
http://adzuki.wsgyq.cn
http://chloric.wsgyq.cn
http://adh.wsgyq.cn
http://www.dtcms.com/a/281229.html

相关文章:

  • 19.1 单元测试框架
  • ssm学习笔记day08mybatis
  • ESP32轻松实现UDP无线通信
  • 使用python的pillow模块将图片转化为灰度图,获取值和修改值
  • 雷军的 IP 革命:人格化力量如何重塑商业规则|创客匠人
  • uniapp微信小程序弹窗
  • 《汇编语言:基于X86处理器》第8章 高级过程(1)
  • 被人工智能激活的哲学
  • 短剧小程序的「技术革命」:从「粗放生长」到「精准运营」
  • Windows内核对象
  • 新方法!家长可用安卓或苹果,远程管理孩子使用iPhone的时长
  • LeetCode|Day12|58. 最后一个单词的长度|Python刷题笔记
  • 跨平台游戏引擎 Axmol-2.7.1 发布
  • C#中Static关键字解析
  • k8s环境使用Operator部署Seaweedfs集群(上)
  • AJAX 入门到精通
  • 堆内存、栈内存、内存地址
  • 作业:复制数组
  • EndNote
  • 【Keil】C/C++混合编程的简单方法
  • DGNNet:基于双图神经网络的少样本故障诊断学习模型
  • 深入浅出 RabbitMQ-核心概念介绍与容器化部署
  • Element plus参考vben逻辑实现的描述列表组件封装实践
  • 【PTA数据结构 | C语言版】二叉树前序序列化
  • 差分信号接口选型指南:深入解析LVDS、SubLVDS、SLVDS与SLVDS-EC**
  • 《大数据技术原理与应用》实验报告五 熟悉 Hive 的基本操作
  • [AI8051U入门第三步]串口1使用-printf重定向(乱码解决办法)
  • Django+Celery 进阶:动态定时任务的添加、修改与智能调度实战
  • Android target34升级到35中的edge-to-edge适配
  • Nestjs框架: 数据库架构设计与 NestJS 多 ORM 动态数据库应用与连接池的配置