ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 块清除的理解

块清除的理解

原创 Linux操作系统 作者:byfree 时间:2008-08-05 16:32:00 0 删除 编辑

Thomas Kyte《Expert Oracle Database Architecture》学习记录

块清除(block cleanout)形成是因为oracle的locks信息存储在block头部,当下一次访问块时,可能必须clean it out(不是每次都要,fast commit cleanout不要),并且消除事务信息,这样就会产生redo(修改事务信息的redo)。

在与事务相关的提交列表中,Oracle会记录已修改的块list,每个list有20个块,Oracle会根据需要分配多个这样的list,直至达到某个临界点。如果我们修改的块加起来超过了块缓冲区缓存大小的10%,Oracle会停止为我们分配新的list。

下面把DB_CACHE_SIZE设置为一个很低的值4MB,这足以放下512个8KB的块(块大小是8KB)

SQL> create table t (x char(2000), y char(2000), z char(2000));

Table created.

SQL> set autotrace traceonly statistics;
SQL> insert into t select 'x', 'y', 'z' from all_objects where rownum <= 500;

500 rows created.


Statistics
----------------------------------------------------------
       2431  recursive calls
       4625  db block gets
       5098  consistent gets
        626  physical reads
    3303100  redo size
        666  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
         40  sorts (memory)
          0  sorts (disk)
        500  rows processed

SQL> commit;

Commit complete.

SQL> select * from t;

500 rows selected.


Statistics
----------------------------------------------------------
         29  recursive calls
          1  db block gets
       1104  consistent gets
        518  physical reads
      36528  redo size
      13250  bytes sent via SQL*Net to client
        763  bytes received via SQL*Net from client
         35  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        500  rows processed
       
SQL> /

500 rows selected.


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        538  consistent gets
        529  physical reads
          0  redo size
      13250  bytes sent via SQL*Net to client
        763  bytes received via SQL*Net from client
         35  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        500  rows processed

第二次select就不产生redo了。

如果执行一个大的INSERT(如上所述)、UPDATE或DELETE,这种块清除行为的影响最大,它会影响数据库中的许多块(缓存中10%以上的块都会完成块清除)。

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

请登录后发表评论 登录
全部评论

注册时间:2008-04-16

  • 博文量
    65
  • 访问量
    232611