InnoDB学习笔记二缓冲池(buffer pool)

一、buffer pool

1. 缓冲池(buffer pool)

背景

InnoDB是基于磁盘存储的,并将其中的数据按页的方式进行管理。因此InnoDB可视为基于磁盘的数据库系统。由于CPU的速度和磁盘IO速度的巨大鸿沟,需要缓冲池(buffer pool)来提高数据库的整体性能

作用

为了提高大容量读取操作的效率,缓冲池被分为多个,这些可能包含多个行。为了提高缓存管理的效率,缓冲池被实现为页的链接列表。使用LRU算法的变体将很少使用的数据从缓存中老化掉 。

架构

简要架构图,在 Buffer Pool 中,是以数据页为数据单位叫做缓存页

在这里插入图片描述

原理

  • 第一次读取数据时,首先从磁盘中读取数据页,并放到(FIX)缓冲池中。
  • 再次读取同样的数据时,先看缓冲池中是否有相同的数据页。有则命中,从缓冲池中读取。否则从磁盘读取
mysql> show variables like 'innodb_buffer_pool_size';
+-------------------------+---------+
| Variable_name           | Value   |
+-------------------------+---------+
| innodb_buffer_pool_size | 8388608 |
+-------------------------+---------+
1 row in set (0.02 sec)

缓冲池中缓存的数据页类型

  • 索引页
  • 数据页
  • undo页
  • 插入缓冲(Insert buffer)
  • 自适应哈希索引
  • 锁信息
  • 数据字典信息(data dictionary)

缓存页数据结构

缓存页都会对应着一个描述数据块,里面包含数据页所属的表空间、数据页的编号,缓存页在 Buffer Pool 中的地址等等。

描述数据块本身也是一块数据,它的大小大概是缓存页大小的5%左右,大概800个字节左右的大小。

描述如图所示:

在这里插入图片描述

缓冲池实例

即缓冲池的个数。每页根据哈希值分配到不同缓冲池实例减少资源竞争、支持更大的并发处理,加快查询速度

mysql> show variables like 'innodb_buffer_pool_instances';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| innodb_buffer_pool_instances | 1     |
+------------------------------+-------+
1 row in set (0.03 sec)

​ 可通过配置文件修改实例个数

2. Buffer Pool 高并发场景

单个 Buffer Pool 的问题

如果 InnoDB 存储引擎只有一个 Buffer Pool,当高并发时,多个请求进来,那么为了保证数据的一致性(缓存页、free 链表、flush 链表、lru 链表等多种操作),必须得给缓冲池加锁了,每一时刻只能有一个请求获得锁去操作 Buffer Pool,其他请求只能排队等待锁释放。那么此时 MySQL 的性能是多么的低!

多个 Buffer Pool

在生产环境中,其实我们是可以给 MySQL 设置多个 Buffer Pool 来提升 MySQL 的并发能力的

如果Buffer Pool 分配的内存小于1GB,那么最多就只会给你一个 Buffer Pool

但是呢,如果你给 MySQL 设置的内存很大,此时你可以利用下面两个参数来设置 Buffer Pool 的总大小和总实例数,这样,MySQL 就能有多个 Buffer Pool 来支撑高并发了。

[server] 
#缓冲池大小 8G
innodb_buffer_pool_size = 8589934592 
#缓冲池的数量 4个 则每一个缓冲池大小2G
innodb_buffer_pool_instances = 
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值