塊清除(block clean out)
塊清除(block clean out) 是指把一個塊中的資料從dirty 變為clean,等於告訴後面的人,這個塊裡面的資料是乾淨的,可以放心的使用,本質上是更改block header 中的一個標誌位。
1.快速塊清除(fast block clean out)
當發生fast commit cleanout,系統將transaction 提交時刻的scn 作為commit scn,更新block 上事物槽(itl)和undo segment header 的Transaction table 的slot 上的scn,並修改block scn,三者是一致的。
2. 延遲塊清除
有時候在執行select 操作的時候也可能會產生redo,一個可能原因就是oracle 塊清除。在進行塊清除的時候,如果是一個大事務,就會進行延遲塊清除。COMMIT 實際的釋放方式即清除塊上相應的事務槽,但這裡存在一個效能的考量。
設想一個UPDATE 大量資料的操作,因為執行時間較長,一部分已修改的塊已被緩衝池flush out 寫至磁碟,當UPDATE 操作完成執行COMMIT 操作時,則需要將那些已寫至磁碟的數據塊重新讀入,這將消耗大量I/O,並使COMMIT 操作十分緩慢;為了解決這一矛盾,Oracle使用了延遲塊清除的方案,對待存在以下情況的塊COMMIT 操作不做塊清除:在更新過程中,被緩衝池flush out 寫至磁碟的塊若更新操作涉及的塊超過了塊緩衝區快取的10%時,超出的部分塊。雖然COMMIT 放棄對這些塊的塊清除(block cleanout)操作,但COMMIT 操作仍會修改回滾段的段頭,回滾段的段頭包括了段中的事務的字典,COMMIT 操作將本事務轉化為非ACTIVE 狀態。
設想一個UPDATE 大量資料的操作,因為執行時間較長,一部分已修改的塊已被緩衝池flush out 寫至磁碟,當UPDATE 操作完成執行COMMIT 操作時,則需要將那些已寫至磁碟的數據塊重新讀入,這將消耗大量I/O,並使COMMIT 操作十分緩慢;為了解決這一矛盾,Oracle使用了延遲塊清除的方案,對待存在以下情況的塊COMMIT 操作不做塊清除:在更新過程中,被緩衝池flush out 寫至磁碟的塊若更新操作涉及的塊超過了塊緩衝區快取的10%時,超出的部分塊。雖然COMMIT 放棄對這些塊的塊清除(block cleanout)操作,但COMMIT 操作仍會修改回滾段的段頭,回滾段的段頭包括了段中的事務的字典,COMMIT 操作將本事務轉化為非ACTIVE 狀態。
當下一次操作如SELECT,UPDATE,INSERT 或DELETE 訪問到這些塊時可能需要在讀入後完成塊清除,這樣的操作稱之為塊延遲清除(deferred block cleanout);塊延遲清除透過事務槽上的回滾段號,槽號等資訊訪問回滾段頭的事務字典,若事務不再活躍或事務過期則完成清除塊上的事務槽,事務槽清除後繼續執行相應的操作。
塊延遲清除的影響在SELECT 操作過程中體現的最為明顯。總結來說塊延遲清除是COMMIT 操作的一個延續,始終是一種十分輕微的操作,且該種操作是行級的,不會使段(Segment)的屬性有所改變。
相關知識補充:
================================事物槽==============================
ITL(Interested Transaction List)是Oracle 資料塊內部的一個組成部分,位於資料塊頭(block header),itl 由xid,uba,flag,lck 和scn/fsc 組成,用來記錄該塊所有發生的事務,一個itl 可以看作是一條事務記錄。當然,如果這個事務已經提交,那麼這個itl 的位置就可以被反覆使用了,因為itl 類似記錄,所以,有的時候也叫itl 槽位。如果一個事務一直沒有提交,那麼,這個事務將一直佔用一個itl 槽位,itl 裡面記錄了事務資訊,回滾段的入口,事務型別等等。如果這個事務已經提交,那麼,itl 槽位中還儲存的有這個事務提交時候的SCN 號。
================================事物槽==============================
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31520497/viewspace-2156881/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Block Cleanouts 塊清除OracleBloC
- git clean清除未跟蹤檔案Git
- 【BLOCK】Oracle 塊管理常用SQLBloCOracleSQL
- 區塊鏈(Block Chain)結構解析區塊鏈BloCAI
- 【BLOCK】Oracle壞塊處理命令參考BloCOracle
- [20211105]索引分裂 塊清除 日誌增加.txt索引
- 卷積塊注意模組 CBAM: Convolutional Block Attention Module卷積BloC
- [20180626]延遲塊清除與只讀表.txt
- CWE-58:EmptySynchronized Block空的同步塊缺陷漏洞分析synchronizedBloC
- 【Ruby on Rails全棧課程】2.7 塊(Block)和迭代器AI全棧BloC
- 聊聊 clean code
- BlockBloC
- [20211105]索引分裂塊清除日誌增加(唯一索引).txt索引
- [20150409]只讀表空間與延遲塊清除.txt
- Block學習①--block的本質BloC
- Unused Block Compression和Null Block CompressionBloCNull
- 比特幣原始碼研讀(2)資料結構-區塊Block比特幣原始碼資料結構BloC
- Clean architecture for the rest of usREST
- 前端的Clean Architecture前端
- 29、undo_2_1(事務槽、延遲塊清除、構造CR塊、ora-01555)
- block hash區塊雜湊遊戲玩法規則開發原理(下)BloC遊戲
- Block.one的EOS區塊鏈入門開發教程Elemental BattlesBloC區塊鏈BAT
- __block使用BloC
- Block學習②--block的變數捕獲BloC變數
- iOS block巢狀block中weakify的使用iOSBloC巢狀
- [20211108]索引分裂塊清除日誌增加(唯一索引)2.txt索引
- clean_up_log.sh
- iOS Block探究iOSBloC
- [20190124]bbed恢復資料遇到延遲塊清除的問題.txt
- OOM(Out Of Memory)OOM
- Kotlin 1.2.50 is out!Kotlin
- Block學習⑤--block對物件變數的捕獲BloC物件變數
- 《Clean Code》閱讀筆記筆記
- 一個clean框架的demo框架
- E. Block SequenceBloC
- Block的型別BloC型別
- block實現原理BloC
- torch--drop out