下圖這個就是lgwr程序了~
1.1 commit語句
1.2 每隔3秒
1.3 log buffer裡面有大於1mb的資料未寫入日誌檔案
1.4 log buffer裡面有大於3分1的資料未寫入日誌檔案.
1.5 dbwr需要寫入資料的scn大於lgwr記錄的scn, 就觸發lgwr寫入.
1 - 4點之前都提過啦,也很容易理解.
現在重點說下第5點:
oracle 有1個機制, 就是在寫入髒buffer到dbf檔案之前, 會保證把對應的日誌先寫入日誌檔案, 也就說,修改日誌總是會比源資料先寫入磁碟, 這就是write log header 機制.
所以假如dbwr某個時刻需要將buffer cache中若干個髒buffer寫入dbf檔案, 但是對應這些buffer的日誌還存在於log buffer時, 就會觸發lgwr先把log buffer裡的資料寫入log files.
2. log優化建議
在oltp系統(要求實時相應度高)上, redo log的寫操作主要是小型的, 序列的, 而且很頻繁. 一般每次寫操作的大小只有幾kb, 而每秒產生的寫io次數幾十次以上, 甚至達千餘次. 所以redo log 檔案適合放在那些ipos(每秒io次數)高的磁碟上. ipos僅僅達數百次的sata 硬碟並不合適存放redo log files. 另外由於redo log的寫操作是序列的, 所以對磁碟底層做條代化處理, 提公升十分有限.
也就是redo log的寫操作有3個特點
1) 每次寫操作的大小很小, 一般只有幾k
2) 寫操作很頻繁. 每秒寫操作次數很高.
3) 寫操作是序列的, 幾乎不用尋道時間.
所以redo log檔案十分適合放在固態硬碟上(ssd), 容量不必太大, 因為歸檔後的檔案可以放在其他硬碟.
而又因為寫操作是序列的, 所以raid 5 raid 6 對redo log的寫操作無任何意義, 但是raid 01 和 raid 10 還是ok的.
3. logbuffer大小設定
在9i及之前的版本, log buffer的大小一般設為3 mb.
10g 開始, oracle開始自動管理log buffer 的大小, 但是有個規則, 就是令 "fixed sga size" + "redo buffers"的大小約等於 "granule size"大小的整數倍.
可以用下圖sql語句來檢視上面3個引數的大小.
其中granule在oracle裡面被成為粒度, 上圖中粒度的大小就約為4mb了, 那麼假如當前的sga大小是160mb, 如果使用者將其設成161mb時, oracle實際上會設為164mb. sga size必須是粒度大小的4倍啊.
而redo buffers就是 redo log buffer的大小啦, 上圖的值約為7mb, 加上 fixed sga size的大小約等於granule size的倍數啦~
4. logfiles的大概結構.
一般來講日誌檔案並不是乙個大的檔案, 而是分成3組(oracle預設) 如下圖
lgwr 將資料從redo log buffer 寫入 logfiles 時, 首先會寫第一組, 第一組寫滿後,會寫第2組, 寫滿的那一組會移除去歸檔(壓縮備份). 不斷迴圈.
所以實際上, 裝載log files的固態硬碟大小足夠存放這個3組log files就ok了.,
可以用如下語句來檢視當前資料庫有log files分成多陣列:
select * from v$log
可以見到上圖, 第3組的狀態是current, 也就是說lgwr正在往這組log files寫資料了.
接下來觀察members 這個字段, 他們的值都是1, 也就是指這3個組都只有1個成員(日誌檔案)了.
可以從v$logfile 中檢視對應的成員(具體日誌檔案):
如上圖 見到,日誌檔案的實體地址了.
而且在group# 這個字段說明了它們分別是屬於哪1個日誌組.
而實際上1個日誌組是可以存有2個成員(兩個日誌檔案的), 那麼這2個存在於同1個group的日誌檔案就是互相備份的關係了.
之所以需要備份, 是因為對於資料庫來講, redo log日誌相當重要, 甚至比dbf檔案還重要, dbf檔案可以丟失, 但redo log檔案丟失了就嚴重了. 所以生產中一般對每1個group設定兩個成員, 分別存放與不同的磁碟當中, 就算其中1個磁碟掛了, redo log還可以從另1個磁碟中找回來.
5.redo log的一些配置
在生產中作為1個dba有時候會需要執行下面命令來修改日誌配置:
1. 增加1個日誌組
alter database add logfile group5 '/opt/oracle/oradata/dbtest/redo05_1.log'
size10m
2. 向1個日誌組新增1個日誌檔案
alter database add logfile member'/opt/oracle/oradata/dbtest/redo04_3.log'to group4
3. 刪除1個日誌組
alter database drop logfile group5
4. 刪除1個組裡面的日誌檔案:
alter database drop logfile('/opt/oracle/oradata/dbtest/redo05_1.log','/opt/oracle/oradata/dbtest/redo05_2.log')
如果你需要將1個logfile 轉移到另1個磁碟, 那麼可以執行第4條語句把這個logfile刪除, 然後執行第2條語句新建1個logifle. 路徑指向另1個磁碟就ok了.
6. redo log 切換的時間應該盡可能的不低於10-20 分鐘(first_time,'yyyy-mm-dd hh24:mi:ss') f_time,sequence#
fromv$log_history
如下圖:
每兩個first_time 的差就是切換時間啦.
mysql zimbra Zimbra 相關設定
zimbra 相關的一些設定,不定期更新。zmprov mcf zimbraskinlogourl zmprov md exsvc.cn zimbraskinlogourl zmprov md exsvc.cn zimbraskinlogologinbanner logos loginbanner....
pycharm與anaconda的相關設定問題
pycharm軟體可在網上找到,按照分享的可較為容易的實現安裝。上述過程執行後開啟pycharm建立乙個新專案,需要注意直譯器應選 exists interpre 再選上annacond下的python.exe路徑,進入主頁面可在file選項卡下選中settings檢視環境配置和該直譯器下已安裝的包...
畢設相關元件模組函式
void delay1ms unsigned int y 延時1ms,延時多少就傳多少 unsigned char ds18b20init c return1 初始化成功 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img wkk2ihzx 1582043230885 image 2...