mysql lru_mysql 原理 ~ LRU 算法与buffer_pool

一 简介:针对查询和事务的页在内存中的处理,是如何进行的

二 LRU算法

普通 : 实现的是末尾淘汰法,当整个链表已满时,淘汰尾部,将新的数据页加入头部

mysql_lru改进 : 分为两部分 1分为 yang和old,并不从LRU列表头部进行插入,而是从中间部位.对过期页实行末尾淘汰没有问题,

2 针对新插入的数据页需要做二次判断

1 如果数据页保持1S以上时间,则推进到yang头部

2 如果数据页不能保持1S,则依然保留到old区,等待被淘汰

改进优点:防止一次性的大查询读取的数据页污染整个LRU列表,影响整体的事务命中率

三 相关参数

1 innodb_old_blocks_time 控制着判断数据页保持时间,是加入yang还是保留在old区,默认1s,防止单次大量的全表扫描污染整个LRU

2 innodb_max_dirty_pages_pct 控制着页插入的位置,默认为50%, yang和old区的百分比

四 计算公式

innodb buffer pool命中率

1  Innodb_buffer_pool_read_requests表示read请求的次数

2  Innodb_buffer_pool_reads表示从物理磁盘中读取数据的请求次数

innodb buffer的read命中率就可以这样得到:(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100%。一般来讲这个命中率不会低于99%,如果低于这个值的话就要考虑加大innodb buffer pool。

通过 innodb_buffer_pool_stats 可以直接查看命中率,并不需要计算

五 相关补充

Free List 数据库刚启动的时候,LRU 列表为空,此时需要用到的时候直接将Free列表中的页删除,在LRU列表中增加相应的页,维持页数守恒。

Flush List 当LRU列表中的页被修改后,称该页为脏页(dirty page),即缓冲池中的页和磁盘上的页数据产生了不一致。这时候数据库会通过checkpoint机制将脏页刷新回磁盘,而Flush 列表中的页即为脏页列表。注意脏页也存在于LRU列表中。

INNODB_BUFFER_POOL 构成  1 数据页 2 索引页 3 字典 4 锁信息 5 AHI 6 插入缓冲

六 相关监控

命令  show engine innodb status

相关参数

1 BUFFE POOL SIZE    整个innodb_buffer_pool 页的总数大小  计算总量X16K即可

2 Free  buffers              当前Free列表中页的数量

3 Datebase pages         LRU列表中数据页的个数

这里注意 通常 Datebase pages+Free buffers 并不等于 整个buffer_pool页的数量。因为还有其他需要页 (数据字典,锁)等,这部分是不归LRU列表进行维护的

4 Modified  db pages   脏页的大小

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值