|
本帖最后由 googlgoracle 于 2011-10-20 16:27 编辑
服务器进程:
1.首先,服务器使用一个哈希函数在buffer cache 中查找,看所需要的block是否存在。如果在buffer cache中找到了,就把这个块移动到离LRU 尾部 较远的一个位置。这个过程是逻辑的IO,因为并没有去磁盘取数据。
如果没有在buffer cache中找到需要的block,服务器进程必须去数据文件中读取,即发生物理读。
2.在从数据文件中读取之前,服务器进程首先在LRU list 中查找 free block。
3.在2 中查找的过程中,服务器进程会同时把 脏block 移动 dirty list 上。
4.如果dirty list 超过其阈值,服务器通知 DBWn 将 dirty blocks 写入磁盘。同样如果在dirty list的阈值范围内 没有找到free block,通知 DBWn 将 dirty block 内容写回磁盘。
5.当找到一个free block 后,服务器进程将把data file中block的数据读入到 buffer cache中的 free block中。Oracle 服务器进程将这个block从 LRU list的end 移走(不清楚)
6.如果这个block不一致,oracle 将通过 当前的block和 undo segment 重建这个block早期的version
虽然是2003 年的 还是学习了 还是有不清楚的地方
server process
|
|