ITPub博客

首页 > 数据库 > Oracle > 总结一下ORACLE读取缓存块的过程

总结一下ORACLE读取缓存块的过程

Oracle 作者:浮云暖暖 时间:2015-07-14 15:56:46 0 删除 编辑

某个用户进程访问某个数据块时,这个缓存块将被移动到LRU列表的MRU端。在被访问的缓存块不断的移动到MRU端的同时,LRU列表中的其他不经常被访问的缓存块将逐渐向LRU端移动.

当某个用户进程需要访问某些数据块时,ORACLE首先在数据库缓存中寻找,如果该进程所需的数据块已经位于数据库缓存中,ORACLE将直接从内存中读取数据并返回给用户,这种情况称为“缓存命中”;如果在数据库失败缓存中找不到所需的缓存块,ORACLE必须先从数据文件中将所需的数据块复制到缓存中,然后再从缓存中读取它并返回给用户,这种情况称为“缓存失败”。在缓存命中时的访问速度要远远高于缓存失败的情况。

如果发生缓存失败,在ORACLE将数据文件中的数据块复制到缓存中之前,必须首先找到空闲缓存块以容纳新的数据块。ORACLE将从LRU列表的LRU端开始搜索,直到找到所需的空闲缓存块或者已经搜索过的缓存块达到一个限定值为止。

在搜索LRU列表的过程中,如果搜索到的是一个脏缓存块,ORACLE将把它移入到写入列表中,然后再继续进行搜索。如果搜索到的是一个空闲缓存块,ORACLE将从数据文件中读入所需的数据块,并将其写入空闲缓存块,然后再将该缓存块移动到LRU列表的MRU端。如果所需的缓存块都被写入到了空闲缓存块中,搜索结束。

如果在搜索了一定数目的缓存块后仍然没有获得全部所需的空闲缓存块,ORACLE将停止对LRU列表的搜索,然后激活DBWR后台进程,开始将写入列表中的脏缓存块写入数据文件。已被写入的脏缓存块将恢复为空闲缓存块,然后被放入LRU列表中。执行完这项工作后再重新开始搜索,这时应当能够找到足够的空闲缓存块。

触发DBWR进程的事件:
1.当用户进程在LRU列表中搜索了一定数量的缓存块后,仍然没有找到可用的空闲缓存块,DBWR进程将启动,把脏缓存块写入数据文件。
2.Checkpoint发生时,DBWR进程把所有的脏缓存块从LRU列表中移入到写入列表,并写入到数据文件。
3.数据库缓存块中的写入列表的长度达到一定值的时候,DBWR将写入列表中的脏缓存块写入数据文件。
4.每过3秒钟,DBWR把脏缓存块从LRU列表移到写入列表,一旦写入列表长度达到一定值,DBWR便将数据写入数据文件。
5.当表空间offline时,DBWR把所有属于该表空间的脏缓存块从LRU列表移到写入列表,并且开始写入数据文件。
6.当表空间开始热备时,DBWR把所有属于该表空间的脏缓存块从LRU列表移到写入列表,并且开始写入数据文件。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26366530/viewspace-1732965/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-06-09

  • 博文量
    71
  • 访问量
    75756