Oracle 日志原理剖析
生活随笔
收集整理的這篇文章主要介紹了
Oracle 日志原理剖析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這篇文章是參考甲骨論老相老師的教學視頻
http://v.youku.com/v_show/id_XMzk0NjYxNzgw.html
所做的學習筆記
?
作為1個DBA, 需要學習許多數據庫知識, 但是目的無非兩大部分.
1. 保持數據庫數據的一致性
2. 優化數據庫性能
而日志系統只對應第1點,日志系統就是用來保持數據的一致性的.
我們先回顧下之前講過的sql語句執行流程
如上圖.可以見到:
1. 產生日志的原因是Buffer cache里發生的數據改動.
2. buffer cache里數據改動產生的日志被寫入Redo log buffer(日志緩存)里.
3. 后臺進程LGWR會將redo log buffer里的日志寫入到硬盤上的日志文件(物理IO)
??????? 而且之前我們講過,Buffer cache是由許多個大小為1個block size 的buffer組成的. 所以buffer cache里的數據改動實際上就是buffer的改動.
?????? 從邏輯上看,我們可以假定Buffer cache存在一名記錄者. 這名記錄者可以實施地觀察出buffer cache哪1個buffer被修改, 在那個時間點被修改, 并嚴格按照修改時間順序把被修改的buffer的改動記錄下來.''
如下圖:
3. 并不關心buffer是被哪個session修改的????? 3. 并不關心buffer是被哪個session修改的
???? 當然,實際上Database Buffer Cache中是不存在記錄者這個東西的.
???? 不過這兩個邏輯也讓我們明白三點:
???? 1. 日志記錄的單位是buffer.
???? 2. 嚴格按照buffer被修改的時間順序來記錄.
???? 3. 并不關心buffer是被哪個session修改的
????? 從實際上看, buffer cache里的buffer是被server process修改的, 一旦server process修改了1個buffer里的數據, server process就同時生成重做日志數據,并放入與該server process對應的PGA中.? 然后根據一些觸發條件,會將PGA里的日志寫入到SGA里面的redo log buffer中,? 最后會被后臺進程LGWR寫入到日志文件中...
????? 我們也可以分析出
????? 1. 對小量數據的多次修改可能會產生大量的日志數據.
????? 2. 大量的日志數據被寫入到日志文件會占用大量IO資源
????? 這一節,老相老師只提到這幾個點,? 他說以后講優化數據庫時會再詳細講..
http://v.youku.com/v_show/id_XMzk0NjYxNzgw.html
所做的學習筆記
?
作為1個DBA, 需要學習許多數據庫知識, 但是目的無非兩大部分.
1. 保持數據庫數據的一致性
2. 優化數據庫性能
而日志系統只對應第1點,日志系統就是用來保持數據的一致性的.
我們先回顧下之前講過的sql語句執行流程
如上圖.可以見到:
1. 產生日志的原因是Buffer cache里發生的數據改動.
2. buffer cache里數據改動產生的日志被寫入Redo log buffer(日志緩存)里.
3. 后臺進程LGWR會將redo log buffer里的日志寫入到硬盤上的日志文件(物理IO)
??????? 而且之前我們講過,Buffer cache是由許多個大小為1個block size 的buffer組成的. 所以buffer cache里的數據改動實際上就是buffer的改動.
?????? 從邏輯上看,我們可以假定Buffer cache存在一名記錄者. 這名記錄者可以實施地觀察出buffer cache哪1個buffer被修改, 在那個時間點被修改, 并嚴格按照修改時間順序把被修改的buffer的改動記錄下來.''
如下圖:
3. 并不關心buffer是被哪個session修改的????? 3. 并不關心buffer是被哪個session修改的
???? 當然,實際上Database Buffer Cache中是不存在記錄者這個東西的.
???? 不過這兩個邏輯也讓我們明白三點:
???? 1. 日志記錄的單位是buffer.
???? 2. 嚴格按照buffer被修改的時間順序來記錄.
???? 3. 并不關心buffer是被哪個session修改的
????? 從實際上看, buffer cache里的buffer是被server process修改的, 一旦server process修改了1個buffer里的數據, server process就同時生成重做日志數據,并放入與該server process對應的PGA中.? 然后根據一些觸發條件,會將PGA里的日志寫入到SGA里面的redo log buffer中,? 最后會被后臺進程LGWR寫入到日志文件中...
????? 我們也可以分析出
????? 1. 對小量數據的多次修改可能會產生大量的日志數據.
????? 2. 大量的日志數據被寫入到日志文件會占用大量IO資源
????? 這一節,老相老師只提到這幾個點,? 他說以后講優化數據庫時會再詳細講..
總結
以上是生活随笔為你收集整理的Oracle 日志原理剖析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle中的Rowid
- 下一篇: Oracle 日志的核心意义(快速提交,