说明
检查点系列相关文章地址:
Oracle检查点(一)检查点(Checkpoint)概念介绍: http://blog.itpub.net/69992972/viewspace-2787595/
Oracle检查点(二)检查点性能: http://blog.itpub.net/69992972/viewspace-2787789/
Oracle检查点(三)增量检查点四个关键参数介绍: http://blog.itpub.net/69992972/viewspace-2787943/
Oracle检查点(四)检查点对redo日志的影响和redo日志大小设置建议: http://blog.itpub.net/69992972/viewspace-2788206/
Oracle检查点(五)创建并利用Statspack定位检查点故障: http://blog.itpub.net/69992972/viewspace-2788418/
检查点和redo日志的关系
每次切换日志时都会发生一次检查点。如果上一个检查点已在进行中,由日志切换引起的检查点将覆盖当前检查点。
此时就需要大小合适的 redo 日志,以避免因频繁的日志切换而引起不必要的检查点。另外, 增量检查点目标和日志尾之间的间隔也会受“最小在线日志文件大小的 90%”设置所限制。这样做的目的是可确保在大多数情况下,日志切换不必等待检查点。因此,日志文件大小应配置得够大才行(但不能太大,至于设置多大,下文有建议)。 日志文件过小会增加检查点活动并降低性能 。Oracle官方也建议用户将所有在线日志文件设置为同一大小,且每个线程至少拥有两个日志组。若要监视日志切换发生的速度,以及随后的检查点产生的速度,可以查看alert日志。
redo日志大小设置建议
先看一个alert日志中日志切换的例子后再予以说明:
Fri Aug 6 12:16:57 2021
Thread 1 advanced to log sequence 1661
Current log# 1 seq# 1661 mem# 0: /oracle/oradata/redo01.log
Thread 1 advanced to log sequence 1662
Current log# 2 seq# 1662 mem# 0: /oracle/oradata/redo02.log
Fri Aug 6 12:18:21 2021
Thread 1 advanced to log sequence 1663
Current log# 3 seq# 1663 mem# 0: /oracle/oradata/redo03.log
Thread 1 advanced to log sequence 1664
Current log# 1 seq# 1664 mem# 0: /oracle/oradata/redo01.log
Fri Aug 6 12:21:17 2021
Thread 1 advanced to log sequence 1665
Current log# 2 seq# 1665 mem# 0: /oracle/oradata/redo02.log
以上不难看出,redo日志每2-3分钟切换一次,日志切换过于频繁了,说明redo日志的大小太小了。日志如果 redo 日志每 3 分钟切换一次,就能感觉到数据库的性能降低了。这表明 redo 日志不够大,不能有效地处理该事务负载。因此可以得出结论: 过于频繁的检查点和日志文件切换问题会影响数据库性能!
那么如何设置合适的redo日志大小呢?
根据官方建议和本人工作经验,重做日志切换应该大约每 20-30 分钟左右产生一次最为合适。如果它们切换太频繁,可以通过 V$LOG 检查当前重做日志文件的大小,并根据平均切换频率,重新创建更大的重做日志组,然后用“ALTER SYSTEM SWITCH LOGFILE;” 切换redo日志几次,使得当前重做日志是刚创建较大的重做日志文件之一( 要确保之前小的redo日志是“INACTIVE”状态),最后使用“ALTER DATABASE DROP LOGFILE XXX ;”命令删除较小的重做日志组。
另外,将重做日志文件分布在多个物理磁盘上,也可以提高日志切换期间的性能。
补充说明:
如果等待日志文件切换完成,还需要添加一个或多个重做日志组来解决 Statspack 报告中的相关等待事件。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69992972/viewspace-2788206/ ,如需转载,请注明出处,否则将追究法律责任。