逻辑读与物理读
上一篇 /
下一篇 2014-12-23 08:54:18
/ 个人分类:数据库
数据块是oracle最基本的读写单位,但用户所需要的数据,并不是整个块,而是块中的行,或列。
当用户发出SQL语句时,此语句被解析执行完毕,就开始了数据的抓取阶段,在此阶段,服务器进程会先将行所在的数据块从数据文件中读入buffercache,这个过程叫做物理读。
物理读,每读取一个块,就算一次物理读。
当块被送进buffercache后,并不能立即将块传给用户,因为用户所需要的并不是整个块,而是块中的行。
从buffercache的块中读取行的过程,就是逻辑读。
为了完成一次逻辑读,服务器进程先要在hash表中查找块所在的buffercache链。找到之后,需要在这个链上加一个cachebufferchains闩,加闩成功之后,就在这个链中寻找指定的块,并在块上加一个pin锁.并释放cachebufferchains闩,然后就可以访问块中的行了。
服务器进程不会将块中所有满足条件的行一次取出,而是根据你的抓取命令,每次取一定数量的行。这些行取出之后,会经由PGA传给客户端用户。
行一旦从buffercache中取出,会话要释放掉在块上所加的PIN。本次逻辑读就算结束。
收藏
举报
TAG: