oracle mru算法,LRU(最近最少使用算法) / MRU(最近最常使用算法)

LRU(最近最少使用)和MRU(最近最常使用)是两种缓存淘汰策略。在Oracle9i中,LRUList用于管理缓冲区,从LRU端淘汰不常用数据,而MRU端则保存最近访问的数据。当LRUList满时,新数据到来会淘汰LRU端的旧数据。如果持续访问某数据,该数据会留在MRU端,延长其在缓存中的存活时间。LRU和MRU在平衡数据访问频率与内存使用上起到关键作用。
摘要由CSDN通过智能技术生成

LRU(最近最少使用算法) / MRU(最近最常使用算法) LRU算法(Least recently used)的基本概念是:当内存的剩余的可用空间不够时,缓冲区尽可能的先保留使用者最常使用的数据,换句话说就是优先清除”较不常使用的数据”,并释放 其空间.之所以”较不常使用的数据”要用引号是因为这里判断所谓的较不常使用的标准是人为的、不严格的. MRU算法(Most recently used)的意义正好和LRU算法相反. LRU与MRU两者在缓冲区工作机制中的作用和区别 看一下Oracle 9i Cache对LRU和MRU的使用,看看LRU与MRU两者在缓冲区工作机制中的作用和区别: 在Oracle 9i中有LRU List的概念: 我们可以把LRU List想象成是一连串的缓冲区集合,两端分别是LRU端和MRU端, 当数据库从磁盘上读取数据放入缓冲区时,系统必须先确定缓冲区中有free buffers,这个时候Oracle 9i会扫描LRU List,扫描的基本原则是: 1. 从LRU端到MRU端; 2. 当扫描到free buffer或已扫描的缓冲区数目超过临界值时,就会停止扫描动作; 如果在扫描过程顺利的在LRU List中找到了free buffer,那么Oracle 9i就把从磁盘读出的数据写到free buffer中然后把free buffer加到LRU List的MRU端. 那如果扫描过程没有在LRU List中找到free buffer怎么办?当然是从LRU List的LRU端开始清除缓冲区,如此一来就可以腾出新的空间了. Oracle 9i Cache对LRU和MRU的使用例子 使用者查询数据A,初始的时候LRU List中没有数据A,于是Oracle 9i到磁盘读取A,然后放到LRU List的MRU端,使用者再从LRU List中读取数据A,同理对于B,C…当LRU List满了以后,如果使用者查询N,此时N不在LRU List中而且LRU List中已经没有free buffer了,此时Oracle 9i就开始从LRU端淘汰A以腾出空间存放N. 我们再来看另外一种情况: 在State 3之后,恰好使用者持续的查询A—这将会导致A一直被放置在靠近MRU端的缓冲区,结果将如图State m’所示,你会发现图2的State m’与图1的State m缓冲区存放的数据完全一样但是存放位置不一样.此时LRU List满了,如果再放N的时候LRU List`淘汰的是B,因为A的查询率高于B,所以LRU List让A在缓冲区中呆上较长的时间而先淘汰掉”较不常用的”的B. Datebase Buffer Cache由3部分组成: Dirty buffers,Free buffers,Pinned Buffers Dirty buffers 是表示 block被读到sga中后被修改过,还没有写入数据文件 Free buffers 是表示可以被覆盖的,也就是不包含未写入数据文件的数据 Pinned Buffers 表示该 buffer 目前正被进程使用,这个使用可能是正在这个buffer上读也可能是正在修改,这个buffer在被标志为pinned之前可能是 dirty的也可能是free的,一个buffer在同一时刻只能由一个进程访问(9i有改进 读/读 可以同时进行) 这是从不同的角度去描述buffer的状态的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值