在怎樣的條件下,select操作會生成redo資訊
當存在延遲塊清除的時候:
由於資料塊上儲存了ITL事務槽資訊與鎖定位資訊,因此在事務提交後,需要清除。清除的內容主要為在TIL事務槽裡記錄事務提交標誌與提交SCN,清除記錄的鎖定位資訊。
但是ORACLE有一個規則,如果修改的資料塊接近BUFFER CACHE的約10%,或者資料塊已經不在BUFFER CACHE裡了,那麼會進行延遲塊清除,清除的這個過程也會導致資料塊的變化,因此會記錄日誌。
下面我演示下,資料塊已經不在BUFFER CACHE裡的情況:
SQL> conn scott/tiger
已連線。
SQL>
SQL> spool d:\\ss.txt
SQL> create table pp as select * from dba_objects;
表已建立。
SQL> insert into pp select * from pp;
已建立49844行。
SQL> /
已建立99688行。
SQL> /
已建立199376行。
SQL> /
已建立398752行。
SQL> /
已建立797504行。
SQL> alter system flush buffer_cache;
系統已更改。
SQL> commit;
提交完成。
SQL> set autotrace trace stat
SQL> select /*+ full(pp) */count(*) from pp;
統計資訊
----------------------------------------------------------
6 recursive calls
1 db block gets
43137 consistent gets
21903 physical reads
1523104 redo size
411 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
從實驗可以看出,由於重新整理了BUFFER CACHE,導致資料塊都不在BUFFER CACHE裡了,那麼提交的時候就不會去做塊清除,等待下一次操作此資料塊的時候才進行延遲塊清除,此清除會產生日誌。這個實驗中產生了1523104byte的日誌。
由於資料塊上儲存了ITL事務槽資訊與鎖定位資訊,因此在事務提交後,需要清除。清除的內容主要為在TIL事務槽裡記錄事務提交標誌與提交SCN,清除記錄的鎖定位資訊。
但是ORACLE有一個規則,如果修改的資料塊接近BUFFER CACHE的約10%,或者資料塊已經不在BUFFER CACHE裡了,那麼會進行延遲塊清除,清除的這個過程也會導致資料塊的變化,因此會記錄日誌。
下面我演示下,資料塊已經不在BUFFER CACHE裡的情況:
SQL> conn scott/tiger
已連線。
SQL>
SQL> spool d:\\ss.txt
SQL> create table pp as select * from dba_objects;
表已建立。
SQL> insert into pp select * from pp;
已建立49844行。
SQL> /
已建立99688行。
SQL> /
已建立199376行。
SQL> /
已建立398752行。
SQL> /
已建立797504行。
SQL> alter system flush buffer_cache;
系統已更改。
SQL> commit;
提交完成。
SQL> set autotrace trace stat
SQL> select /*+ full(pp) */count(*) from pp;
統計資訊
----------------------------------------------------------
6 recursive calls
1 db block gets
43137 consistent gets
21903 physical reads
1523104 redo size
411 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
從實驗可以看出,由於重新整理了BUFFER CACHE,導致資料塊都不在BUFFER CACHE裡了,那麼提交的時候就不會去做塊清除,等待下一次操作此資料塊的時候才進行延遲塊清除,此清除會產生日誌。這個實驗中產生了1523104byte的日誌。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-662245/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 弱監督條件下基於相似性條件學習的服飾搭配生成
- 在不允許新建物件的條件下,將list中指定條件的值去除物件
- SAP MM 自定義條件型別出現在採購資訊記錄的'條件'介面裡 ?型別
- 將主查詢條件寫到子查詢裡執行效果會怎樣?
- Oracle 什麼時候select會產生redo?Oracle
- 怎樣在IIS下配置PHPPHP
- 【新炬網路名師大講堂】有限條件下怎樣做好恢復演練
- 在不把視窗設定成當前視窗的條件下,對視窗進行操作。
- 怎樣寫課件,怎樣從課件中學習
- 延遲塊清理介紹(select也會產生redo的原因)
- Oracle 檢視可以DML操作的條件Oracle
- 關聯查詢完,寫個 select 把條件放在外面,方便條件處理
- 怎樣獲取發生錯誤的會話資訊 -- 轉會話
- 怎樣獲取發生錯誤的會話資訊(轉)會話
- 怎樣獲取發生錯誤的會話資訊 zt會話
- Laravel Eloquent ORM 多條件查詢,你會怎麼寫?LaravelORM
- 怎樣在QueryBuilder中使用PostgreSQL中的?操作符UISQL
- ML-熵、條件熵、資訊增益熵
- model 的 with 怎麼寫 join 的條件
- 部分聯機備份和常規操作生成的redo比較!
- 條件和布林操作符
- 在 JMeter 中使用 JSON 提取器提取特定條件下的值JMeterJSON
- excel條件格式怎麼設定 excel條件格式在哪裡Excel
- 怎樣在ubuntu下寫c++程式UbuntuC++
- 為什麼忘記commit也會造成select查詢的效能問題(SELECT產生Redo的情形)MIT
- 原來一條select語句在MySQL是這樣執行的《死磕MySQL系列 一》MySql
- 現在企業會要求JAVA人員會怎樣的技術呢?Java
- PL/SQL Developer 及 TOAD 在不裝oracle client條件下的配置SQLDeveloperOracleclient
- MongoDB操作之遍歷集和條件查詢操作MongoDB
- 在雲端管理您的資料,會是怎樣的體驗?
- 010 Rust 非同步程式設計,使用 select 巨集的條件Rust非同步程式設計
- 010 Rust 非同步程式設計,使用 select 宏的條件Rust非同步程式設計
- StringBuider 在什麼條件下、如何使用效率更高?UIIDE
- 檢查REDO日誌相關資訊並生成HTML檔案的指令碼HTML指令碼
- 怎樣在 Ubuntu 下安裝 Moodle(魔燈)Ubuntu
- 連線條件字元型別不一樣。字元型別
- 怎樣在程式中獲取所有執行緒的堆疊資訊?執行緒
- 簡述REDO操作