重做日志包含可能尚未寫入數(shù)據(jù)文件的事務(wù)的詳細信息。 重做日志的主要目的在于系統(tǒng)或數(shù)據(jù)庫發(fā)生故障時恢復數(shù)據(jù)庫。
重做日志配置
提交事務(wù)時,必須出現(xiàn)重做日志文件的物理寫入。 必須完成寫入,提交調(diào)用才能將控制返回給用戶。 因此,重做日志寫入可以提供更新密集型應(yīng)用程序吞吐量的限制。
如果日志位于專用設(shè)備上且設(shè)備不存在爭用,則優(yōu)化重做日志 I/O。 如果達到上述目標,則發(fā)布提交時磁頭已處于正確的位置,并且等待時間減少到最低(磁盤無需查找)。
由于日志寫入是按順序進行的并且僅由歸檔進程執(zhí)行,分段優(yōu)勢就不明顯了。 由于 LGWR 只寫入這些設(shè)備,RAID 5 導致的性能降級很可能是非常明顯的,即使該卷專用于重做日志(由于歸檔進程進程存在爭用)。
為了預(yù)防在介質(zhì)故障時發(fā)生數(shù)據(jù)丟失,必須鏡像重做日志。 Oracle 提供軟件鏡像功能(重做日志多路復用),盡管硬件鏡像 (RAID 1) 很可能更有效。
由于重做日志的切換生成數(shù)據(jù)庫檢查點,并且由于未完成檢查點前無法重用日志,因此大量的大日志可產(chǎn)生更好的吞吐量。 通過增加日志的數(shù)量,可以降低完成檢查點前需要重用日志的概率。 通過增加日志的大小,可以減少必須出現(xiàn)的檢查點數(shù)量。
重做日志的優(yōu)化尺寸取決于您的事務(wù)比率。 您應(yīng)設(shè)置日志大小,以免切換發(fā)生速度過快。 由于通常情況下您會分配重做日志的專用設(shè)備,因此有較大的磁盤容量可供日志使用。 通常最簡單的辦法是,剛開始就過度配置日志的大小和數(shù)量。 常見的日志大小為 64 至 256 MB。 配置 10 到 20 個重做日志也是比較常見的情況。
優(yōu)化存檔
存檔日志是在線重做日志的副本。 它們可用于將數(shù)據(jù)庫恢復到故障點,或還原備份后的另一個時間點。 如果需要進行在線備份,還需要記錄存檔。
填寫重做日志文件后,Oracle 移動到下一個日志文件。 歸檔進程 (ARCH) 將最近填寫的日志復制到備用位置。 如果歸檔進程從和當前寫入日志相同的物理設(shè)備上讀取日志,則日志編寫器的隨后寫入都會中斷。 如果日志編寫器落后太多,數(shù)據(jù)庫可能停止運行(因為存檔前無法重用日志文件)。
因此,需要優(yōu)化歸檔進程的性能。 可以通過在超過兩臺設(shè)備上交替使用重做日志,最大程度減少歸檔進程和日志編寫器之間的爭用。 然后,重做日志寫進程可以寫入一臺設(shè)備,而歸檔進程從另一臺設(shè)備讀取。 由于歸檔進程寫入的速度必須至少和日志編寫器一樣快,因此存檔目標應(yīng)為一臺專用設(shè)備,或 RAID 0+1(鏡像和條帶化)配置中的一組專用磁盤。
日志文件等待事件
正如 Oracle 會話必須等待數(shù)據(jù)庫文件 I/O 一樣,它們還必須等待日志文件 I/O。 COMMIT 語句導致寫入重做日志時,出現(xiàn)上述等待。 發(fā)布 COMMIT 的會話等待日志文件同步事件。 日志編寫器發(fā)布 I/O 請求時,等待日志文件并行寫入事件。
在狀況良好的數(shù)據(jù)庫中,等待事件是不可避免的,通常占非空閑等待總時間的 10-20%。
日志文件并行寫入的平均等待時間是重要的衡量指標, 它指明了歸檔進程刷新恢復緩沖區(qū)的速度。 它是衡量重做日志設(shè)備效率的有效指標。 如果數(shù)值低于百分之一秒,則表示良好;如果數(shù)值高達百分之五秒,則不正常。 如果數(shù)值超過此范圍,則表示重做日志設(shè)備存在爭用。