關於延遲塊清除的原理是什麼?為什麼要進行塊清除
論壇上有人問這樣一個問題,我以前也是不是太理解,只知道當一個大的事務需要處理的時候,進行延遲塊清除,這樣加快處理速度.但是今天感覺這個解釋比較容易理解.
delay block cleanout :
主要針對大事務,可能在commit的時候,一些資料髒快已寫入資料檔案,提交時,無法把這些資料塊標記commit,該資料塊的下一個讀者對其進行delay block cleanout 。資料塊的下一個讀者首先檢查該塊的事務狀態是否為活動,不活動的話,修改事務的標誌(flag)。這樣可以避免不必要的事務讀。
對於為什麼要用最小的scn更新itl,對於查詢安全要怎麼理解 :
commit 的時候沒有來得及更改這個block(delay block cleanout),事後cleanout 的時候已經找不到當時對應的scn了,但是,從回滾段中可以得到一個最小的提交scn並且該事務已經提交肯定小於這個從回滾段中還存在的最小scn。那麼oracle給這個 cleanout 的事務分配一個從回滾段中找到的最小事務scn。這雖然不準確,但是是安全的,對於資料訪問也不構成影響。所以叫 upper bound ,猜測的一個scn的上限。
cleanout分為2鍾,一種是fast commit cleanout,另一種是delayed block cleanout.
oracle有一個modified block list結構,用來記錄每個transaction更改過的block,每個transaction大約可以記錄10%buffer cache這多的modified block。(即為每個事務可記錄的modified block大約是buffer cache的10%)這部分block就是當發生commit的時候,oracle可以根據modified block list定位到那些塊並做fast commit cleanout。如果一個transaction修改的塊超過10% buffer cache,那麼超過的塊就執行delayed block cleanout。當做fast commit cleanout時,oracle不會清理 Row locks lb標誌位,ITL lck標誌位。
另一種情況是delayed block cleanout,當transaction還未commit或rollback時modified block已經被寫回磁碟,當發生commit時oracle並不會把block重新讀入做cleanout,而是把cleanout留到下一次對此塊的dml或select。當delayed cleanout時候如果undo segment header的transaction table slot還沒有被覆蓋,那麼可以找回該事務遞交的exact scn,如果slot已經被覆蓋,那麼將會使用undo segment header中的control scn來做為upper bound scn。
針對讀一致性考慮:
每個資料頭部都會記錄一個提交SCN,當資料更改提交後,提交scn同時被修改,這個scn在查詢時可以用來進行一致性判斷.
假如:查詢開始時間為T1,則在查詢獲取的資料塊中,如果資料塊的提交scn小於T1,則oracle接受該資料,如果提交的scn大於t1或者資料被鎖定修改尚未記錄commit scn,則oracle需要通過回滾段構造前映象來返回結果.
關於ORA-01555的理解:
如果當一個查詢觸發延遲塊清除的時候,ORACLE 需要去查詢回滾段獲得該事務提交的SCN,如果事務前映象資訊已經被覆蓋,並且查詢的SCN小於回滾段記錄中記錄的最小提交SCN資訊,那麼oracle將無法判斷查詢的scn和事物提交scn的大小.
如果當一個查詢觸發延遲塊清除的時候,ORACLE 需要去查詢回滾段獲得該事務提交的SCN,如果事務前映象資訊已經被覆蓋,並且查詢的SCN大於回滾段記錄中記錄的最小提交SCN資訊,則將commit 標記為 回滾段中所能找到的最小 scn(對於查詢安全).
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8334342/viewspace-417477/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20180626]延遲塊清除與只讀表.txt
- [20150409]只讀表空間與延遲塊清除.txt
- 區塊鏈的原理是什麼?區塊鏈
- [20190124]bbed恢復資料遇到延遲塊清除的問題.txt
- 什麼是塊元素?什麼是行內元素?
- 29、undo_2_1(事務槽、延遲塊清除、構造CR塊、ora-01555)
- 為什麼會出現浮動和什麼時候需要清除浮動?清除浮動的方式?
- [20190125]bbed恢復資料遇到延遲塊清除的問題3.txt
- [20190124]bbed恢復資料遇到延遲塊清除的問題2.txt
- 什麼是高延遲檔案傳輸?為什麼要使用高延遲檔案傳輸
- 為什麼區塊鏈是不可篡改的區塊鏈
- 我為什麼要關心區塊鏈?概述和接納區塊鏈
- springboot為什麼要用延遲匯入?Spring Boot
- 什麼是IPFS?IPFS與區塊鏈有什麼關係區塊鏈
- 為什麼延遲是儲存中最重要的指標指標
- 塊清除(block clean out)BloC
- Oracle Block Cleanouts 塊清除OracleBloC
- Web前端技術分享:什麼是塊元素?什麼是行內元素?Web前端
- 區塊鏈是做什麼的?區塊鏈
- 網路安全中等保是什麼?為什麼要進行等保測評?
- 區塊鏈「橋」是什麼?區塊鏈
- Python是什麼?為什麼要掌握python?Python
- HyperLedger Fabric和區塊鏈是什麼關係?區塊鏈
- 為什麼要進行等保?企業不進行等保有什麼影響?
- 為什麼要早點進入IT行業?行業
- 為什麼要進行等保測評?
- 什麼是浮動?浮動帶來的影響?怎麼清除浮動?
- 「區塊鏈進階系列」什麼是Web3.0?區塊鏈Web
- 區塊鏈到底是什麼區塊鏈
- 漫畫 | 什麼是區塊鏈?區塊鏈
- 白話區塊鏈是什麼區塊鏈
- 什麼是區塊鏈錢包區塊鏈
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 人工智慧和區塊鏈是什麼關係?人工智慧區塊鏈
- 什麼是延遲?怎樣解決?—Vecloud微雲Cloud
- 為什麼 Web3 與區塊鏈有關Web區塊鏈
- 區塊鏈每日一問 | 什麼是區塊鏈的“分叉”?區塊鏈
- 成為區塊鏈行業的產品經理是什麼感覺區塊鏈行業
- 區塊鏈的核心技術是什麼?區塊鏈