Oracle DB BUFFER宝典说明

经过长时间学习Oracle,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。生成编译代码之后,接着下一步服务器进程要准备开始更新数据,服务器进程将到Oracle DB BUFFER中查找是否有相关对象的缓存数据,下面分两个可能进行解释:

如果没有,服务器进程将在表头部请求一些行锁,如果成功加锁,服务器进程将从数据文件中读入这些行所在的***个数据块(db block)(DB BLOCK是ORACLE的最小操作单元,即使你想要的数据只是DB BLOCK中很多行中的一行或几行,ORACLE也会把这个DB BLOCK中的所有行都读入Oracle DB BUFFER中)放入Oracle DB BUFFER中空闲的区域或者覆盖已被挤出LRU列表的非脏数据块缓冲区,并且排列在LRU列表的头部,如果这些非脏数据缓冲区写完也不能满足新数据的请求时,会立即触发DBWN进程将脏数据列表中指向的缓冲块写入数据文件,并且清洗掉这些缓冲区,来腾出空间缓冲新读入的数据,也就是在放入Oracle DB BUFFER之前也是要先申请Oracle DB BUFFER中的锁存器,成功锁定后,再写入Oracle DB BUFFER,然后把这个块的头部事务列表及SCN信息及被影响的行数据原值写入回滚段中,以便ORACLE在ROLLBACK时可以利用当前数据块和回滚段重构数据块的”前映像”或递归重构出”前…前映像”来实现读一致性。

然后在LOG BUFFER中生成日志,服务器程将该语句影响的被读入Oracle DB BUFFER块中的这些行的ROWID及将要更新的原值和新值及SCN等信息,以及回滚段的修改信息(即对某某回滚段地址进行了什么修改)逐条的写入REDO LOG BUFFER,在写入REDO LOG BUFFER之前也是先请求REDO LOG BUFFER块的锁存器,成功锁定之后才开始把REDOLOG写入REDOLOG BUFFER。当写入达到REDO LOG BUFFER大小的三分之一或写入量达到1M或超过三秒后或发生检查点时或者COMMIT时或者DBWN之前触发LGWR进程,LGWR将把REDO LOG BUFFER中的数据写入磁盘上的重做日志文件,已被写入重做日志文件的REDO LOG BUFFER中的块上的锁存器被释放,并可被后来写入的信息所覆盖。

回滚段其实也有BUFFER(在Oracle DB BUFFER中开辟),回滚段BUFFER中的内容是最早向磁盘上回滚段中写的,写完这些才会生成日志BUFFER中的内容,原因是日志中必须要记录回滚段的新旧变化以便在恢复时从日志中的记录的回滚段新旧变化对回滚段再次重写,记住,REDO不光是对数据文件依据日志文件重写,也要依据日志文件对回滚段重写,而且重写回滚段要先于重写数据文件,要理解REDO就是重来一遍,所谓重来一遍就要跟正常的的先后顺利一样重做一遍(正常的操作中的顺序就是先读入Oracle DB BUFFER,写回滚段buffer,后写回滚段,后写日志BUFFER,后改写Oracle DB BUFFER,后写日志***写数据文件)区别是REDO时不用再记日志了,这样解释后相信大家应该理解为什么日志中也必须要记录回滚段的信息了,只有这样才可以对正常操作中的一个ROLLBACK动作进行恢复,即在REDO过程中利用即时重写的数据块和回滚段重构出一个当时适用的前镜像来rollback。当一个重做日志文件写满后,LGWR将切换到下一个重做日志文件,重做日志文件也是循环工作方式。如果是归档模式,归档进程还将前一个写满的重做日志进程写入归档日志文件。

当Oracle DB BUFFER改写之后,服务器进程在脏数据列表中建立一条指向此Oracle DB BUFFER缓冲块的指针。接着服务器进程会从数据文件读入第二个数据块(db block)重复以上读入,建立回滚段,写LOG BUFFER,改写Oracle DB BUFFER,放入脏列表的动作,当脏数据列表达到一定长度时,DBWN进程将脏数据列表中指向的缓冲块全部写入数据文件,也就是释放加在这些DB BUFER块上的锁存器,并在修改相应块的头部的SCN号(一次UPDATE操作只对应一个SCN)。前面说过DBWN动作之前会先触发LGWR,这用以确保写入数据文件的改变首先会被记录在日志文件中。实际上ORACLE可以从数据文件中一次读入多个块放入Oracle DB BUFFER,然后再对这些块建回滚段、再记日志等等,也就是每次操作的对象是DB BLOCK的复数,而不仅限于一次操作一个DB BLOCK,可以通过参数DB_FILE_MULTIBLOCK_READ_COUNT来设置一次读入的块的个数。注意,不管是否提交,用户的所有更改都会被记录在日志文件中,用户级回滚的动作(rollback)没有对应的COMMIT SCN。

在密集事务的情况下,LGWR可以把多个COMMIT产生的REDO条目批量写入REDO LOG FILE,但每个COMMIT之间有十分之一秒的间隔,且会产生不同的COMMIT SCN。LGWR正常情况下是一个休眠进程,会被一定的条件触发,唤醒,比如COMMIT就是一个唤醒条件,一旦LGWR被唤醒,LGWR将把唤醒时间点之前LOG BUFFER中产生的所有内容(从上次LGWR唤醒后到本次唤醒前之间写入LOG BUFFER的内容)写入LOG FILE,直到LGWR完成后,LGWR才可以被再次触发,在LGWR触发到完成期间所有对数据库的操作仍然可以不间断的加入LOG BUFFER。在这段时间内,LGWR不再接收其它条件的触发,比如紧跟前一个COMMIT之后的其它COMMIT(复数)都要等待LGWR完成后才可以再次触发LGWR,并在LGWR下次被触发时,将积累的REDO BUFFER条目一次性写入REDO LOG,后继的COMMIT不会单个单个的触发LGWR。

如果要查找的数据已缓存,则根据用户的SQL操作类型决定如何操作,如果是SELECT则查看Oracle DB BUFFER块的头部是否有事务,如果有,将利用回滚段进行重构出一致性块再读取,如果没有则比较SELECT的SCN与Oracle DB BUFFER块头部的SCN如果比自己大,仍然同上,如果比自己小则认这是一个非脏缓存,可以直接从这个Oracle DB BUFFER块中读取。如果是UPDATE则即使在Oracle DB BUFFER中找到一个没有事务,而且SCN比自己小的非脏缓存数据块,服务器进程仍然要到表的头部对这条记录申请加锁,加锁成功则进行后续动作,如果不成功,则要等待前面的进程解锁后才能进行动作。

【编辑推荐】

  1. 简单描述Oracle物化视图日志
  2. 简要概述Oracle客户端
  3. 五分钟掌握Oracle调优
  4. 探讨Oracle primary索引
  5. 高手讨论Oracle物化视图

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/255873.html<

(0)
管理的头像管理
上一篇2025-05-01 01:22
下一篇 2025-05-01 01:23

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注