關於延遲塊清除的原理是什麼?為什麼要進行塊清除
論壇上有人問這樣一個問題,我以前也是不是太理解,只知道當一個大的事務需要處理的時候,進行延遲塊清除,這樣加快處理速度.但是今天感覺這個解釋比較容易理解.
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle block cleanout塊清除_延遲塊清除OracleBloC
- oracle 塊延遲清除(delayed block cleanout) 理解OracleBloC
- 區塊鏈的原理是什麼?區塊鏈
- 什麼是塊元素?什麼是行內元素?
- 什麼是高延遲檔案傳輸?為什麼要使用高延遲檔案傳輸
- 塊清除的理解
- oracle 塊清除Oracle
- 為什麼區塊鏈是不可篡改的區塊鏈
- SSL延遲計算:為什麼HTTPs比HTTP要慢?HTTP
- HTML中的塊是什麼?HTML
- 我為什麼要關心區塊鏈?概述和接納區塊鏈
- 什麼是IPFS?IPFS與區塊鏈有什麼關係區塊鏈
- 為什麼延遲是儲存中最重要的指標指標
- Web前端技術分享:什麼是塊元素?什麼是行內元素?Web前端
- 網路安全中等保是什麼?為什麼要進行等保測評?
- 區塊鏈是做什麼的?區塊鏈
- 區塊鏈「橋」是什麼?區塊鏈
- HyperLedger Fabric和區塊鏈是什麼關係?區塊鏈
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 為什麼要早點進入IT行業?行業
- Oracle Block Cleanouts 塊清除OracleBloC
- 區塊鏈到底是什麼區塊鏈
- 白話區塊鏈是什麼區塊鏈
- 什麼是區塊鏈錢包區塊鏈
- 漫畫 | 什麼是區塊鏈?區塊鏈
- 區塊鏈為什麼模組化?區塊鏈
- Python是什麼?為什麼要掌握python?Python
- 什麼是延遲?怎樣解決?—Vecloud微雲Cloud
- 人工智慧和區塊鏈是什麼關係?人工智慧區塊鏈
- NLA是什麼?NLA的原理是什麼?
- [20190124]bbed恢復資料遇到延遲塊清除的問題.txt
- 為什麼 Web3 與區塊鏈有關Web區塊鏈
- 為什麼受傷的總是我--手動清除惡意網頁程式碼網頁
- 企業為什麼要進行專案控制?
- 為什麼要選擇代理來進行抓取?
- 企業為什麼要放棄區塊鏈,轉向雲端?區塊鏈
- 區塊鏈的核心技術是什麼?區塊鏈
- 區塊鏈的概念定義是什麼區塊鏈