依据统计信息确定多块读被使用

大家都知道:Full table scan 和 Index fast full scan会用到多块读,下面就依据统计信息来确定这点;

physical read total multi block requests:

Total number of Oracle instance read requests which read in two or more database blocks per request for all instance activity including application, backup and recovery, and other utilities

SQL> create table test as select * from all_objects ;

Table created.

SQL> select b.name,a.value
  2  from v$mystat a
  3      ,v$statname b
  4  where a.statistic# = b.STATISTIC#
  5    and b.NAME = 'physical read total multi block requests';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
physical read total multi block requests                                 13

SQL> select count(*) from test;

  COUNT(*)
----------
     67711

SQL> select b.name,a.value
  2  from v$mystat a
  3      ,v$statname b
  4  where a.statistic# = b.STATISTIC#
  5    and b.NAME = 'physical read total multi block requests';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
physical read total multi block requests                                 21

SQL> set autot on explain;
SQL> select count(*) from test;

  COUNT(*)
----------
     67711


Execution Plan
----------------------------------------------------------
Plan hash value: 1950795681

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

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

SQL>

Full table scan 导致多块读请求增加了8

SQL> create index test_idx_01 on test(object_id);

Index created.

SQL> select b.name,a.value
  2  from v$mystat a
  3      ,v$statname b
  4  where a.statistic# = b.STATISTIC#
  5    and b.NAME = 'physical read total multi block requests';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
physical read total multi block requests                                 21

SQL> select count(*) from test;

  COUNT(*)
----------
     67711

SQL> select b.name,a.value
  2  from v$mystat a
  3      ,v$statname b
  4  where a.statistic# = b.STATISTIC#
  5    and b.NAME = 'physical read total multi block requests';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
physical read total multi block requests                                 22

SQL> set autot on explain ;
SQL> select count(*) from test;

  COUNT(*)
----------
     67711


Execution Plan
----------------------------------------------------------
Plan hash value: 2827309063

-----------------------------------------------------------------------------
| Id  | Operation             | Name        | Rows  | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |             |     1 |    46   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE       |             |     1 |            |          |
|   2 |   INDEX FAST FULL SCAN| TEST_IDX_01 | 67192 |    46   (0)| 00:00:01 |
-----------------------------------------------------------------------------

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

SQL>

Index fast full scan导致多块读请求增加了1

SQL> create index test_idx_02 on test(object_type);

Index created.

SQL> select b.name,a.value
  2  from v$mystat a
  3      ,v$statname b
  4  where a.statistic# = b.STATISTIC#
  5    and b.NAME = 'physical read total multi block requests';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
physical read total multi block requests                                 22

SQL> select count(*) from test where object_type='TABLE';

  COUNT(*)
----------
      2622

SQL> select b.name,a.value
  2  from v$mystat a
  3      ,v$statname b
  4  where a.statistic# = b.STATISTIC#
  5    and b.NAME = 'physical read total multi block requests';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
physical read total multi block requests                                 22

SQL> set autot on explain;
SQL> select count(*) from test where object_type='TABLE';

  COUNT(*)
----------
      2622


Execution Plan
----------------------------------------------------------
Plan hash value: 2071593684

---------------------------------------------------------------------------------
| Id  | Operation         | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |             |     1 |    11 |     9   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE   |             |     1 |    11 |            |          |
|*  2 |   INDEX RANGE SCAN| TEST_IDX_02 |  2787 | 30657 |     9   (0)| 00:00:01 |
---------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("OBJECT_TYPE"='TABLE')

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

SQL>

Index range scan没有发出多块读请求;

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

转载于:http://blog.itpub.net/45259/viewspace-663191/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值