關於delete還是update會產生更多日誌的問題
論壇上有兄弟問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部落格 ” ,連結:http://blog.itpub.net/19423/viewspace-1036991/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- update操作會產生幾條mlog$日誌?
- 關於delete,drop,truncate的問題delete
- 關於生產系統鎖問題的排查
- Sqlserver update\delete用inner join關聯,會update\delete關鍵字後面的表關聯到的行SQLServerdelete
- 【oracle】關於日誌產生量的計算Oracle
- 關於SAP生產訂單操作中的問題處理。
- JAVA關於判斷年份是閏年還是平年的問題Java
- 解決生產日誌重複列印的問題
- myisam對於update,insert,delete關於auto_incremant的影響deleteREM
- innodb對於update,insert,delete關於auto_incremant的影響deleteREM
- 轉賬問題是屬於業務問題還是屬於技術問題?
- 關於日誌事務的問題
- 關於centos 7安裝binwalk的過程中產生的問題CentOS
- 關於MYSQL DML(UPDATE DELETE)中的子查詢問題和ERROR 1093 (HY000)錯誤MySqldeleteError
- RabbitMQ真實生產故障問題還原與分析MQ
- 一個關於c++字串處理和delete[]與delete差別的問題 (轉)C++字串delete
- QZ面試被問select......for update會鎖表還是鎖行lor面試
- 軟體是誘導式生產還是服從彌補式生產? (轉)
- 關於Java多執行緒實現生產者和消費者的問題Java執行緒
- ASM+RMAN使用delete input備份日誌的問題ASMdelete
- 創業者請想清楚,該關注自己的產品還是需要解決的問題?創業
- javascript,還是javascript的問題JavaScript
- Linux更換jdk版本,java -version還是原來的版本問題LinuxJDKJava
- 關於SQL Server事務日誌的問題彙總SQLServer
- 有關Tomcat併發的問題,困擾小弟多日,請高手賜教!Tomcat
- [20160314]關於sql寫法問題使用=還是用inSQL
- Spring的問題,還是Tomcat的問題SpringTomcat
- sql:delete if exists還是drop if exists?SQLdelete
- 關於非簇索引中儲存的簇索引的RID還是指標的問題索引指標
- 致板橋:關於"查詢資料庫後是返回ResultSet還是返回Collection?"的幾點問題資料庫
- AMD:顯示卡生產不是問題 關鍵是視訊記憶體供貨緊缺記憶體
- 關於生產管理系統中的BOM!
- mysql for update是鎖表還是鎖行MySql
- Delete,insert,update與undo的關係[轉載TOM文章]delete
- 報表的效能問題是怎樣產生的?又該如何解決?
- update的機制問題
- 交換機可能產生的問題分析(轉)
- 在用package方式產生.xml時由於有&造成問題的處理PackageXML