mysql预读机制可能会扰乱我们之前设想的lru链表的处理逻辑。当⼀个数据⻚被加载到缓冲池中时,可能顺带会把其他⽆关紧要的数据⻚也加载到缓冲池中,这些顺带加载到内存的数据⻚,它们往往被访问的频率是⾮常低的,但是由于lru链表的特点,新加⼊的总是会优先被排在lru的链表头,导致这些顺带进来的、访问频率⽐较低的缓存⻚排在⽐较靠前的位置,导致free链表不够时,lru链表反⽽会把那些本来访问频率较⾼、但是此时被排挤到lru链表尾的缓存⻚给刷盘清
理了,这是很不合理的。
优化后的lru链表主要引⼊了冷热数据分离的思想解决了mysql预读机制带来的问题。把lru链表分为热数据区和冷数据区,热数据区主要存放那些访问频率⾼的缓存⻚,冷数据区存放访问频率较低的缓存⻚;从磁盘加载数据到lru链表时,⾸先会将加载到的缓存⻚直接先放到冷数据链的表头,如果1000ms(默认,可配置)后冷数据的缓存⻚⼜被访问了,此时就认为这些1000ms之后被访问的缓存⻚,在不久的未来可能还会被访问,可以认为它们是热数据了,就会把这些缓存⻚从冷数据区的链表给移动到热数据区链表的表头,通过该步骤可以将热数据从冷数据堆中给巧妙的分离出来,如下图所示:
此时如果要加载其他数据⻚发现缓冲池内存不够,实际上后台⼀直会有⼀个线程开启的⼀个定时任务,不断的从lru链表的尾部将缓存⻚给刷到磁盘中并释放缓存⻚,lru链表冷热数据分离的设计,确保了定时任务从lru链表尾部回收的缓存⻚都是访问频率很低的数据,对性能的影响也就降到了最低。
未经允许不得转载:任鹏个人博客 » mysql的预读机制带来的问题以及优化后的lru链表对该问题的解决
最新评论
Forex wiki. https://lt.forex-stock-bitcoin-brokers.com
Magnificent items from you, man. I have take note your stuff
Following on from the 3rd March Meetings held by economic de
It is remarkable, rather valuable message dfgdlfg2131.32
一般都会有一个沙盒期的,过了沙盒期就会慢慢放出来
百度不收录是应为是新站的原因吗?
The spike in consumer prices that left inflation at a four-d