程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> log buffer及日志管理深入分析及性能調整

log buffer及日志管理深入分析及性能調整

編輯:Oracle數據庫基礎

LGWR負責釋放髒的日志塊從而提供可用日志塊,LGWR在日志緩沖區中的髒日志塊超過1M或者超過日志緩沖區的1/3時就會啟動,而且在將重做記錄寫入聯機日志文件時,都是按照順序寫入,不存在類似DBWR的隨機寫入,所以寫入的速度是非常快的

  觸發LGWR進程將日志緩沖區中的日志信息寫入聯機日志文件條件包括以下幾種:

  1) 前台進程觸發,包括兩種情況。最顯而易見的一種情況就是用戶發出commit或rollback語句進行提交時,需要觸發LGWR將內存裡的日志信息寫入聯機日志文件,因為提交的數據必須被保護而不被丟失;另外一種情況就是在日志緩沖區中找不到足夠的內存來放日志信息時,也會觸發LGWR進程將一些日志信息寫入聯機日志文件以後,從而釋放一些空間出來。

  2) 每隔三秒鐘,LGWR啟動一次。

  3) 在DBWR啟動時,如果發現髒數據塊所對應的重做條目還沒有寫入聯機日志文件,則DBWR觸發LGWR進程並等待LRWR寫完以後才會繼續。

  4) 日志信息的數量達到整個日志緩沖區的1/3時,觸發LGWR。

  5) 日志信息的數量達到1MB時,觸發LGWR。

  6) 發生日志切換時觸發LGWR。

  Oracle記錄數據庫變化(也就是記錄日志信息)的最小單位是改動向量(change vector)。改動向量用來描述對數據庫中任何單個數據塊所做的一次改動。改動向量的內容包括:被改動的數據塊的版本號、事務操作代碼、被改動的數據塊的地址等。這裡的版本號非常重要,它能夠幫助數據塊始終能夠體現當前最新的狀態。oracle在建立改動向量時,會從數據塊中拷貝其版本號。而當恢復期間,Oracle讀取改動向量並將改動應用於相應的數據塊以後,被恢復的數據塊的版本號加1。這裡的數據塊可以屬於表、也可以數據索引、也可以屬於回滾段。但是對於臨時表空間裡的臨時段,不會生成改動向量。

  對於update事務,

  1) 對回滾段事務表的改動,這發生在回滾段段頭。事務表中包含被修改的數據塊的地址、該事務的狀態(commit或active)、 以及存有該事務所使用的回滾段的地址。如果事務表被修改,就會產生針對於它的改動向量。

  2) 對回滾段數據塊的改動。將修改前的舊值(abc)存放到回滾段的數據塊裡。這時回滾段發生改變,於是產生改動向量。

  3) 對redo_test表的數據塊所做的改動。將修改後的新值(cdf)存放到表的數據塊裡。這時數據塊發生改變,於是產生改動向量。

  重做記錄中會有三個改動向量。當然可能有其他情況會產生新的重做記錄,比如修改的列如果有索引,則必須修改索引。這時就會產生第二個重做記錄,用來描述對索引數據塊的修改。這時候的重做記錄還是和第一個重做記錄一樣,包含多個改動向量。此外,在事務完成之後運行commit或rollback語句時,就會產生第三個重做記錄。該重做記錄只有一個改動向量,用來記錄對回滾段事務表的更改,因為commit或rollback時,需要更新事務表裡記錄的該事務的狀態。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved