简介
本文主要讨论 RAC 数据库中的'log file sync'等待事件。RAC 数据库中的'log file sync'等待事件要比单机数据库中的'log file sync'等待事件复杂,主要原因是由于RAC 数据库需要将SCN同步到所有实例。
首先,回顾一下单机数据库中的'log file sync'等待事件,当user session 提交(commit)时,user session会通知LGWR进程将redo buffer中的信息写入到redo log file,当LGWR进程完成写操作后,LGWR再post(通知)user session 写操作已经完成,user session 接收到LGWR的通知后提交操作才完成。因此user session 在没有收到LGWR post(通知)之前一致处于等待状态,具体的等待事件为'log file sync'。
在RAC数据库中为了一致性读,需要将Commit SCN同步/传播到所有的节点上。SCN同步/传播的主要方法有两种:Lamport SCN 和 immediate commit propagation (BOC)。
介绍 immediate commit propagation (BOC)的工作原理
5. LGWR 在完成了IO 操作和LMS进程通知后,LGWR通知user session commit 成功。user session在没有收到LGWR通知前,一直处于等待log file sync。
1. AWR
例如:AWR中log file sync 的等待时间与log file parallel write的时间基本相同,因此是由于IO问题导致的log file sync.
例如:LGWR trace文件中报出下面的信息,很有可能是IO慢导致的。
Warning: log write time 1000ms, size 2KB
3. OSWatcher <--- 可以帮助我们确认服务器CPU资源使用情况
例如:下面的是OSW中vmstat 的输出,其中runQ中的进程达到48个,表明当时CPU资源是非常紧张的,会导致LMS/LGWR不能获得CPU 调度,导致Log file sync等待。
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
48 22 0 23877753 30244459 0 0 0 0 0 0 0 153454 2184632 114234 38 60 2
48 22 0 23877753 30244094 0 0 0 0 0 0 0 153694 2181493 114887 36 61 3
注:关于OSW的安装配置请参考BLOG中的文章:
4. Alert log
5. Script to Collect Log File Sync Diagnostic Information (lfsdiag.sql) [Document 1064487.1]
WAITEVENT: "log file sync" Reference Note (Doc ID 34592.1)
或者
http://realworld.us.oracle.com/twiki/bin/view/RealWorld/LogFileSync