暂无图片
Oracle中commit的响应时间会随着事务的大小而改变吗?
我来答
分享
北斗
2023-02-09
Oracle中commit的响应时间会随着事务的大小而改变吗?

Oracle中commit的响应时间会随着事务的大小而改变吗?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新

通常情况下,commit是一个非常快的操作,其响应时间与事务大小无关。

为什么commit的响应时间不会随着事务的大小而改变呢?这是因为在数据库中执行commit之前,困难的工作都已经做了,执行了如下操作:

 · 已经在SGA中生成了undo;

 · 已经在SGA中生成了已修改数据块;

 · 已经在SGA中生成了对应前两项的redo缓存;

 · 如果前三项比较大并且耗时较长,那这三项中的某些数据可能已经被刷新输出到磁盘;

 · 已经得到了所需的全部锁。

执行commit时,只剩下如下的工作:

 · 为事务生成一个SCN(System Change Number,系统改变号)。

 · LGWR将所有未写入磁盘的重做日志条目写至磁盘,并把SCN记录到在线重做日志文件中。这一步就是真正的commit,如果提交过程都走到了这一步,事务的状态就是已提交。

 · V$LOCK中会记录着会话持有的锁,这些锁都将被释放,而排队等待这些锁的会话都会被唤醒,从而可以继续完成它们的工作。

 · 如果事务修改的某些块还在缓冲区缓存中,Oracle就会以一种快速的模式访问并“清理”。

可以看到,处理commit所要的工作很少,其中耗时最长的操作要算LGWR执行的活动,因为它会对物理磁盘读写。不过这里LGWR花费的时间并不会特别长,原因是LGWR一直不停地将重做日志缓冲区的内容刷到磁盘上去。

暂无图片 评论
暂无图片 有用 5
打赏 0
暂无图片
Thomas

请教一下,在COMMIT前,UNDO都存在内存中吗?那么何时这些内容存到UNDO TABLESPACE里呢?

暂无图片 评论
暂无图片 有用 0
打赏 0
2023-02-11
undo是存储在数据库内部一组特殊的段中,称为undo段。与数据库中的非undo数据类似,undo数据会写入到undo段,且也会被放到缓冲区缓存中。 commit前,undo数据有可能在磁盘上,也有可能还在缓冲区,因为LGWR在一直不停地将重做日志缓冲区的内容刷到磁盘上。
回答交流
Markdown


请输入正文
提交
相关推荐
哪位大哥做过这样的操作,Oracle 11g-rac两节点之间的时间是同步的,用的是CTSS时间同步,但是数据库的时间比互联网的时间慢两分钟,现在客户想要库和互联网的时间同步,谁做过,有啥经验分享一下
回答 2
已采纳
可以用ntp同步
oracle总提示表空间不存在,怎么解决?
回答 1
已采纳
感觉是cdb和pdb使用方式理解有些差异;https://www.modb.pro/db/41813
Oracle19C RAC安装在哪个版本Linux最稳定?
回答 4
推荐RHEL7.9
ORACLE子表链接主表,主表的数据只显示在第一行怎么做到 像这种,子表链接主表,主表的数据只显示在第一行?
回答 1
看了三遍,确实没看懂需求描述
DG修改备库redo时,删除备库当前current redo日志时报错,求解
回答 2
已采纳
暂定为bug,DG同步不受影响。Bug16091872ORA01623/ORA01624/ORA01567droppingORLonaSTANDBYdatabase(DocID16091872.8)D
12CR2 LINUX, 单机版,两个实例,如何设置两个实例都随OS自动启动?
回答 2
操作流程如下:vi/etc/orataborcl:/home/oracle/app/oracle/product/12.2.0/dbhome1:Yorcl2:/home/oracle/app/orac
Oracle log buffer里没写日志的数据在异常宕机的时候会丢失吗? 如果丢失的话,还能恢复么?
回答 3
已采纳
1、当有Commitcomplete.或Rollbackcomplete返回时,A、都表示当前事务对应的在LogBuffer的数据,以写入到RedoLog日志中了;B、已commit的事务,是不丢失的
Oracle 可以通过 11g rman 恢复到 19c 上面吗?
回答 1
跨版本的话得用数据泵expdp/impdp
AWR分析报告问题求助:严重问题有优化建议吗?这个报告有PDB的信息吗?
回答 1
1、DBTime不高,说明系统不忙。2、top等待的等待时间都比较短,都是ms级,DBCPU排第一,说明都是使用的CPU,并没有异常等待。3、SQL执行时间都是ms级。综上,从awr看,系统负载比较低
RAC中process参数
回答 2
已采纳
1000,session和process是一样的道理,集群是多实例数据库,每个实例的process为500,2个实例就是1000,如果应用连接集群数据库的连接方式不正确,会话无法做到均衡负载在2个节点