博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle的体系结构(四)
阅读量:6430 次
发布时间:2019-06-23

本文共 962 字,大约阅读时间需要 3 分钟。

  hot3.png

基本上所有的关于Oracle的书籍中,对后台进程的描述都会涉及PMON、SMON、LGWR、DBWn和CKPT这个五个进程,但都甚少解释,为什么这五个进程很重要。

DBWn进程是负责完成对数据文件的修改的落实工作的,哪是谁负责把数据块从数据文件加载到buffer cache的?答案是服务进程(server process)。

事务没有提交,事务所涉及的对数据文件的修改是否会落实到磁盘?相信还是有人会被这个问题绕进去。我们姑且不论答案是什么,这个问题,其实可以用另一个方式来问,事务的提交和写数据文件有什么关系?

答案是,事务是否提交与修改是否是落实磁盘没有关系。想象一个场景,一个insert操作,需要写100G的数据到数据文件中,但是buffer cache指有1G的大小。这里延伸出另一个很有意思的问题,假设数据文件本来只有1G的,进行insert操作后(没有提交),数据文件被撑到100G,如果roll back,数据文件是否会收缩?答案还是否定的,因此roll back只是逻辑上的roll back,并不是物理上的。

继续上面的问题,既然事务提交的并不会保证同时完成对数据文件的修改,那如何保证不丢失已久提交的数据。答案是日志,事务提交时,DB会等到LGWR把log buffer中的所有东西都落实到了log file上是才会给到client提交已久成功的信息。

教科书上告诉我们,有很多触发LGWR的条件,比如,commit,log buffer的内容大于1m,log buffer 1/3满等,但是,你思考过吗,为什么要定义这些触发条件,出发点是什么?为了更好的理解的这个问题,可以尝试理解另一个问题:commit和roll back哪个操作更快一些?或者这样问,一个会产生100G的日志的insert操作,与另一个只有1M日志产生的insert相比,他们提交事务的时间差别大吗?

有了上面的基础,CKPT的存在就变的理所当然了。因为,因为,因为,数据文件写和日志文件写是异步操作。如果没有CKPT,DB crash之后的恢复时间将是不可预测的。

思考:数据块中的scn和数据文件头中的scn有什么关系?

-- 待续

转载于:https://my.oschina.net/huayd/blog/131259

你可能感兴趣的文章
烂泥:mysql5.5多实例部署
查看>>
了解BYOD---工作方式的新时尚
查看>>
fastdfs binlog同步BUG
查看>>
基于DRBD构建高可用主从MySQL服务器
查看>>
MS UC 2013-0-虚拟机-标准化-部署-1-虚拟化-部署
查看>>
揭秘一个不起眼的微商新品牌,如何快速赢得客户信任?
查看>>
位图和SVG用法比较
查看>>
网络常见劫持杂谈
查看>>
Windows 7合理虚拟内存RAMDISK提升运行性能
查看>>
SharePoint Server 2013 之一:为SharePoint启航
查看>>
NVMe闪存慢慢来
查看>>
六、把文件存放在SDCard
查看>>
[轉]通过DNS的负载均衡方案Round-robin DNS
查看>>
看懂SqlServer查询计划
查看>>
[转]PHP获取当前页面的URL
查看>>
GridView鼠标移动到某一行时行发生变色和为Gridview中编辑模板中的控件添加颜色...
查看>>
VC++学习(0):MFC框架
查看>>
ACM POJ 2109 Power of Cryptography
查看>>
xml 设置 imageview 背景(按下,禁用等)
查看>>
imagemagick命令行用法(转)
查看>>