commit的误解
来源:互联网 发布:嘉鱼网络推广经理招聘 编辑:程序博客网 时间:2024/06/02 05:51
1.大事务(DML处理大批量数据)后的commit会比小事务后的commit慢
要搞清楚这个问题,首先要理解commit时,oracle要做哪些工作:
1)LGWR将log buffer中所有剩余的重做记录写进联机重做日志文件(log file),为事务新生成一个SCN,并将这个SCN也写进重做日志文件,此时该事务从V$TRASACTION中删除,该事务完成;
2)将该会话持有的锁V$LOCK释放掉;
3)简单标记回滚段事务已提交;
虽然大事务与小事务产生的redo量有区别,但是LGWR的自动写log buffer的机制(日志缓冲区占1/3和DBWR写脏缓冲区)会让这种差别不会很大,所以说不论大事务还是小事务,commit耗时是相差无几的。
2.DML大批量数据时,分批commit会比一次commit更快
首先要搞清楚commit会消耗哪些资源:
1) 增加客户端与服务器端的通信量,commit越多通信量越大;
2) 提交时,会话将等待lgwr写logbuffer到logfile
但是为什么有时候分批提交确实能提高效率呢?我认为关键是在回滚段上,因为大事务一次提交需要很大的回滚段,当undo空间不足,自动扩展将会很大程度上影响效率。分批提交的话,就会及时将回滚段中不活动(已commit)的数据块回收,从而能有效的利用undo空间,避免因undo空间不足,自动扩展造成的性能损耗。(不过注意,并不是commit后就能立即回收回滚段,系统回收回滚段具有不确定性)。
所以,一个大事务是应该一次提交还是分批提交,关键在于IO与undo空间利用的均衡考虑,不能一味简单的认为分批提交好。我认为最重要还是要考虑业务逻辑,一般不要分批提交。
- commit的误解
- string.h的误解
- TDD的误解
- 对Unicode的误解
- pfc_save 的误解
- 一种误解的臆想
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- 关于inline的误解
- 在iOS工程中添加ASIHTTPRequest
- ObjC学习2-语法循环、条件,原来像学C语言一样啊!
- 异步跨线程访问UI控件
- 不用Cookie实现高亮Javascript菜单效果
- QEMU VGA 分析(0) – 显卡组件剖析
- commit的误解
- capwap学习笔记——初识capwap(三)
- C++编程思想----第12章、运算符重载
- 享元模式(Flyweight Pattern)
- 计算机启动过程
- 快速修改顺序命名文件
- 一句话说明各种语言为什么被创造
- 软件工程大作业
- 给开发维护大型项目开发者的建议