4.MySQL --- Innodb缓冲池

InnoDB缓冲池 — Buffe Pool

1.是什么

在这里插入图片描述

在这里插入图片描述

2.数据更新流程

当我们查询数据时,会先去Buffer Pool 中查询,若是不存在,存储引擎会先将数据从磁盘加载到Buffer Pool中,然后将数据返回给客户端;

同理,当我们更新某个数据时,若是在Buffer Pool中找不到,同样会先加载进去再修改在内存中的数据,后续会统一刷入磁盘。

3.缓存原则

根据 “位置 * 频次” 原则对I/O访问进行优化;

位置:决定效率,提供缓冲池就是为了在内存可以直接访问数据;

频次:决定优先顺序,缓冲池大小有限(eg:磁盘有200G,内存只有16G,缓冲池就只有1G),无法将所有数据加载到缓冲池,会根据使用频次加载频次高的热数据

4.预读特性

我们进行读取数据时存在一个“局部性原理”:我们使用了一些数据,大概率还会使用它周围的一些数据,因此采用“预读”机制提前加载,可减少未来可能的磁盘I/O操作。

5.数据同步

当我们对数据库中的记录进行修改时,首先会对缓冲池中的信息进行修改,然后以一定的频率刷新到磁盘上,这里并不是每次更新操作都会立刻写回磁盘,而会采用一种 checkpoint 的机制,触发时才回写到磁盘上,更好的提升整体性能;

eg:当缓冲池不够时,此时将不常用的脏页(缓冲池中修改过的页)回写到磁盘上,然后从缓冲池中释放掉。

多线程、高并发下的Buffer Pool

多线程情况下,访问Buffer Pool的数据都需要加锁

在Buffer Pool 特别大且线程并发访问量特别高的情况下,需要把其拆分成若干个小的Buffer Pool,每个Buffer Pool都称为一个实例,他们都是独立的,并且会独立的去申请内存空间、独立的管理各种链表,固在多线程并发访问时不会互相影响,从而提高并发处理能力。

Buffer Pool也是需要性能开销的,innodb规定:当 innodb_buffer_pool_size 小于1G时,设置多个实例是无效的,InnoDB会默认innodb_buffer_pool_instances 的值为1;

innodb_buffer_pool_size 大于1G时建议设置多个Buffer Pool实例。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值