我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
揭秘Oracle重做日志:为什么它如此重要?
重做日志是什么?
想象一下你在玩一个电脑游戏,每次你获得新装备或升级角色时,游戏都会自动保存进度。Oracle数据库的重做日志(redo log)就像这个"自动保存"功能,它记录数据库发生的所有变化。这样万一电脑突然死机,数据库也能恢复到崩溃前的状态。
重做日志的工作原理
当你在数据库中修改数据时:
- 数据库会先记录这些改动到内存的"日志缓冲区"
- 然后由专门的LGWR进程把这些记录写入磁盘的在线重做日志文件
- 如果开启了归档模式,填满的在线日志还会被复制为归档日志
这就好比你在写日记:
- 先写在便签纸上(日志缓冲区)
- 然后誊写到正式日记本(在线重做日志)
- 最后把写满的日记本拍照存档(归档日志)
为什么重做日志会成为瓶颈?
所有数据库操作最终都要通过LGWR进程来记录重做日志并提交事务。这就像超市只有一个收银台,所有顾客都要排队结账。如果交易量很大:
- 收银员(LGWR)会非常忙碌
- 负责打包的店员(归档进程)也要处理更多工作
- 整个超市(数据库)的运转速度就会变慢
如何减少重做日志的影响?
开发人员可以通过两种方式优化:
- 直接路径插入:比常规插入减少99%的重做日志量
- 常规插入100万行:生成113MB日志
- 直接路径插入100万行:仅生成220KB日志
- NOLOGGING模式:特定操作不记录详细日志
- 创建表时使用NOLOGGING:日志从4MB减少到90KB
- 重建索引时使用NOLOGGING:日志从600KB减少到39KB
使用NOLOGGING的注意事项
虽然NOLOGGING能大幅提升性能,但就像"走捷径"一样需要谨慎:
- 不是完全没日志:系统必要的元数据变更仍会记录
- 仅对特定操作有效:后续普通增删改操作仍会产生完整日志
- 备份要及时:使用后必须立即备份,否则数据可能无法恢复
- 要团队协作:必须告知DBA,否则他们无法正确处理故障
实际应用建议
- 大批量数据加载:使用
INSERT /*+ APPEND */
直接路径插入 - 索引维护:重建大索引时设为NOLOGGING模式
- 表空间迁移:结合NOLOGGING在备份前快速完成
- 测试环境:模拟生产环境的日志模式进行测试
记住:重做日志不是负担,而是数据库的"安全网"。合理使用NOLOGGING就像在确保安全的前提下选择快车道,既能提高效率,又不会影响数据安全。
------------------作者介绍-----------------------
姓名:黄廷忠 现就职:Oracle中国高级服务团队 曾就职:OceanBase、云和恩墨、东方龙马等 电话、微信、QQ:18081072613
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)