首页  >  文章  >  数据库  >  Oracle教程:select 操作产生的 redo

Oracle教程:select 操作产生的 redo

WBOY
WBOY原创
2016-06-07 17:03:26828浏览

数据库版本: Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 创建测试表:SQLgt; create table a as select * f

数据库版本:
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0


创建测试表:
SQL> create table a  as select * from all_objects  ;
Table created.

SQL> set autotrace on statistics ;

插入数据(hint append):

SQL> insert /*+ append */ into a select * from all_objects ;
9891 rows created.

Statistics
----------------------------------------------------------
        302  recursive calls
        137  db block gets
       6040  consistent gets
          0  physical reads
    1055332  redo size
        627  bytes sent via SQL*Net to client
        558  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
       9891  rows processed
SQL> commit ;
Commit complete.

第一次查询数据:
SQL> select count(*) from a ;
  COUNT(*)
----------
     19782

Statistics
----------------------------------------------------------
          0  recursive calls
          1  db block gets
        255  consistent gets
        248  physical reads
  168  redo size    ---------------------------------> ???产生redo???        395  bytes sent via SQL*Net to client
        507  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


第二次查询:

SQL> select count(*) from a ;
  COUNT(*)
----------
     19782

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        252  consistent gets
          1  physical reads
    0 redo size      
        395  bytes sent via SQL*Net to client
        507  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


=================================================
如上所示,为什么在查询的时候会产生 redo ? 产生的redo 到底是做什么的?
=================================================
----

取消 hint append 插入数据,第一次查询不会产生redo

SQL> insert into a select * from a ;

19782 rows created.


Statistics
----------------------------------------------------------
        112  recursive calls
      21100  db block gets
        699  consistent gets
          0  physical reads
    7149196  redo size
        642  bytes sent via SQL*Net to client
        534  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
      19782  rows processed

SQL>
SQL>
SQL> select count(*) from a ;

  COUNT(*)
----------
     39564


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        502  consistent gets
          0  physical reads
          0  redo size         395  bytes sent via SQL*Net to client
        507  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
---------------------------------------------------

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn