学习老盖《深入浅出》笔记之buffer cache(1)

通过多个链表去管理(LRU LIST DIRTY LIST(CHECK EQUENEU)

1.首先扫描BUFFER CACHE中有无所需的block,如果有则通过LRU LIST移动BLOCK,如果没有则从磁盘上读取块

2.在读取前先扫描LRU LIST判断寻找足够的空闲BUFFER,并在扫描的过程中将已修改过的数据移动到CHECKPOINT EQUENCE,

如果在扫描一个范围后仍未找到足够的空间块,那么触发DBWr去执行写入CHECKPOINT EQUENCE的数据,这个等待过程叫free buffer wait;

限制扫描一定范围查询语句:

select kvittag,kvitval,kvitdsc from x$kvit

where kvittag='kcbldq';

3.找到足够的BUFFER后,SERVER进程可以将BUFFER数据读入到BUFFER CACHE

4.如果读取的数据不满足一致性需求,则SERVER进程通过回滚段构造前镜像给用户;

5.DBWr也会主动去扫描LRU上的数据,并有一个扫描阀值,

扫描阀值查询语句:

select kvittag,kvitval,kvitdsc from x$kvit

where kvittag='kcbfsp';

6.为了提高搜索的效率引入了辅助链表(AUXI),当扫描空闲块时从辅助连表开始,而DBWR从主链表开始;

7.通过DUMP查看BUFFER信息;

alter session set events 'immediate trace name buffers level 4';

level 1:包含BUFFER Header信息

Level 2-10;

8.为了获得完整大的跟踪信息,将max_dump_file_size为unlimited;








你可能感兴趣的:(server,list,cache,header,buffer,events)