ITPub博客

首页 > 数据库 > Oracle > 关于delete还是update会产生更多日志的问题

关于delete还是update会产生更多日志的问题

原创 Oracle 作者:sundog315 时间:2010-08-18 09:27:27 0 删除 编辑

论坛上有兄弟问http://www.itpub.net/thread-1338094-1-1.html

对于redo而言,不仅仅需要记录数据块的更改,还需要记录相关undo的信息。因此,由于delete操作需要记录全部列的undo信息,redo量往往大于update。

但是,考虑到supplemental log(附加日志)时,是什么情况呢?

[@more@]

SQL> select SUPPLEMENTAL_LOG_DATA_MIN,
2 SUPPLEMENTAL_LOG_DATA_PK,
3 SUPPLEMENTAL_LOG_DATA_UI,
4 SUPPLEMENTAL_LOG_DATA_ALL
5 from v$database
6 ;

SUPPLEME SUP SUP SUP
-------- --- --- ---
YES YES YES NO

SQL> create table test as select * from dba_objects;

表已创建。

SQL> set autot trace stat
SQL> delete from test;

已删除64968行。


统计信息
----------------------------------------------------------
0 recursive calls
72804 db block gets
922 consistent gets
0 physical reads
25260528 redo size
678 bytes sent via SQL*Net to client
585 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
64968 rows processed

SQL> rollback;

回退已完成。

SQL> update test set object_name=';

已更新64968行。


统计信息
----------------------------------------------------------
0 recursive calls
70704 db block gets
922 consistent gets
0 physical reads
29575832 redo size
680 bytes sent via SQL*Net to client
599 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
64968 rows processed

SQL> rollback;

回退已完成。

SQL> alter database drop supplemental log data;
alter database drop supplemental log data
*
第 1 行出现错误:
ORA-32589: 无法删除最小补充事件记录


SQL> alter database drop supplemental log data (primary key,unique index) column
s;

数据库已更改。

SQL> alter database drop supplemental log data;

数据库已更改。

SQL> select SUPPLEMENTAL_LOG_DATA_MIN,
2 SUPPLEMENTAL_LOG_DATA_PK,
3 SUPPLEMENTAL_LOG_DATA_UI,
4 SUPPLEMENTAL_LOG_DATA_ALL
5 from v$database;

SUPPLEME SUP SUP SUP
-------- --- --- ---
NO NO NO NO

SQL> set autot trace stat
SQL> delete from test;

已删除64968行。


统计信息
----------------------------------------------------------
0 recursive calls
72417 db block gets
922 consistent gets
0 physical reads
23954520 redo size
683 bytes sent via SQL*Net to client
585 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
64968 rows processed

SQL> rollback;

回退已完成。

SQL> update test set object_name=';

已更新64968行。


统计信息
----------------------------------------------------------
0 recursive calls
67563 db block gets
922 consistent gets
0 physical reads
17284752 redo size
683 bytes sent via SQL*Net to client
599 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
64968 rows processed

SQL> rollback;

回退已完成。

SQL> alter database add supplemental log data;

数据库已更改。

SQL> alter database add supplemental log data (primary key,unique index) columns
;

数据库已更改。

SQL> alter table test add constraint test_pk primary key(object_id);
alter table test add constraint test_pk primary key(object_id)
*
第 1 行出现错误:
ORA-01449: 列包含 NULL 值; 无法将其变更为 NOT NULL


SQL> delete test where object_id is null;

已删除2行。

SQL> commit;

提交完成。

SQL> alter table test add constraint test_pk primary key(object_id);

表已更改。

SQL> select SUPPLEMENTAL_LOG_DATA_MIN,
2 SUPPLEMENTAL_LOG_DATA_PK,
3 SUPPLEMENTAL_LOG_DATA_UI,
4 SUPPLEMENTAL_LOG_DATA_ALL
5 from v$database;

SUPPLEME SUP SUP SUP
-------- --- --- ---
YES YES YES NO

SQL> delete from test;

已删除64966行。


统计信息
----------------------------------------------------------
0 recursive calls
73779 db block gets
136 consistent gets
0 physical reads
26312052 redo size
683 bytes sent via SQL*Net to client
585 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
64966 rows processed

SQL> rollback;

回退已完成。

SQL> update test set object_name=';

已更新64966行。


统计信息
----------------------------------------------------------
90 recursive calls
68326 db block gets
972 consistent gets
0 physical reads
19907460 redo size
684 bytes sent via SQL*Net to client
599 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
64966 rows processed

SQL> rollback;

回退已完成。

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

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

注册时间:2010-01-05

  • 博文量
    126
  • 访问量
    540264