ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 逻辑读小记

逻辑读小记

原创 Linux操作系统 作者:wei-xh 时间:2010-07-18 12:24:45 0 删除 编辑
一条select语句发出后,ORACLE会计算出需要读取哪些BLOCK,拿一个BLOCK来说,根据块地址HASH以后,计算出块所在的cache buffer chain,然后搜索这个链表,如果在链表中存在,释放cache buffer chain,PIN住这个链表中的块,然后根据客户端的arraysize设置抓取相应的记录数,然后释放PIN,这就是一个逻辑读,如果还需要这个块的其余记录,那么重复这个过程,又是一个逻辑读,因此一个块可能有N此逻辑读。如果块在链表中不存在,那就物理读取,然后再获取cache buffer chain,....因此我们将arraysize设置成一个较大的值是一个不错的选择,最佳值是刚好等于这个块中的记录数,可是往往每个块的记录数都是不一样的。设置的值超过了一个块所能容纳的最大记录数是没有意义的。


如果测试语句中如果包含count(*)之类的聚合函数,arraysize将不会再起作用了,ORACLE内部会一次性抽取块中的所有行。
SQL> set arraysize 15
SQL> select count(*) from test;

已用时间:  00: 00: 00.00

执行计划
----------------------------------------------------------
Plan hash value: 1950795681

-------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |   153   (2)| 00:00:02 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| TEST | 51669 |   153   (2)| 00:00:02 |
-------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        688  consistent gets
          0  physical reads
          0  redo size
        410  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> set arraysize 100
SQL> select count(*) from test;

已用时间:  00: 00: 00.02

执行计划
----------------------------------------------------------
Plan hash value: 1950795681

-------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |   153   (2)| 00:00:02 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| TEST | 51669 |   153   (2)| 00:00:02 |
-------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        688  consistent gets
          1  physical reads
          0  redo size
        410  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> set arraysize 200
SQL> select count(*) from test;

已用时间:  00: 00: 00.00

执行计划
----------------------------------------------------------
Plan hash value: 1950795681

-------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |   153   (2)| 00:00:02 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| TEST | 51669 |   153   (2)| 00:00:02 |
-------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        688  consistent gets
          0  physical reads
          0  redo size
        410  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

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

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2425342