当前位置: 首页 > news >正文

oracle commit 做了什么?

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

  执行COMMIT时,余下的工作只是:

  为事务生成一个SCN。如果你还不熟悉SCN,起码要知道,SCN是Oracle使用的一种简单的计时机制,用于保证事务的顺序,并支持失败恢复。SCN 还用于保证数据库中的读一致性和检查点。可以把SCN看作一个钟摆,每次有人COMMIT时,SCN都会增1.

  LGWR将所有余下的缓存重做日志条目写到磁盘,并把SCN记录到在线重做日志文件中。这一步就是真正的COMMIT。如果出现了这一步,即已经提交。事务条目会从V$TRANSACTION中“删除”,这说明我们已经提交。

  V$LOCK中记录这我们的会话持有的锁,这些所都将被释放,而排队等待这些锁的每一个人都会被唤醒,可以继续完成他们的工作。

  如果事务修改的某些块还在缓冲区缓存中,则会以一种快速的模式访问并“清理”。块清除(Block cleanout)是指清除存储在数据库块首部的与锁相关的信息。实质上讲,我们在清除块上的事务信息,这样下一个访问这个块的人就不用再这么做了。我们采用一种无需生成重做日志信息的方式来完成块清除,这样可以省去以后的大量工作(在下面的“块清除”一节中将更全面地讨论这个问题)。

  可以看到,处理COMMIT所要做的工作很少。其中耗时最长的操作要算LGWR执行的活动(一般是这样),因为这些磁盘写是物理磁盘I/O。不过,这里LGWR花费的时间并不会太多,之所以能大幅减少这个操作的时间,原因是LGWR一直在以连续的方式刷新输出重做日志缓冲区的内容。在你工作期间,LGWR并非缓存这你做的所有工作;实际上,随着你的工作的进行,LGWR会在后台增量式地刷新输出重做日志缓冲区的内容。这样做是为了避免COMMIT等待很长时间来一次性刷新输出所有的redo。

  因此,即使我们有一个长时间运行的事务,但在提交之前,它生成的许多缓存重做日志已经刷新输出到磁盘了(而不是全部等到提交时才刷新输出)。这也有不好的一面,COMMIT时,我们必须等待,直到尚未写出的所有缓存redo都已经安全写到磁盘上才行。也就是说,对LGWR的调用是一个同步(synchronous)调用。尽管LGWR本身可以使用异步I/O并行地写至日志文件,但是我们的事务会一直等待LGWR完成所有写操作,并收到数据都已在磁盘上的确认才会返回。

相关文章:

  • android下对存储的操作
  • android开发之滑动效果实现图片浏览_ViewFilpper的使用
  • Python 入门教程 12 ---- Battleship!
  • 【Deep Learning学习笔记】Learning meanings for sentences
  • linux dmesg命令学习
  • 职业规划随想
  • HDU 2485 Destroying the bus stations (IDA*+ BFS)
  • 黑马程序员_常用类(System.Math,Calendar,Date,Runtime)
  • 转载 eoe 大神整理好的 android 开源项目
  • (3)选择元素——(17)练习(Exercises)
  • [week4]每周总结与工作计划
  • 每天一道算法_1_放苹果
  • CSS3之渐变Gradient
  • Linux下几个常用的快捷键,真的很实用
  • Python 入门教程 13 ---- Loops
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • create-react-app项目添加less配置
  • HTTP请求重发
  • Java基本数据类型之Number
  • jdbc就是这么简单
  • Next.js之基础概念(二)
  • PAT A1120
  • Python打包系统简单入门
  • Terraform入门 - 1. 安装Terraform
  • Vue 动态创建 component
  • 爱情 北京女病人
  • 观察者模式实现非直接耦合
  • 京东美团研发面经
  • 前端面试总结(at, md)
  • 嵌入式文件系统
  • 用jQuery怎么做到前后端分离
  • 最近的计划
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 组复制官方翻译九、Group Replication Technical Details
  • ​第20课 在Android Native开发中加入新的C++类
  • # 计算机视觉入门
  • (10)STL算法之搜索(二) 二分查找
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (第61天)多租户架构(CDB/PDB)
  • (二)pulsar安装在独立的docker中,python测试
  • (二十四)Flask之flask-session组件
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (三)uboot源码分析
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)kafka实战——kafka源码编译启动
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)程序员技术练级攻略
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .Net 垃圾回收机制原理(二)
  • .NET委托:一个关于C#的睡前故事