我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

揭秘Oracle重做日志:为什么它如此重要?

重做日志是什么?

想象一下你在玩一个电脑游戏,每次你获得新装备或升级角色时,游戏都会自动保存进度。Oracle数据库的重做日志(redo log)就像这个"自动保存"功能,它记录数据库发生的所有变化。这样万一电脑突然死机,数据库也能恢复到崩溃前的状态。

重做日志的工作原理

当你在数据库中修改数据时:

  1. 数据库会先记录这些改动到内存的"日志缓冲区"
  2. 然后由专门的LGWR进程把这些记录写入磁盘的在线重做日志文件
  3. 如果开启了归档模式,填满的在线日志还会被复制为归档日志

这就好比你在写日记:

  • 先写在便签纸上(日志缓冲区)
  • 然后誊写到正式日记本(在线重做日志)
  • 最后把写满的日记本拍照存档(归档日志)

为什么重做日志会成为瓶颈?

所有数据库操作最终都要通过LGWR进程来记录重做日志并提交事务。这就像超市只有一个收银台,所有顾客都要排队结账。如果交易量很大:

  • 收银员(LGWR)会非常忙碌
  • 负责打包的店员(归档进程)也要处理更多工作
  • 整个超市(数据库)的运转速度就会变慢

如何减少重做日志的影响?

开发人员可以通过两种方式优化:

  1. 直接路径插入:比常规插入减少99%的重做日志量
  • 常规插入100万行:生成113MB日志
  • 直接路径插入100万行:仅生成220KB日志
  1. NOLOGGING模式:特定操作不记录详细日志
  • 创建表时使用NOLOGGING:日志从4MB减少到90KB
  • 重建索引时使用NOLOGGING:日志从600KB减少到39KB

使用NOLOGGING的注意事项

虽然NOLOGGING能大幅提升性能,但就像"走捷径"一样需要谨慎:

  1. 不是完全没日志:系统必要的元数据变更仍会记录
  2. 仅对特定操作有效:后续普通增删改操作仍会产生完整日志
  3. 备份要及时:使用后必须立即备份,否则数据可能无法恢复
  4. 要团队协作:必须告知DBA,否则他们无法正确处理故障

实际应用建议

  1. 大批量数据加载:使用INSERT /*+ APPEND */直接路径插入
  2. 索引维护:重建大索引时设为NOLOGGING模式
  3. 表空间迁移:结合NOLOGGING在备份前快速完成
  4. 测试环境:模拟生产环境的日志模式进行测试

记住:重做日志不是负担,而是数据库的"安全网"。合理使用NOLOGGING就像在确保安全的前提下选择快车道,既能提高效率,又不会影响数据安全。

------------------作者介绍-----------------------

姓名:黄廷忠 现就职:Oracle中国高级服务团队 曾就职:OceanBase、云和恩墨、东方龙马等 电话、微信、QQ:18081072613

个人博客: (http://www.htz.pw)

CSDN地址: (https://blog.csdn.net/wwwhtzpw)

博客园地址: (https://www.cnblogs.com/www-htz-pw)

读书笔记:揭秘Oracle重做日志:为什么它如此重要?_归档日志