log file switch

今天接到一資料庫運行非常緩慢﹐登陸到主機查看alert log,發現有"Thread 1 cannot allocate new log, sequence 69271"諸多錯誤提示﹐管理員告知是standby 架構﹐首先懷疑是standby服務有問題﹐先取消遠程歸檔路徑﹐做日志切換﹐發現報錯"checkpoint not complete"﹐再進一步追蹤alert log﹐發現之前也出現了類似錯誤﹐這是發現日志切換比平時頻繁很多﹐查看日志有回退動作﹐其會寫較多的redo﹐懷疑日志切換頻繁導致archive無法正常完成﹐第二步驟﹐重啟數據庫為noarchivelog模式﹐發現問題依然。第三步驟﹐增大logfile從200M到400M﹐調整mttr從300至3600﹐問題依舊。第四步驟﹐增大dbwr進程數由一改為二﹐啟用archivelog模式﹐數據庫ok。

我想問題的原因在于﹕回退事務造成redo條目寫的過于頻繁﹐在發生checkpoing時﹐上一次checkpoing尚沒有完成﹐dbwr寫不過來﹐從wait event(log file switch (checkpoing incomplete))即可得出。

Log File Switch-日志文件切换

当这个等待出现时,表示所有的提交(commit)的请求都需要等待"日志文件切换"的完成。

LogfileSwitch主要包含两个子事件:

logfileswitch(archiving needed)
logfileswitch(checkpointincomplete)

logfileswitch(archiving needed)

这个等待事件出现时通常是因为日志组循环写满以后,第一个日志归档尚未完成,出现该等待。出现该等待,可能表示io 存在问题。解决办法:

可以考虑增大日志文件和增加日志组
移动归档文件到快速磁盘
调整log_archive_max_processes .

logfileswitch(checkpointincomplete)-日志切换(检查点未完成)

当你的日志组都写完以后,LGWR 试图写第一个logfile,如果这时数据库没有完成写出记录在第一个logfile中的dirty 块时(例如第一个检查点未完成),该等待事件出现。

该等待事件通常表示你的DBWR 写出速度太慢或者IO 存在问题。

为解决该问题,你可能需要考虑增加额外的DBWR 或者增加你的日志组或日志文件大小。


 

你可能感兴趣的:(switch)