深入淺出-redo和undo記載02
Log_buffer中的redo entries的大小是以bytes為單位,LGWR還是以redo block size為單位把redo寫入磁碟,redo block size是oracle原始碼固定的,跟作業系統有關,通常的作業系統都是以512bytes為單位。例如Solaris,AIX,Windows,Linux等
可以從v$sysstat檢視得到redo bloc size
SQL> select value,name from v$sysstat where name in ('redo size','redo wastage','redo blocks written')
;
2 /
VALUE NAME
---------- ----------------------------------------------------------------
5065308 redo size
294736 redo wastage
10814 redo blocks written
其中的redo size是redo資訊大小,redo wastage是浪費redo大小,redo blocks written是lgwr寫出的redo block數量
SQL> select ceil(16+(5065308+294736)/10814) from dual;
CEIL(16+(5065308+294736)/10814
------------------------------
512
日誌檔案頭還佔用了16bytes
Log size可以從oracle內部資料字典獲得x$kccle
SQL> Select max(lebsz) from x$kccle;
MAX(LEBSZ)
----------
512
Linux還提供了dbfsize工具用於檢測block size大小
[oracle@localhost ~]$ dbfsize /opt/oracle/oradata/orcl/redo01.log
Database file: /opt/oracle/oradata/orcl/redo01.log
Database file type: file system
Database file size: 102400 512 byte blocks
[oracle@localhost ~]$ dbfsize /opt/oracle/oradata/orcl/system01.dbf
Database file: /opt/oracle/oradata/orcl/system01.dbf
Database file type: file system
Database file size: 61440 8192 byte blocks
可以看出日誌檔案block size是512bytes,而資料檔案的block size是8192bytes。此時我們還可以dump日誌檔案看看。
alter system dump logfile 'e:oracleproduct10.2.0oradatatestredo01.log';
獲取trace檔案的指令碼
select a.value||''||b.instance||'_ora_'||c.spid trace_name from
(select value from v$parameter a where a.name='background_dump_dest')a,
(select instance from v$thread)b,
(select spid from v$process x,v$session y,v$mystat z
where x.addr=y.paddr and y.sid=z.sid and z.statistic#=1)c
trace_name
E:ORACLEPRODUCT10.2.0ADMINTESTBDUMPtest_ora_5660
擷取redo的部分dump資訊
DUMP OF REDO FROM FILE 'e:oracleproduct10.2.0oradatatestredo01.log'
Opcodes *.*
RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
Times: creation thru eternity
FILE HEADER:
Compatibility Vsn = 169869568=0xa200100
Db ID=2059826143=0x7ac673df, Db Name='TEST'
Activation ID=2060847682=0x7ad60a42
Control Seq=8665=0x21d9, File size=102400=0x19000
File Number=1, Blksiz=512, File Type=2 LOG
descrip:"Thread 0001, Seq# 0000000139, SCN 0x0000005dac24-0xffffffffffff"
可以看出塊頭中記載了blksiz=512。
以上對redo block size的分析思路均來自於eygle深入淺出書中記載。旨在加深對oracle的理解和探討思路。
這裡簡單說下熱備期間的redo產生量,前篇blog中說到可以利用v$mystat和v$statname檢視來計算sql語句執行過程中產生的redo。
熱備期間的redo
可以比較下在熱備期間與平常sql語句產生的redo量,由於利用os的cp命令熱備資料檔案,在複製過程中以作業系統所在的block來複製,可能該資料檔案會有寫入過程,導致複製的檔案的database block中有部分os block來自寫入前,另一部分os block來自寫入後,此時就出現了所謂的分類塊split block,所以熱備期間oracle會在redo中額外記錄變化的資料塊的前映象,用於以後覆蓋備份的block完成恢復。當然對於os block和database block大小完全一致則可以省略redo記錄變化資料塊的前映象過程(不過很少見),oracle利用隱含引數_log_blocks_during_backup控制redo是否記錄,預設為true記錄,false不記錄。不過利用rman備份可以透過反覆讀取獲得一致的block從而避免split block生成。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1056906/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入淺出-redo和undo記載01
- 深入淺出redo和undo記載03
- 深入淺出undo記載02
- 深入淺出undo記載01
- 深入淺出undo記載03
- 深入淺出cache buffer和shared pool記載02
- 深入理解MYSQL undo redoMySql
- 深入淺出sga和pga章節記載-01
- 深入淺出等待事件和效能診斷記載03事件
- 深入淺出buffer cache和shared pool記載01
- 深入淺出buffer cache和shared pool記載03
- Redo 和 Undo 概念解析
- undo log和redo log
- oracle的redo和undoOracle
- 深入理解MySQL系列之redo log、undo log和binlogMySql
- redo和undo的區別
- oracle redo和undo系列一Oracle Redo
- 深入淺出負載均衡負載
- 淺析MySQL事務中的redo與undoMySql
- Oracle Redo and UndoOracle Redo
- 【REDO】Oracle redo undo 學習Oracle Redo
- 深入淺出等待事件和效能診斷02事件
- SQLServer的檢查點、redo和undoSQLServer
- MySQL中的redo log和undo logMySql
- MySQL Undo Log和Redo Log介紹MySql
- Oracle的redo 和undo的區別Oracle
- 深入淺出React和ReduxReactRedux
- UNDO REDO 區別
- 深入淺出FE(十四)深入淺出websocketWeb
- 關於Oracle的redo和undo的理解Oracle
- 深入淺出大端和小端
- 評侯捷的《深入淺出MFC》和李久進的《MFC深入淺出》
- 深入淺出記憶體馬(一)記憶體
- 深入淺出Java記憶體模型Java記憶體模型
- 深入淺出node讀書筆記筆記
- 《深入淺出MySQL》讀書筆記MySql筆記
- MySQL 日誌 undo | redoMySql
- 深入淺出:5G和HTTPHTTP