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

一文搞懂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)

相关文章:

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

本文基于oracle 19c 做事务提交以及oracle脏数据落盘的相关解读 第一章 相关进程及组件介绍: 1.LGWR: 重做日志条目在系统全局区域 (SGA) 的重做日志缓冲区中生成。LGWR 按顺序将重做日志条目写入重做日志文件。如果数据库具有…...

OceanBase:列存储

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

Rust:WIndows 环境下交叉编译 Linux 平台程序

在Windows下交叉编译Rust程序以在x86_64位的CentOS操作系统上运行,你需要遵循几个步骤来设置交叉编译环境并编译你的程序。以下是一个大致的指南: 1. 安装Rust和Cargo 首先,确保你已经在Windows上安装了Rust和Cargo。你可以从Rust官方网站下…...

从零学爬虫:使用比如说说解析网页结构

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、网页结构概述 示例:查看网页结构 三、使用比如说说解析网页 1.…...

C#数据类型变量、常量

一个变量只不过是一个供程序操作的存储区的名字。 在 C# 中,变量是用于存储和表示数据的标识符,在声明变量时,您需要指定变量的类型,并且可以选择性地为其分配一个初始值。 在 C# 中,每个变量都有一个特定的类型&…...

Java高级面试问题及答案

Java高级面试问题及答案 问题1: 请描述Java内存模型(JMM)及其在并发编程中的重要性。 探讨过程: 在并发编程中,多个线程之间如何协调对共享变量的访问是一个核心问题。Java内存模型定义了一组规则,来确保在多线程环境中对共享变量的修改能够…...

出现 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. 原理分析 错误表明,在事务的生命周期内,遇到了某个异常或条件,导致该事务被标记…...

数据结构算法题day03

数据结构算法题day03 题目 题目 2.设计一个高效算法&#xff0c;将顺序表L的所有元素逆置&#xff0c;要求算法的空间复杂度为O(1)算法思想&#xff1a; 1、常规的解法&#xff1a; Void reverse (sqlist &L){Elemtype temp; //辅助变量for(i 0,i < L.length; i){temp…...

深入分析C#中的“编写器”概念——代码修改、注解与重构

文章目录 1. 编写器&#xff08;Writer&#xff09;的概念2. 编写器的作用和工作原理3. 编写器的重要性4. 写入器常用方法5. 写入器示例6. 编写器示例——使用Fody进行代码注解和重构7. 总结 在软件开发过程中&#xff0c;代码的维护和更新是至关重要的。C#作为一种流行的编程语…...

uview1.0 u-form表单回显校验不通过

提交到后端的数据&#xff0c;回显后不做任何修改无法通过表单校验 原因&#xff0c;u-form表单校验的类型默认为string&#xff0c;但是后端返回的是integer类型&#xff0c;导致无法通过校验 解决&#xff0c;既然后端返回的是整数形&#xff0c;那么我们就将校验规则的type…...

监控员工电脑的软件有哪些,不得不说这几款电脑监控软件太好用了

监控员工电脑的软件在市场上种类繁多&#xff0c;以下是几款备受好评的电脑监控软件&#xff0c;它们各自具有独特的功能和优势&#xff0c;选择前必须了解一下才能做成正确决定。 1.安企神&#xff1a; 这款软件支持7天试用测试&#xff0c;获取测试版请移驾 ↓↓↓ 安企神…...

【MySQL精通之路】索引优化(2)

目录 1 MySQL如何使用索引 2 主键优化 3 空间索引优化 4 外键优化 5 列索引 6 多列索引 7 验证索引使用情况 8 InnoDB和MyISAM索引统计集合 9 B树索引与哈希索引的比较 9.1 B-树索引特征 9.2 哈希索引特征 10 索引扩展的使用 11 优化器使用生成的列索引 12 不可见…...

VUE3 学习笔记(5):数组处理、计算属性与函数、class与Style绑定

数组监测处理方法 VUE 提供了关于数组处理的直接方法&#xff0c;但并非全部都是可以处理的 如下可以直接处理&#xff1a; .push --向数组中增加 .pop --从数组中最后减去一个元素 .shift --从数组中第一个减去一个元素 .unshift --在数组中的头部添加一个元素 .splice --自定…...

基于springboot实现大学生一体化服务平台系统项目【项目源码+论文说明】

基于springboot实现大学生一体化服务平台系统演示 摘要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统大学生综…...

惠海 H6902B 升压恒流芯片 太阳能 风扇灯 应急灯 支持3.7V 5V 7.4V

惠海H6902B升压恒流驱动芯片是一款专为LED照明应用设计的驱动方案。该芯片具有多项产品特征&#xff0c;能够满足多种LED照明需求。 适用于多种电压输入范围&#xff08;2.7V-80V&#xff09;并具备效率&#xff08;达95%以上&#xff09;和工作频率&#xff08;1MHz&#xff…...

体验SmartEDA的高效与便捷,电子设计从未如此简单

SmartEDA&#xff1a;革新电子设计&#xff0c;让高效与便捷触手可及 在快节奏的现代生活中&#xff0c;科技日新月异&#xff0c;各行各业都在寻求更高效、更便捷的解决方案。对于电子设计行业而言&#xff0c;SmartEDA的出现&#xff0c;无疑是一场革命性的变革。它以其高效…...

LangChain笔记

很好的LLM知识博客&#xff1a; https://lilianweng.github.io/posts/2023-06-23-agent/ LangChain的prompt hub: https://smith.langchain.com/hub 一. Q&A 1. Q&A os.environ["OPENAI_API_KEY"] “OpenAI的KEY” # 把openai-key放到环境变量里&…...

金融序列的布朗运动

https://zhuanlan.zhihu.com/p/659164160 python金融衍生品定价系列之一 —— 布朗运动与伊藤公式 导语:网络上和书本上关于期权定价相关的内容已经较为丰富,但将理论和python代码结合起来讲的却很少,这也是python金融衍生品定价系列的写作初衷,在用python实现相关模型的同…...

利用ChatGPT辅助数学建模竞赛:理清思路、解题技巧与实战经验

导言 数学建模竞赛是许多学生在学术领域追求卓越的重要途径之一。然而,竞赛题目的复杂性常常让人望而生畏。在这样的情况下,利用人工智能工具,如ChatGPT,可以极大地辅助我们快速理清思路、解题技巧与实战经验。本文将探讨如何利用ChatGPT在数学建模竞赛中取得更好的成绩,…...

Java基础——Optional

Optional 类主要解决的问题是臭名昭著的空指针异常NPE&#xff08;NullPointerException&#xff09; 在 Java 8 之前&#xff0c;任何访问对象方法或属性的调用都可能导致 NullPointerException&#xff1a; String isocode user.getAddress().getCountry().getIsocode().to…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...