Oracle逻辑读

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 10:15 点击:

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

作者“机敏”
 

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Table函数使用简介
      • Oracle数据库Constraint约束的常用操作及异常处理
      • Bulk Collect性能分析(zz)
      • export/import的使用
      • OCP043第十五讲 Database Security
      • ORACLE10gr2数据导入MySQL方案
      • oracle 让sys用户可以使用isqlplus
      • 在oracle数据库下使用iSQL*Plus DBA访问数据库
      • Oracle行列转换小结
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1