逻辑读与物理读

上一篇 / 下一篇  2014-12-23 08:54:18 / 个人分类:数据库

数据块是oracle最基本的读写单位,但用户所需要的数据,并不是整个块,而是块中的行,或列。

当用户发出SQL语句时,此语句被解析执行完毕,就开始了数据的抓取阶段,在此阶段,服务器进程会先将行所在的数据块从数据文件中读入buffercache,这个过程叫做物理读

物理读,每读取一个块,就算一次物理读

当块被送进buffercache后,并不能立即将块传给用户,因为用户所需要的并不整个块,而是块中的行。

buffercache的块中读取行的过程,就是逻辑读

为了完成一次逻辑读,服务器进程先要在hash表中查找块所在的buffercache链。找到之后,需要在这个链上加一个cachebufferchains闩,加闩成功之后,就在这个链中寻找指定的块,并在块上加一个pin.并释放cachebufferchains闩,然后就可以访问块中的行了。

服务器进程不会将块中所有满足条件的行一次取出,而是根据你的抓取命令,每次取一定数量的行。这些行取出之后,会经由PGA传给客户端用户。

行一旦从buffercache中取出,会话要释放掉在块上所加的PIN。本次逻辑读就算结束。


TAG:

 

评分:0

我来说两句

Open Toolbar