log file sync

完全揭秘log file sync等待事件:
http://www.itpub.net/thread-1777234-1-1.html



log file sync(日志文件同步) 与 Log file parallel write 等待事件
https://blog.csdn.net/tianlesoftware/article/details/4916671



SQL> select name, parameter1, parameter2, parameter3 from v$event_name where name like '&event';

Enter value for event: log file sync
old   1: select name, parameter1, parameter2, parameter3 from v$event_name where name like '&event'
new   1: select name, parameter1, parameter2, parameter3 from v$event_name where name like 'log file sync'

NAME                                PARAMETER1                PARAMETER2                PARAMETER3
----------------------------------- ------------------------- ------------------------- -------------------------
log file sync                       buffer#                   sync scn


什么原因造成了很高的’log file sync’等待?
‘log file sync’可以在用户会话通知 LGWR 写日志,和 LGWR 写完日志后通知用户会话,及用户会话被唤醒间的任何一个点发生。


其中的最常见的原因:

    影响 LGWR 的 I/O 性能问题
    过多的应用程序 commit

1.影响 LGWR 的 IO 性能问题
1.1 比较'log file sync'和'log file parallel write'的平均等待时间。
等待事件'log file parallel write'表示 LGWR 正在等待写 redo 操作。该事件的持续时间就是等待 IO 操作部分的时间。

结合事件“log file sync”看同步操作消耗在 IO 的时间,由此推断,有多少处理时间消耗在 CPU 上。


上面的例子显示了'log file sync' 和 'log file parallel write' 都有很高的等待时间

如果'log file sync'的时间消耗在'log file parallel write'上的比例高,那么大部分的等待时间是由于 IO(等待 redo 写入)。应该检查 LGWR 在 IO 方面的性能。作为一个经验法则,'log file parallel write'平均时间超过 20 毫秒, 意味着 IO 子系统有问题。

建议:
    与系统管理员一起检查重做日志所在的文件系统的位置,以提高 IO 性能。
    不要把重做日志放在需要额外计算的RAID上,比如 RAID-5或者RAID-6
    不要把重做日志放在 Solid State Disk (SSD)
    虽然通常情况下,SSD 写入性能好于平均水平,他们可能会遇到写峰值,从而导致大量的增加'log file sync'等待(关于这一点您需要详尽的测试,因为我们也碰到一些SSD的性能可以接受的系统)
    (Engineered Systems (Exadata, SuperCluster 和 Oracle Database Appliance) 除外,因为在这些系统上已经为使用SSD来存放重做日志而做了额外的优化)
    监控其他可能需要写到相同路径的进程,确保该磁盘具有足够的带宽,足以应付所要求的容量。如果不能满足,移动这些进程或 redo。
    确保 LOG_BUFFER 不要太大,一个非常大的 log_buffer 的不利影响就是刷新需要更长的等待时间。当缓冲区满了的时候,它必须将所有数据写入到重做日志文件。LGWR 将一直等待,直到最后的 I/O 完成。

1.2 间歇性物理IO缓慢对 'log file sync' 等待事件的影响

LGWR倾向于做很多小的IO操作,而不是大块的IO操作。大部分的磁盘配置并不能在这种场景下很好的工作,可能会发生间歇性物理IO缓慢。但是从平均等待时间来看,IO等待的时间并不长,磁盘设备提供商据此断定没有磁盘问题。 因为系统里还有其它的IO操作,所有这些正常的IO操作的等待时间很短,所有这些IO操作平均起来的等待时间并不长,这就掩盖了间歇性物理IO缓慢的问题。 但是间歇性物理IO缓慢的问题会造成很高的'log file sync', 虽然平均的'log file parallel write'是处于正常性能的范围

如果你发现系统的'log file sync'很高,但是'log file parallel write'是处于正常的范围,那么这可能是由于间歇性物理IO缓慢导致的。你需要使用一些像OSWatcher一样的工具(参照 Document 301137.1)来确定是否系统中存在间歇性物理IO缓慢。如果可以确定存在间歇性物理IO缓慢, 那么你需要与磁盘提供商一起来解决这个问题。


1.3 检查 LGWR trace:

尽管'log file parallel write'的平均等待时间可能在一个合理的区间范围内,在峰值时刻写操作时间还是可能会很长进而影响’log file sync’的等待时间。从10.2.0.4 开始如果写操作超过 500 毫秒我们会在 LGWR 的 trace 中写警告信息。这个阀值很高所以就算没有警告也不代表没有问题。警告信息如下:

*** 2011-10-26 10:14:41.718
Warning: log write elapsed time 21130ms, size 1KB
(set event 10468 level 4 to disable this warning)

*** 2011-10-26 10:14:42.929
Warning: log write elapsed time 4916ms, size 1KB
(set event 10468 level 4 to disable this warning)


注意:上面的峰值如果时间间隔的很远,可能不会对'log file parallel wait'有大的影响。 但是,如果有 100 个会话等待'log file parallel wait'完成,'log file sync'总等待可能就会很高,因为等待时间将被乘以会话的个数 100。因此,值得探讨日志写 IO 高峰的原因。


建议:
    与系统管理员一起检查其他正在发生的可能会导致 LGWR 写磁盘峰值的操作
    当 LGWR 进程慢的时候,对其进行 Truss 操作会帮助确定时间消耗在什么地方

1.4 检查在线重做日志是否足够大

每次重做日志切换到下一个日志时,会执行'log file sync'操作,以确保下一个日志开始之前信息都写完。 标准建议是日志切换最多 15 至 20 分钟一次。 如果切换比这更频繁,那么将发生更多的'log file sync'操作,意味着更多的会话等待。

    检查 alert.log 日志文件切换的时间

    Thu Jun 02 14:57:01 2011
    Thread 1 advanced to log sequence 2501 (LGWR switch)
    Current log# 5 seq# 2501 mem# 0: /opt/oracle/oradata/orcl/redo05a.log
    Current log# 5 seq# 2501 mem# 1: /opt/oracle/logs/orcl/redo05b.log
    Thu Nov 03 14:59:12 2011
    Thread 1 advanced to log sequence 2502 (LGWR switch)
    Current log# 6 seq# 2502 mem# 0: /opt/oracle/oradata/orcl/redo06a.log
    Current log# 6 seq# 2502 mem# 1: /opt/oracle/logs/orcl/redo06b.log
    Thu Nov 03 15:03:01 2011
    Thread 1 advanced to log sequence 2503 (LGWR switch)
    Current log# 4 seq# 2503 mem# 0: /opt/oracle/oradata/orcl/redo04a.log
    Current log# 4 seq# 2503 mem# 1: /opt/oracle/logs/orcl/redo04b.log

    在上面的例子中,我们看到每 2 到 4 分钟进行日志切换,这比建议值的5倍还高。
   
您也可以检查 AWR 报告日志切换的平均时间 :

    在上面的例子中基于 AWR 中的信息,每小时有 29.98 次重做日志切换:每 2 分钟切换一次。这个比每 15-20 分钟切换一次的建议值要高,并将影响前台进程需要等待'log file sync'完成的时间,因为发起同步操作的开销比必要的多。

建议:
         增加redo logs的大小

2. 应用程序提交过多
在这种情况下,要回答的问题是“是否应用程序 commit 过于频繁? ”。
如果是,那么过多的 commit 活动可能会导致性能问题,因为把 redo 从日志缓冲区刷新到重做日志可能会导致等待'log file sync'。

如果’log file sync’的平均等待时间比’log file parallel write’高很多,这意味着大部分时间等待不是由于等待 redo 的写入,因而问题的原因不是 IO 慢导致。 剩余时间是 CPU 活动,而且是过多的 commit 导致的最常见的竞争。

此外,如果'log file sync'的平均等待时间低,但等待次数高,那么应用程序可能 commit 过于频繁。

比较 user commit/rollback 同 user calls 比值的平均值

在 AWR 或 Statspack 报告中,如果每次 commit/rollback 的平均 user calls("user calls/(user commits+user rollbacks)") 小于 30, 表明 commit 过于频繁


在上面的例子中,我们看到,平均每 5.76 次 user calls 就会有一次 commit, 大约高出建议值 5 倍。基于经验,我们期望 user calls/user commit 至少是 25。当然,这取决于应用程序。

建议:
    如果有很多短事务,看是否可能把这些事务组合在一起,从而减少 commit 操作。 因为每一个 commit 都必须收到相关 REDO 已写到磁盘上的确认,额外的 commit 会显著的增加开销。虽然 Oracle 可以将某些 commit 组合在一起,通过事务的批处理来减少commit的总体数量还是可以带来非常有益的效果。
    看看是否有操作可以使用 COMMIT NOWAIT 选项 (务必在使用前应明白语义)。
    看看是否有操作可以安全地使用 NOLOGGING/ UNRECOVERABLE 选项完成。

3.其他可能相关的等待事件

检查 AWR 报告,看是否有跟 LGWR 相关的,显示占用了显著数量时间的其他事件,因为这可能会给出导致这个问题的一个线索。前台和后台事件都应该进行检查。

例如下面的 AWR 显示某些其他前台和后台等待事件等待高,意味着传输重做日志到远程位置的问题,这可能会导致 fore gorund 进程等待"log file sync"。


参考mos:Troubleshooting: 'Log file sync' Waits (文档 ID 1376916.1)

总结:
引起log file sync等待事件的原因有以下几种:
 事务过度的提交,即应用程序过度commit或者rollback。
 存储I/O资源紧张,导致lgwr进程写速度缓慢。
 CPU资源紧张,lgwr进程获得不了响应的CPU时间片。
 RAC节点之间SCN同步。
 RAC节点之间CR块传递。
 控制文件争用。

log file sync等待事件的优化方案:
(1)优化了redo日志的I/O性能,尽量使用快速磁盘,不要把redo log file存放在raid 5的磁盘上; RAID 5--->RAID 1+0
(2)加大日志缓冲区(log buffer);
(3)使用批量提交,减少提交的次数;
(4)部分经常提交的事务设置为异步提交;ALTER SESSION SET COMMIT_WRITE = NOWAIT;
(5)适当使用NOLOGGING/UNRECOVERABLE等选项;
(6)采用专用网络,正确设置网络UDP buffer参数;
(7)安装最新的数据库版本避免bug;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31397003/viewspace-2149815/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31397003/viewspace-2149815/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值