2023-02-09
Oracle中commit的响应时间会随着事务的大小而改变吗?
Oracle中commit的响应时间会随着事务的大小而改变吗?
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
Oracle中commit的响应时间会随着事务的大小而改变吗?
通常情况下,commit是一个非常快的操作,其响应时间与事务大小无关。
为什么commit的响应时间不会随着事务的大小而改变呢?这是因为在数据库中执行commit之前,困难的工作都已经做了,执行了如下操作:
· 已经在SGA中生成了undo;
· 已经在SGA中生成了已修改数据块;
· 已经在SGA中生成了对应前两项的redo缓存;
· 如果前三项比较大并且耗时较长,那这三项中的某些数据可能已经被刷新输出到磁盘;
· 已经得到了所需的全部锁。
执行commit时,只剩下如下的工作:
· 为事务生成一个SCN(System Change Number,系统改变号)。
· LGWR将所有未写入磁盘的重做日志条目写至磁盘,并把SCN记录到在线重做日志文件中。这一步就是真正的commit,如果提交过程都走到了这一步,事务的状态就是已提交。
· V$LOCK中会记录着会话持有的锁,这些锁都将被释放,而排队等待这些锁的会话都会被唤醒,从而可以继续完成它们的工作。
· 如果事务修改的某些块还在缓冲区缓存中,Oracle就会以一种快速的模式访问并“清理”。
可以看到,处理commit所要的工作很少,其中耗时最长的操作要算LGWR执行的活动,因为它会对物理磁盘读写。不过这里LGWR花费的时间并不会特别长,原因是LGWR一直不停地将重做日志缓冲区的内容刷到磁盘上去。
评论
有用 5
墨值悬赏