ITPub博客

首页 > Linux操作系统 > Linux操作系统 > zt_逻辑读_logical read

zt_逻辑读_logical read

原创 Linux操作系统 作者:wisdomone1 时间:2013-01-02 01:55:35 0 删除 编辑
逻辑读的准确定义:
9N8F
~~` d qITPUB个人空间

E~l
eb
我们都知道,数据块是oracle最基本的读写单位,但用户所需要的数据,并不是整个块,而是块中的行,或列.当用户发出SQL语句时,此语句被解析执行完毕,就开始了数据的抓取阶段,在此阶段,服务器进程会先将行所在的数据块从数据文件中读入buffer cache,这个过程叫做物理读.物理读,每读取一个块,就算一次物理读.当块被送进buffer cache后,并不能立即将块传给用户,因为用户所需要的并不整个块,而是块中的行.从buffer cache的块中读取行的过程,就是逻辑读.
?J Q*eEoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net 但Oracle并不会在一次逻辑读中,读块中所有的行,而是根据用户的设定,一次读一部分行。ITPUB个人空间5Vd$Jz(C8HSB
为了完成一次逻辑读,服务器进程先要在hash表中查找块所在的cache buffer 链.找到之后,需要在这个链上加一个cache buffer chains 闩,加闩成功之后,就在这个链中寻找指定的块,并在块上加一个pin锁.并释放cache buffer chains闩.然后就可以访问块中的行了.服务器进程不会将块中所有满足条件的行一次取出,而是根据你的抓取命令,每次取一定数量的行.这些行取出之后,会经由PGA传给客户端用户.行一旦从buffer cache中取出,会话要释放掉在块上所加的PIN.本次逻辑读就算结束.如果还要再抓取块中剩余的行,服务器进程要再次申请获得cache bufffer链闩.再次在块上加PIN.这就算是另外一次逻辑读咯.也就是说,服务器进程每申请一次cache buffer链闩,就是一次逻辑读.而每次逻辑读所读取的行的数量,可以在抓取命令中进行设置.oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netB&l_B1@g6g
逻辑读和Cache buffer chains闩关系密切,TOM曾有文章提到,进程每申请一次Cache buffer chains闩,就是一次逻辑读。但是,逻辑读并不等同于Cache buffer chains闩,每次逻辑读,在9i中至少需要获得两Cache buffer chains闩。逻辑读是指在Hash表中定位块的这个过程。#x{~p!OON0O+rO

EUu!K
\iQ-k~
如果一次Fetch,访问了N个块,就是N个逻辑读。如果一个块中的行,花费N次Fetch才抓取完,也是N个逻辑读。ITPUB个人空间T%H}Z7j4j]"N3^Y

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

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb 工作经历: 中国普天 北京科蓝 北京云和恩墨 北京神州新桥

注册时间:2008-04-04

  • 博文量
    2189
  • 访问量
    12689910