数据缓存区管理

来源:互联网 发布:全国凤楼兼职信息源码 编辑:程序博客网 时间:2024/05/21 12:47
数据缓存区(database buffer cache)中的缓冲区(buffer)通过两个
列表管理:待写列表(write list)和最近最少使用列表(least recently 
used(LRU)list)。待写列表中记录的是脏缓冲区(dirty buffer),即
其中数据已被修改且尚未写入磁盘的缓冲区。最近最少使用列表中记录
的是可用缓冲区(free buffer),锁定缓冲区(pinned buffer),及还
没被移入待写列表的脏缓冲区。可用缓冲区内的数据无需继续保留,可
以用于存储新数据。而锁定缓冲区是正在被访问的缓冲区。 

  
当某个 Oracle 进程访问一块缓冲区时,就会将其移动到 LRU 列表的最
近使用(most recently used,MRU)端。随着更多被访问的缓冲区移动
到 LRU 列表的 MRU 端,较早前被访问过的脏缓冲区就会逐渐向 LRU 列
表的 LRU 端移动。 
  
  
当 Oracle 的用户进程(user process)首次查询某块数据时,她将首
先在数据缓存区内进行搜索。如果用户进程在数据缓存区内找到了所需
的数据(称为缓存命中(cache hit)),就可以直接从内存中访问数据。
如果用户进程不能在数据缓存区中找到所需的数据(称为缓存失效
(cache miss)),则需要从磁盘中的数据文件里将相应的数据块复制到
缓存中才能进行访问。缓存命中时的数据访问速度远远大于缓存失效时
的速度。 
  
  
用户进程将数据块读入数据缓存区之前首先要准备好可用缓冲区。用户
进程从 LRU 列表的 LRU 端开始对其进行搜索。这个搜索过程将一直持
续,直到找到可用缓冲区或达到缓存搜索操作的预设限定值为止。 
  

当用户进程在对 LRU 列表的搜索过程中遇到脏缓冲区时,她会先将此类
缓冲区移入待写列表,之后再继续搜索。当用户进程找到了可用缓冲区
时,就会将数据块从磁盘写入缓冲区,并将此缓冲区移到 LRU 列表的 
MRU 端。 

如果 Oracle 用户进程对 LRU 列表的搜索操作达到了预设的限定值而
仍旧没有找到可用缓冲区,那么进程将停止搜索并通知 DBW0 后台进程
将部分脏缓冲区写入磁盘。
0 0
原创粉丝点击