暂无图片
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


请输入正文
提交
相关推荐
RPM安装Oracle功能差异
回答 1
已采纳
没有差异的,您可以查以下视图来进行比对SELECTcompid,schema,status,version,compname FROMdbaregistry ORDERBY1;功能
impdp导入时报序列、存储过程、视图已经存在,怎么直接覆盖导入
回答 2
tableexistsaction是对表进行的冲突检测我们自己在做这类迁移,如果是导入一个已经存在数据的库,则应该生成对应的sql脚本进行替换
MySQL LIMIT 如何改写成Oracle limit?
回答 1
已采纳
SELECTFROM(SELECTROWNUMRNFROM(SELECTFROMt)AWHEREROWNUM<115)WHERERN>100;这是12以前12以后SELECTFROMtOF
请问一下, 两个数据,用数据库链接, 有没有方法监控连接的稳定性 ?
回答 1
没看懂你的意思。
异地备份Oracle,没有exp命令怎么办?
回答 3
已采纳
1、远程机器如果能安装oracleclient是可以用EXP或者expdp命令。2、设置shell脚本通过本地expdp导出后sftp传输到异地机器。3、直接用rman配合NFS也能实现异地机器备份。
请问下,拷贝的备份注册目录不上是什么原因?
回答 1
已采纳
我个人建议如下:1确认/backup目录权限2确认/backup中文件权限3/backup中是备份集还是归档文件?4可以通过catalogbackuppiece和alterdatabaseregist
Oracle:impdp开并行的时候 如果只有1个文件,这时候进程数量应该是多少个?
回答 1
主要是看你有几个CPU,你开和CPU数量差不多就行。能发挥出来并行。
11.2.0.4RAC的scan listener只注册了一个数据库实例
回答 1
你的RAC两节点集群/数据库状态正常,并且已经重新设置了remotelistener参数。然而,当查看scan监听器的状态时,只有一个实例注册。要排查此问题,可以执行以下步骤:确保所有集群节点上的监听
求一个100TB以上Oracle数据库备份方案
回答 2
你这个100T还是比较大的,1、如果确实是需要快速备份,还不差钱,那就得上第三方的备份一体机,恩墨的、oracle的、云信达的、鼎甲的,都可以试一下。2、如果差钱,不想买第三方的工具,那么只能依赖于o
Oracle 表做了delete,但是空间好像没有释放,这个要怎么处理?
回答 5
这个本来就不释放,数据插入到临时表。删除原表。修改临时表。或者move一下表