• 1. Oracle数据库性能优化实务 第7-8讲:REDO和CHECKPOINT (2课时)主讲人:白鳝华章培训网、[www.hztraining.com]华章培训网版权所有
  • 2. Oracle的REDO LOGInstanceSGAShared poolRedo log bufferARCHDatabase buffer cacheControl filesRedo log filesData files CKPTLGWRDBW0Database
  • 3. REDO LOG的作用记录ORACLE数据库的变化 实例恢复和故障恢复时使用 可以避免数据提交后直接写入文件 使用归档日志可以做介质恢复
  • 4. REDO LOG的块大小 REDO块大小 操作系统512 字节 Solaris, AIX, Windows NT/2000, Linux, Irix, DG/UX, OpenVMS, NetWare, UnixWare, DYNIX/ptx 1024字节 HP-UX, Tru64 Unix2048字节 SCO Unix, Reliant Unix4096字节 MVS, MPE/ixSELECT MAX(LEBSZ) FROM X$KCCLE;
  • 5. 和REDO LOG性能相关的组件LOG BUFFER LGWR ARCH REDO LOG文件 REDO LOG组 CHECKPOINT
  • 6. LOG BUFFER记录实例中的数据库变化 顺序存取 环状的缓冲区 LOG_BUFFER定义了缓冲区的大小SGA
  • 7. LGWRLGWR触发写日志的条件: LGWR休眠3秒钟 事务commit BUFFER写入的数量超过_LOG_IO_SIZE,缺省值为LOG BUFFER的1/3 redo log buffer中有超过1M的数据 DBWR写入数据文件之前 误区:LOG BUFFER超过3M无意义InstanceSGAShared poolRedo log bufferControl filesRedo log filesData files LGWRDatabase
  • 8. CHECKPOINT 操作: 通知DBWR发生了检查点 将检查点信息写入数据文件头和控制文件 目的: 确认某个时间点某些修改数据已经被存盘 减少实例恢复的时间 在SHUDOWN的时候确保提交过的事务都已经被存盘 InstanceSGAShared poolRedo log bufferDatabase buffer cacheControl filesRedo log filesData files CKPTLGWR132DBW0Database
  • 9. DML语句的执行User processUPDATE emp ...Control filesRedo log filesData filesDatabaseInstanceSGA Shared poolData buffer cacheRedo log bufferServer process11234
  • 10. COMMITShared poolRedo log bufferControl filesRedo log filesData filesDatabaseUser processDatabase buffer cacheSGAInstanceLGWRServer process1234
  • 11. REDO LOG组Oracle循环使用REDO LOG组 REDO LOG组的数量对数据库的影响 日志切换等待 系统由于等待日志切换而HANG住 REDO LOG组的数量 缺省2组 根据实际需要设置 增加日志组的数量对数据库性能无直接影响 可在线添加日志组
  • 12. REDO LOG的镜像REDO LOG镜像的主要目的是加强REDO LOG的安全性 镜像设置的原则 同一个数据库中设置镜像的规则应该一致 多个镜像文件应该存放在不同的VG或者文件系统上 不同镜像最好能够分布在不同的磁盘上 镜像的数量以一个为宜 镜像对数据库性能的影响 REDO LOG镜像会消耗较多的IO资源 IO性能不佳的系统慎用 小型写性能不佳的系统慎用
  • 13. 日志切换的场景当前日志文件满后 使用ALTER SYSTEM SWITCH LOGFILE命令可以强制性当前的实例产生日志切换。 使用ALTER SYSTEM ARCHIVE LOG CURRENT命令会使所有的实例切换所有的当前日志 在Oracle OPS/RAC环境下,当某个INSTANCE比较忙,而另外一个比较空闲的情况下,可能发生强制的日志切换 如果当前日志文件的low scn在force SCN后出现故障,也会在出故障的那个thread产生一个强制性的日志切换
  • 14. 日志切换的过程进行一次控制文件事务,选择下一个日志文件,并清除控制文件中的相关记录。如果DBW进程正在进行日志切换检查点,或者ARCHn进程正在归档日志内容,那么LGWR会等待这些操作完成才进行日志切换工作 把当前没有存盘的所有LOG BUFFER都写入磁盘,然后把最后一个REDO记录的SCN写入LOG文件的头块中。完成这些操作后,LGWR关闭当前的日志文件 进行第二次控制文件事务,把下一个日志文件的状态设置为当前,老的日志文件修改为ACTIVE。当DBW完成日志切换检查点操作后,这个日志文件的状态会被改为INACTIVE。如果系统处于归档模式,LGWR会在控制文件的归档日志列表中记录这个日志。如果设置为自动归档模式,LGWR会通知ARCN去完成日志归档。从8i开始,如果所有的ARCN都忙,并且ARC进程的总数还没有达到log_archive_max_processes参数的限制,LGWR会自动生成一个ARCN的子进程。 打开新日志文件的所有成员(如果组中有超过1个成员),并在文件头中写入一个新的日志序列号和low SCN。然后修改SGA控制变量,允许生成REDO信息。要注意的是,因为写入文件头的信息包括文件编号,因此写文件头的操作不是并行操作,对于同组的不同成员,写入的数据不是完全一致的
  • 15. REDO LOG文件的大小与日志切换日志切换是日志文件写满后切换到另外一个文件的过程 日志切换对系统性能的影响 日志文件切换时,系统将处于完全的等待状态 日志文件切换过于频繁,会影响系统的性能 日志文件切换时间过长,会严重影响系统的性能 日志切换与日志文件的大小 日志文件越小,日志切换越频繁 日志文件越大,每个日志文件中包含的变化越多 日志文件切换以10-30分钟为宜 日志文件大小一般在100M-2000M之间
  • 16. 课间休息感谢您对华章培训网的支持!http://www. hztraining.com欢迎到Oraclefans网交流技术http://www. oraclefans.cn
  • 17. REDO LOG相关的指标Statistic Total per Second per Trans -------------------------------- ------------------ -------------- ------------- redo blocks written 9,505,503 2,674.8 19.5 redo buffer allocation retries 24 0.0 0.0 redo entries 9,812,975 2,761.3 20.2 redo log space requests 37 0.0 0.0 redo log space wait time 189 0.1 0.0 redo ordering marks 297,110 83.6 0.6 redo size 4,599,356,544 1,294,233.5 9,448.2 redo subscn max counts 446,772 125.7 0.9 redo synch time 871,577 245.3 1.8 redo synch writes 558,554 157.2 1.2 redo wastage 111,338,496 31,330.0 228.7 redo write time 84,818 23.9 0.2 redo writer latching time 6 0.0 0.0 redo writes 441,511 124.2 0.9
  • 18. REDO LOG相关的闩锁 Pct Avg Wait Pct Get Get Slps Time NoWait NoWait Latch Name Requests Miss /Miss (s) Requests Miss ------------------------ -------------- ------ ------ ------ ------------ ------ lgwr LWN SCN 442,159 0.1 0.0 0 0 N/A redo allocation 2,743,872 0.1 0.0 0 9,804,499 0.2 redo copy 0 N/A N/A 0 9,810,340 0.1 redo writing 1,455,419 0.0 0.0 0 0 N/A
  • 19. 日志文件切换的建议10-30分钟不是一个铁的规定 10-20秒钟切换一个日志并不一定说明系统必须优化 只要不出现明显的日志文件切换相关等待 下面情况不宜设置过大的日志文件 通过流复制等Logminer技术做准实时数据复制的系统 通过DATAGUARD做容灾的系统 在无法设置较大日志文件情况下的应对措施 增加日志组的数量 减少日志的产生量
  • 20. REDO LOG文件优化建议设置合理的REDO LOG文件大小 文件存放于小型写IO性能较好的磁盘 确保REDO LOG写的性能 后台进程的log file parallel write 在性能和安全之间做好平衡 确保足够数量的REDO LOG组
  • 21. 减少日志量合理使用NOLOGGING操作 direct path load INSERT /*+ APPEND */ CTAS Create index REBUILD INDEX ... 使用临时表替代常规表
  • 22. 优化LOG BUFFERLOG BUFFER不足的表现 REDO NOWAIT小于100% redo log space wait time较大 redo allocation,redo copy、redo writing等闩锁等待较为严重 log file sync的等待时间偏大 LOB BUFFER的设置 一般情况下使用缺省配置就足够了 REDO量较大的系统可能需要30-40M,甚至更高 著名的“3M误区”
  • 23. LOG FILE SYNC等待日志缓冲写入日志文件 该等待较多说明REDO LOG整个机制中存在问题 如何排查和解决 如果同时Redo log space requests较大,需要加大LOG_BUFFER 如果log file parallel write指标较差,需要优化REDO LOG的IO 应用中大量小事务也是引起该等待事件的主要原因 大量BUG也可能导致类似问题 设置_immediate_commit_propagation=false使用老的SCN传播模式(RAC)
  • 24. LOG FILE SYNC相关的BUGBUG 6193945 RAC环境下,LOG FILE SYNC等待严重,LGWR消耗较多CPU 影响版本:10.2.0.3、10.2.0.4、11.1.0.6 修复:10.2.0.4.1、10.2.0.5、11.1.0.7 临时解决:"_immediate_commit_propagation" = FALSE BUG 5147386 经常伴随ORA-27152 影响版本:10.2.0.3、10.2.0.4 修复:10.2.0.4.1、10.2.0.5、11.1.0.6 BUG 6352003 Bug 5065930 Bug 5061068
  • 25. CHECKPOINT 优化从9I开始CHECKPOINT的优化大大简化了 设置FAST_START_MTTR_TARGET 较大的值:恢复时间较长 较小的值:增加IO负载 10g 的CHECKPOINT的自动优化 fast_start_mttr_target设置为非零的值或者不设置
  • 26. 应用对REDO LOG性能的影响过于频繁的提交对于REDO LOG性能影响较大 加大提交批次的记录量 频繁插入的表采用批处理插入方式 使用BULK DML操作 从应用架构上考虑 尽可能使用REDO LOG产生量较小的语句
  • 27. 10g新特性之REDO LOG建议Group 2Group 3Group 1MemberMemberMemberMemberMemberMemberFAST_START_MTTR_TARGETOptimal log file sizeAdjust log file sizeOnline redo log filesSQL> SELECT optimal_logfile_size 2 FROM v$instance_recovery;Logfile Size Advisor
  • 28. 10G新特性之异步提交缺省情况下 COMMIT 必须等REDO LOG写完成才能成功 10g开始可以使用异步提交模式. 对于特别高提交率的系统十分有效 有效解决LOG FILE SYNC等待 事务可能会丢失: 服务器故障 redo log文件IO故障
  • 29. 如何使用异步提交可能的操作: IMMEDIATE, WAIT IMMEDIATE, NOWAIT BATCH, WAIT BATCH, NOWAIT 系统或者会话级设置: Commit命令:ALTER SYSTEM SET COMMIT_WRITE = IMMEDIATE, WAITALTER SESSION SET COMMIT_WRITE = IMMEDIATE, NOWAITCOMMIT WRITE BATCH WAITCOMMIT WRITE BATCH NOWAIT
  • 30. 常见案例:TRUNCATE的性能问题表现:TRUNCATE十分缓慢,等待RO锁 9i:TRUNCATE机制导致的性能问题 10G:OBJECT QUEUE的引入解决了大对象TRUNCATE缓慢的问题 BUG 7385253可能导致新机制出现故障 "_db_fast_obj_truncate" =FALSE alter system flush buffer_cache
  • 31. 案例分析:写敏感系统优化(1)项目:某移动短信平台 优化目标:提高短信话单的并发插入性能,减少业务高峰期的话单入库延迟
  • 32. 案例分析:写敏感系统优化(2)优化方案 增加LOG BUFFER 加大REDO LOG文件的大小 取消REDO LOG文件镜像 将REDO LOG文件放置到独立的磁盘上
  • 33. 优化前: LOG BUFFER:512k REDO LOG文件:60000K REDO LOG MEMBER:2 优化后: LOG BUFFER:30M REDO LOG文件:1500M REDO LOG MEMBER:1 案例分析:写敏感系统优化(3)
  • 34. 案例分析:写敏感系统优化(4)主要等待事件执行时间对比优化前LOG BUFFER SPACE BUFFER BUSY WAIT LOG SYNC37968 提升56.96%优化后BUFFER BUSY WAITS24189
  • 35. 下节预告:PGA与排序PGA管理的基本原理 排序与PGA管理 PGA手工管理与PGA自动管理 PGA优化的要点
  • 36. 感谢您对华章培训网的支持!http://www. hztraining.com欢迎到Oraclefans网交流技术http://www. oraclefans.cn