一文搞懂oracle事务提交以及脏数据落盘的原则

本文基于oracle 19c 做事务提交以及oracle脏数据落盘的相关解读

第一章 相关进程及组件介绍:

1.LGWR:

重做日志条目在系统全局区域 (SGA) 的重做日志缓冲区中生成。LGWR 按顺序将重做日志条目写入重做日志文件。如果数据库具有多重做日志,则 LGWR 会将重做日志条目写入一组重做日志文件。

2.DBWn:

数据库写入器进程 (DBW) 将数据库缓冲区的内容写入数据文件。DBW 进程将数据库缓冲区缓存中修改的缓冲区写入磁盘。

尽管一个数据库写入器进程 (DBW0) 对于大多数系统来说已经足够了,但您可以配置其他进程(DBW1 到 DBW9、DBWa 到 DBWz 以及 BW36 到 BW99),以便在系统大量修改数据时提高写入性能。这些额外的 DBW 进程在单处理器系统上没有用。

3.CKPT:

在特定时间,CKPT 通过向 DBWn 发送消息来启动检查点请求,以开始写入脏缓冲区。在完成单个检查点请求后,CKPT 会更新数据文件头和控制文件以记录最近的检查点。

CKPT 每 3 秒检查一次,查看内存量是否超过初始化参数的值,如果是,则执行“PGA_AGGREGATE_LIMIT”中描述的操作。

4 buffer cache:

数据库缓冲区高速缓存(也称为缓冲区高速缓存)是存储从数据文件中读取的数据块副本的内存区域。

缓冲区是一个主内存地址,缓冲区管理器在其中临时缓存当前或最近使用的数据块。并发连接到数据库实例的所有用户共享对缓冲区缓存的访问权限。

数据库缓冲区缓存的用途

Oracle 数据库使用缓冲区缓存来实现多个目标。

目标包括:

  • 优化物理 I/O

    数据库更新缓存中的数据块,并将有关更改的元数据存储在重做日志缓冲区中。之后,数据库将重做缓冲区写入联机重做日志,但不会立即将数据块写入数据文件。相反,数据库写入器 (DBW) 在后台执行延迟写入。COMMIT

  • 将经常访问的块保存在缓冲区缓存中,并将不经常访问的块写入磁盘

    启用数据库智能闪存缓存(闪存缓存)后,部分缓冲区缓存可以驻留在闪存缓存中。此缓冲区缓存扩展存储在一个或多个闪存设备上,这些设备是使用闪存的固态存储设备。数据库可以通过在闪存中缓存缓冲区而不是从磁盘读取来提高性能。

    使用 和 初始化参数配置多个闪存设备。缓冲区缓存跟踪每个设备,并将缓冲区均匀地分配给设备。DB_FLASH_CACHE_FILEDB_FLASH_CACHE_SIZE

缓冲区状态

翻译出来就是:

  • 闲置

    缓冲区可供使用,因为它从未使用过或当前未使用过。这种类型的缓冲区是数据库最容易使用的。

  • 干净

    此缓冲区以前使用过,现在包含截至某个时间点的块的读取一致性版本。该块包含数据,但“干净”,因此不需要检查点。数据库可以固定块并重用它。

  • 缓冲区包含尚未写入磁盘的已修改数据。数据库在重用块之前必须对块进行检查点。

第二章 事务提交

当事务提交时,将发生以下操作:

  • 数据库为 .COMMIT

    关联撤消表空间的内部事务表记录了事务已提交的记录。事务的对应唯一SCN被分配并记录在事务表中。

  • 日志写入器进程 (LGWR) 进程将重做日志缓冲区中剩余的重做日志条目写入联机重做日志,并将事务 SCN 写入联机重做日志。此原子事件构成事务的提交。

  • Oracle 数据库释放了对行和表的锁。

    在未提交事务持有的锁上排队等待的用户可以继续他们的工作。

  • Oracle 数据库删除保存点。

    在表 10-1 中,事务中不存在任何保存点,因此不会擦除任何保存点。sal_update

  • Oracle 数据库执行提交清理。

第三章:redo从缓冲区记录到日志文件

在以下情况下,LGWR 会写入自上次写入以来已复制到缓冲区中的所有重做条目:

  • 用户提交事务。

  • 发生联机重做日志切换。

  • 自 LGWR 上次写信以来已经过去了三秒钟。

  • 重做日志缓冲区已满三分之一或包含 1 MB 的缓冲数据。

  • DBW 必须将修改后的缓冲区写入磁盘。

    在 DBW 可以写入脏缓冲区之前,数据库必须将与缓冲区更改关联的重做记录(预写协议)写入磁盘。如果 DBW 发现某些重做记录尚未写入,它会向 LGWR 发出信号,将记录写入磁盘,并等待 LGWR 完成,然后再将数据缓冲区写入磁盘。

第四章 脏数据落盘:

脏数据落盘主要由DBWn进程来完成,我们来看下官网的解释:

Process Architecture (oracle.com)

在以下情况下,DBW 进程将脏缓冲区写入磁盘:

1.描缓冲区数的阈值数后找不到干净的缓冲区

当服务器进程在扫描缓冲区数的阈值数后找不到干净的可重用缓冲区时,它会向 DBW 发出写入信号。如果可能,DBW 在执行其他处理时将脏缓冲区异步写入磁盘。

这种情况下由参数_db_block_max_scan_pct决定。_db_block_max_scan_pct表示已经扫描的buffer header的个数占整个LRU链表上buffer header总数的百分比。

当进程在辅助LRU链表和主LRU链表上扫描以查找可以覆盖的buffer header(空闲缓冲区)时,如果已经扫描的buffer header的数量达到一定的限度(由隐藏参数:_db_block_max_scan_pct决定)时,触发DBWR进程。

如果主LRUW链表和辅助LRUW链表上的脏数据块的总数超过一定限度,也将触发DBWR进程。该限度由隐藏参数:_db_large_dirty_queue决定。

查询隐含参数的方法:

-- xxx是你想查找的参数名
SELECT   ksppinm, ksppstvl, ksppdesc  FROM   x$ksppi x, x$ksppcv y WHERE   x.indx = y.indx AND  ksppinm like  '%xxxx%';

2.定期启动

DBW 会定期写入缓冲区以推进检查点,检查点是重做线程中实例恢复开始的位置。检查点的日志位置由缓冲区缓存中最早的脏缓冲区确定。

在许多情况下,DBW 写入的块分散在整个磁盘中。因此,写入往往比 LGWR 执行的顺序写入慢。DBW 尽可能执行多块写入以提高效率。多块写入中写入的块数因操作系统而异。

这个定期启动在ckpt解释中可以找到,每三秒执行一次,检查点会触发DBWn进程。

3.其他(这些是在网上搜集的具体没有验证)

(1)将表空间设置为离线(offline)状态时触发DBWR。

(2)发出命令:alter tablespace … begin backup,从而将表空间设置为热备份状态时触发DBWR。

(3)将表空间设置为只读状态时,触发DBWR。

(4)删除对象时(比如删除某个表)会触发DBWR。

参考:Oracle DBWR,LGWR,CKPT,ARCH 触发条件 - 墨天轮 (modb.pro)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/654244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

14.Redis之JAVASpring客户端

1.引入依赖 此时就会引入操作 redis 的依赖了~~ 2.yml配置 spring:redis:host: 127.0.0.1port: 8888 3.准备 前面使用 jedis,是通过 Jedis 对象里的各种方法来操作 redis 的.此处Spring 中则是通过 StringRedisTemplate 来操作 redis .最原始提供的类是 RedisTemplateStrin…

OceanBase:列存储

目录 1、列存储的定义 1、默认创建列存表 3、指定创建列存表 4、指定创建列存行存冗余表 5、行、列存储查询测试 1、列存储的定义 行存储(Row-based Storage):行存储是以行为单位进行组织和存储数据。在这一模式下,数据库将…

C++ Primer 第五版 第十三章 拷贝控制

当定义一个类时,我们显式地或隐式地指定在此类型的对象拷贝、移动、赋值和销毁时做什么。一个类通过定义五种特殊的成员函数来控制这些操作,包括:拷贝构造函数(copy constructor)、拷贝赋值运算符(copy-ass…

web自动化的断言和日志封装

断言 UI自动化常见的断言条件包括: 通过当前页面的URL地址通过当前页面的标题通过当前页面的提示文本信息通过当前页面的某些元素变化/显示 一句话总结:通过肉眼观察页面的变化检查。 【用代码模仿人的识别页面】 一般断言写一条就够了,如…

Visual Studio 智能代码插件:CodeGeeX

前言 在软件开发领域,高效的编程助手一直是提升开发者效率和质量的关键。 随着人工智能技术的不断发展,智能编程助手逐渐成为开发者们不可或缺的工具。其中,CodeGeeX作为一款专为Visual Studio设计的免费智能编程助手,凭借其强大…

goimghdr,一个有趣的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - goimghdr。 Github地址:https://github.com/corona10/goimghdr 在图像处理和分析过程中,识别图像文件的类型是一个常见的需求。Python自带的imghdr…

AT32F415 使用embedded studio笔记

由于Embedded Studio还没有支持雅特力的支持包,因此通过MDK的工程无法直接导入到embedded studio中。需要自己新建一个工程。 新建的时候是可以选择雅特力的单片机的。 工程新建好后,默认会包含3个文件。如下图所示。其中两个汇编文件的作用是之前MDK的…

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 用户反馈的Bug如下所示: Transaction rolled back because it has been marked as rollback-only截图如下: 浏览器终端同样显示: 2. 原理分析 错误表明,在事务的生命周期内,遇到了某个异常或条件,导致该事务被标记…

Vue3学习使用axios和qs进行POST请求和响应处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、前言1.准备工作2.发送POST请求3.处理响应数据4.总结 一、前言 在前端开发中,经常需要与后端进行数据交互,其中包括发送POST请求并处理响…

2024年中国金融行业网络安全市场全景图

网络安全一直是国家安全的核心组成部分,特别是在金融行业,金融机构拥有大量的敏感数据,包括个人信息、交易记录、财务报告等,这些数据的安全直接关系到消费者的利益和金融市场的稳定,因此金融行业在网络安全建设领域一…

【机器学习】利用机器学习优化陆军战术决策与战场态势感知

🔒文章目录: 💥1.引言 🛴2.机器学习在陆军战术决策中的应用 🛣️2.1数据收集与预处理 🌄2.2模型构建与训练: 🌅2.3实时决策支持: 🌅2.4代码实现 &…

Genzai:一款针对物联网安全的多功能实用性工具套件

关于Genzai Genzai是一款针对物联网安全的多功能实用性工具套件,该工具旨在识别与物联网相关的仪表盘,并扫描它们以查找默认密码和安全问题,广大研究人员可以使用该工具来检测和提升物联网设备的安全性。 Genzai支持用户以输入的形式提供一个…

电子围栏(地理围栏)设计逻辑

做完整的项目时需要考虑安全问题,判断车辆在不该出现的位置出现时自动刹车。 只能说可以有吧。 地理围栏的概念 自动驾驶地理围栏是指在自动驾驶系统中定义的一种虚拟边界,用于限制车辆的运行范围。地理围栏可以通过全球定位系统(GPS&#…

nginx设置一个TCP代理(用于RDP连接)

在 Nginx 中,stream 上下文必须在 http 上下文之外,并且只能位于顶级配置文件中或包含在主配置文件中的单独文件中。 Nginx 的配置文件通常包含一个 http 块,用于处理 HTTP 和 HTTPS 请求,但是 stream 块是独立的,并且…

Acrobat Pro DC 2024 Mac软件安装包下载PDF2024 Mac安装教程

安装 步骤 1,双击打开下载好的安装包。 2,选择acrobat dc installer.pkg双击启动安装程序。 3,点击继续。 4,点击继续。 5,点击继续。 6,点击安装。 7,输入电脑密码。 8,软件安装中…

香橙派 AIpro开发板初上手

一、香橙派 AIpro开箱 最近拿到了香橙派 AIpro(OrangePi AIpro),下面就是里面的板子和相关的配件。包含主板、散热组件、电源适配器、双C口电源线、32GB SD卡。我手上的这个是8G LPDDR4X运存的版本。 OrangePi AIpro开发板是一款由香橙派与华…

JAVA学习·String类的常用方法

String 类及其创建 String 类的创建 String 类是 Java 内置的一个类,其完全限定类名是java.lang.String。想要创建一个字符串有多重方式,比如创建字符串"Hello": String s1 "Hello"; // 字面量创建 String s2 new St…

linux部署rustdesk

1.拉取RustDesk镜像 sudo docker image pull rustdesk/rustdesk-server2.启动hbbs服务 sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v pwd:/root -td --nethost rustdesk/rustdesk-server hbbs3.启动hbbr服务 sudo dock…

如何从Android恢复已删除的文件?3 种有效的方式

有时我们可能会错误地删除Android设备上的重要文件。更疯狂的是,Android手机上的文件在一夜之间消失了,我们不知道为什么。我们感到非常遗憾和恼火,但不知道。但是,此时学习如何从Android手机恢复已删除的文件为时已晚&#xff0c…

Mesa Gallium框架入门初探

Mesa Gallium框架入门初探 MESA Gallium框架 MESA源码里面有2套架构,现在驱动主要基于Gallium架构。 这里我们重点来看看Gallium架构: 经典架构 Gallium架构 Gallium展开 Gallium中主要包含下面几块: Auxiliary模块:一些公共函数或者辅助…