Oracle中的IMU详解

1、概述 Oracle 10g InMemory Undo新特性: 通过以前的介绍,可知道Undo的管理方式和常规的数据管理方式是相同的,当进行数据修改时,会在Buffer中创建前镜像,同时会记录相应的Redo,然后这些Undo数据同样会写出到UNDO SEGMENT上,当进行一致性读或回滚时,

1、概述

Oracle 10g InMemory Undo新特性:

通过以前的介绍,可知道Undo的管理方式和常规的数据管理方式是相同的,当进行数据修改时,会在Buffer中创建前镜像,同时会记录相应的Redo,然后这些Undo数据同样会写出到UNDO SEGMENT上,当进行一致性读或回滚时,可能会产生大量的consistentgets和physical reads。注意到这里,Undo会产生Redo信息,又会写UNDO SEGMENT,进而又可能产生大量读取I/O,这些都是资源密集型操作。如果能够缩减Undo在这些环节的Redo与Undo写出,那么显然就可以极大地提升数据库性能,减少资源的消耗和使用。

从Oracle10g开始,Oracle在数据库中引入了In Memory Undo(可以被缩写为IMU)的新技术,使用这一技术,数据库会在共享内存中(Shared Pool)开辟独立的内存区域用于存储Undo信息,这样就可以避免Undo信息以前在Buffer Cache中的读写操作,从而可以进一步的减少Redo生成,同时可以大大减少以前的UNDO SEGMENT的操作。IMU中数据通过暂存、整理与收缩之后也可以写出到回滚段,这样的写出提供了有序、批量写的性能提升。

IMU机制与前面日志提到的PVRS紧密相关,由于每个IMU Buffer的大小在64~128KB左右,所以仅有特定的小事务可以使用,每个事务会被绑定到一个独立的空闲的IMU Buffer,同时相关的Redo信息会写入PVRS中,同样每个IMU Buffer会由一个独立的In Memory Undo Latch保护,当IMU Buffer或PVRS写满之后,数据库需要写出IMU中的信息。

一个新引入的隐含参数可以控制该特性是否启用,这个参数是_in_memory_undo,在Oracle 10g中这个参数的缺省值是TRUE(不同版本和平台参数的初始设置可能不同):

sys@TQGZS> @GetHidPar.sql
Enter value for par: _in_memory_undo
old   4: AND x.ksppinm LIKE ‘%&par%’
new   4: AND x.ksppinm LIKE ‘%_in_memory_undo%’
NAME                          VALUE               DESCRIB
—————————— ——————————————————————————–
_in_memory_undo               TRUE                Make in memory undo for top level transactions

IMU的内存在Shared Pool中分配,回想一下Redo Log Buffer的内存使用与功能,实际上IMU技术在某种程度上也是参考了Log Buffer的机制,通过以下查询可以获得系统当前分配的IMU内存:

sys@TQGZS> select * from v$sgastat where name =’KTI-UNDO’;
POOL        NAME                               BYTES
———— —————————— ———-
shared pool KTI-UNDO                         1235304

In Memory Undo池缺省的会分配3个,用以提供更好的并发:

sys@TQGZS> @GetHidPar.sql
Enter value for par: _imu_pool
old   4: AND x.ksppinm LIKE ‘%&par%’
new   4: AND x.ksppinm LIKE ‘%_imu_pool%’
NAME                          VALUE               DESCRIB
—————————— ——————————————————————————–
_imu_pools                    3                   in memory undo pools

IMU的使用信息,如提交次数可以通过V$SYSSTAT视图查询:

sys@TQGZS> select name,value from v$sysstat where name like ‘%commits’;
NAME                                  VALUE
—————————— ————-
usercommits                           2877
IMUcommits                            1549

新的内存Buffer通过In Memory Undo Latch来进行保护:

sys@TQGZS> select name,gets,misses,immediate_gets,sleeps
  2  from v$latch_children where name like ‘%undo latch’;
NAME                                GETS     MISSES IMMEDIATE_GETS    SLEEPS
—————————— ———- ———- ————– ———-
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undo latch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   0         0             0          0
In memory undolatch                   4         0             2          0
In memory undolatch                 214         0             25         0
In memory undolatch                6118         0           3064         0
In memory undolatch                4230         0           1084         0
In memory undolatch               39583         0          2842          0
18 rows selected.

除了前面提到的,还有几个隐含参数与IMU有关:
·_recursive_imu_transactions:控制递归事务是否使用IMU,该参数缺省值为False;

sys@TQGZS> @GetHidPar.sql
Enter value for par: _recursive_imu_transactions
old   4: AND x.ksppinm LIKE ‘%&par%’
new   4: AND x.ksppinm LIKE ‘%_recursive_imu_transactions%’
NAME                          VALUE               DESCRIB
—————————— ——————————————————————————–
_recursive_imu_transactions   FALSE               recursive transactions may be IMU

·_db_writer_flush_imu:控制是否允许DBWR将IMU事务的降级为常规事务,并执行UNDO SEGMENT的写出操作,缺省值为TRUE。

sys@TQGZS> @GetHidPar.sql
Enter value for par: _db_writer_flush_imu
old   4: AND x.ksppinm LIKE ‘%&par%’
new   4: AND x.ksppinm LIKE ‘%_db_writer_flush_imu%’
NAME                          VALUE               DESCRIB
—————————— ——————————————————————————–
_db_writer_flush_imu          TRUE                If FALSE, DBWR will not downgrade IMU txns for AGING

此外,在RAC环境中,IMU不被支持。

经过不同版本Oracle技术的不断演进,Oracle的内存管理已经和以前大为不同,现在Buffer Cache、Shared Pool、Log Buffer的内容正在不断交换渗透,Redo、Undo数据都可以部分地存储在共享池中,Oracle 11g的Result Cache也被记录在Shared Pool当中。

– The End –

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/463724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
怎么用VSCode建立Vue_VSCode创建Vue.js项目教程
上一篇 2025年11月8日 04:36:56
Mac上玩《节奏大师》攻略,如何在苹果电脑运行《节奏大师》
下一篇 2025年11月8日 04:36:57

相关推荐

  • linux vi命令详解

    linux vi命令详解 推荐:【Linux视频教程】 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里介绍一下它的用法和一部分指令。 由于 对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它…

    2026年8月28日
    000
  • linux安装oracle乱码

    方案:安装oracle中jre字体库的中文字体 1、下载字体文件 2、进入 database/stage/Components/oracle.jdk/1.6.0.75.0/1/DataFiles/目录 12c环境下,此文件夹下有 filegroup1.jar filegroup2.jar fileg…

    2026年8月28日
    300
  • 怎么给VSCode配置Java_VSCode搭建Java开发环境与项目设置教程

    答案:配置VSCode写Java需安装JDK和Java扩展包,设置环境变量与运行时路径,可高效开发并管理多项目。 要在VSCode里愉快地写Java代码,其实比你想象的要简单,核心就是两步:先搞定Java开发工具包(JDK),再安装VSCode官方提供的Java扩展包。这两样到位,大部分基础开发场景…

    2026年8月27日
    100
  • GreatSQL 8.4.4-4 GA (2025-10-15)

    GreatSQL 8.4.4-4 GA (2025-10-15) 版本信息 发布时间:2025年10月15日 版本号:8.4.4-4, Revision d73de75905d 下载链接:https://www.php.cn/link/b68f0b79fc8f10966e8642318429eab6…

    2026年8月27日
    300
  • 电脑java怎么安装 Windows系统Java环境搭建详细步骤

    在windows系统上搭建java环境需要两步:1)安装jdk:从oracle官网下载适合的版本,安装时选择安装jre,安装后用“java -version”验证;2)配置环境变量:设置java_home为jdk路径,将%java_home%bin添加到path中,配置后用“java -versio…

    2026年8月26日
    100
  • 「第一部:容器和Docker」(3) Docker相关术语

    在深入了解docker之前,有必要熟悉一些基本术语和概念。本节将介绍与docker相关的关键定义,并提供进一步了解的资源。 容器映像:这是一个包含创建容器所需的所有依赖项和信息的包。映像包含了容器运行时所需的所有依赖项(如框架)以及部署和执行配置。通常,一个映像从多个基础映像派生,这些基础映像层叠在…

    2026年8月26日
    000
  • RT-thread finsh移植到linux平台

    大家好,又见面了,我是你们的朋友全栈君。 目录 FinSH介绍 传统命令行模式 C 语言解释器模式 FinSH移植 移植要点 效果验证 代码下载 参考 在一次项目中, 需要进行嵌入式操作系统选型, 需求就是选择一款OS,既能满足当下项目的需要,又要考虑公司未来对物联网应用的扩展能力,对比了目前市面上…

    2026年8月26日
    100
  • Java中JDBC的作用是什么 详解JDBC规范统一数据库操作的优势

    Java中JDBC的作用是什么 详解JDBC规范统一数据库操作的优势Java中JDBC的作用是什么 详解JDBC规范统一数据库操作的优势Java中JDBC的作用是什么 详解JDBC规范统一数据库操作的优势Java中JDBC的作用是什么 详解JDBC规范统一数据库操作的优势

    jdbc通过提供标准api简化数据库操作。1. 加载数据库驱动,2. 建立数据库连接,3. 执行sql语句,4. 处理结果集。使用preparedstatement可有效防止sql注入攻击,同时对用户输入进行验证、过滤及采用最小权限原则进一步保障安全性。 JDBC(Java Database Con…

    2026年8月25日 用户投稿
    000
  • MySQL事务有哪些隔离级别_它们分别解决了什么问题?

    MySQL事务有哪些隔离级别_它们分别解决了什么问题?MySQL事务有哪些隔离级别_它们分别解决了什么问题?MySQL事务有哪些隔离级别_它们分别解决了什么问题?MySQL事务有哪些隔离级别_它们分别解决了什么问题?

    mysql的事务隔离级别主要有四种,分别解决不同的并发问题。1.读未提交(read uncommitted)允许脏读,不解决任何问题;2.读已提交(read committed)解决脏读,但存在不可重复读;3.可重复读(repeatable read)解决脏读和不可重复读,并通过间隙锁避免幻读;4.…

    2026年8月25日 用户投稿
    000
  • 深入理解CSS属性选择器并举例说明

    CSS属性选择器详解及应用示例 在CSS中,我们经常需要通过选择器来选取并修改特定的元素样式。除了常见的标签选择器(如div、p等),CSS还提供了属性选择器,可以根据元素的属性值来选择并修改样式。 本文将详细介绍CSS的属性选择器,并给出一些实际应用的示例。 一、属性选择器类型 立即学习“前端免费…

    2025年12月24日
    000
  • 动态加载css详解

    这次给大家带来动态加载css详解,动态加载css的注意事项有哪些,下面就是实战案例,一起来看一下。 一、方法引用来源和应用 此动态加载css方法 loadCss,剥离自Sea.js,并做了进一步的优化(优化代码后续会进行分析)。 因为公司项目需要用到懒加载来提高网站加载速度,所以将非首屏渲染必需的c…

    用户投稿 2025年12月24日
    000
  • css中px、em和rem使用详解

    相信每位前端工程师们都有这么一个体会,国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢?下面这篇文章小编就来给大家详细介绍关于css中px、em和rem的区别,需要的朋友可以参考借鉴,下面来一起看看吧。 前言 em 和 rem 都是灵活可扩展的单…

    用户投稿 2025年12月24日
    000
  • CSS双飞翼布局的详解

    这次给大家带来CSS双飞翼布局的详解,实现CSS双飞翼布局的注意事项有哪些,下面就是实战案例,一起来看一下。 双飞翼布局,就是两端固定宽高,中间自适应的三栏布局 先来张图,左边和右边的灰色块是固定宽高的,中间绿色的区域是宽高自适应 方式一:通过flex弹性布局来实现 看代码 //HTML结构,p2是…

    2025年12月24日
    100
  • CSS的三栏布局详解

    CSS的三栏布局详解CSS的三栏布局详解CSS的三栏布局详解CSS的三栏布局详解

    这次给大家带来CSS的三栏布局详解,CSS的三栏布局的注意事项有哪些,下面就是实战案例,一起来看一下。 本文介绍了CSS经典三栏布局方案,分享给大家,也给自己做个笔记,具体如下: 三栏布局,顾名思义就是两边固定,中间自适应。三栏布局在开发十分常见 1. float布局 最简单的三栏布局就是利用flo…

    2025年12月24日 用户投稿
    100
  • CSS的定位属性详解

    CSS的定位属性详解CSS的定位属性详解CSS的定位属性详解CSS的定位属性详解

    这次给大家带来CSS的定位属性详解,使用CSS定位属性的注意事项有哪些,下面就是实战案例,一起来看一下。 CSS的定位属性有三种,分别是绝对定位、相对定位、固定定位。 position: absolute; position: relative; position: fixed; 下面逐一介绍。 相…

    2025年12月24日 用户投稿
    100
  • px单位html5响应式方案详解

    移动端h5响应式方案最近这几年用得最多的最多的就是rem方案了。这个需要计算根元素的font-size来实现响应式。本文主要和大家介绍了px单位html5响应式方案的相关资料,希望能帮助到大家。 但这种方案也有一个缺点,那就是font-size不为整数的时候一些字体使用rem单位会导致字体显示的大小…

    用户投稿 2025年12月24日
    000
  • Css多行字符截取方法详解

    Css多行字符截取方法详解Css多行字符截取方法详解Css多行字符截取方法详解Css多行字符截取方法详解

    相信有很多同学在写前端页面的时候,都会遇到字符长了需要截取的问题,最简单的方法就是手动去截取,可这样又感觉太low了,今天晚上就来讲讲利用css进行字符的截取,不了解css是如何截取的同学可以和我们一起看看哦! 前言 最近在做响应式系统设计的时候遇到需要对标题进行多行文字截取的效果,如下图: 看似十…

    2025年12月24日 用户投稿
    100
  • CSS内边距外边距代码详解

    CSS内边距外边距代码详解CSS内边距外边距代码详解CSS内边距外边距代码详解CSS内边距外边距代码详解

    本文主要和大家分享css之内边距与外边距,本文运用了多个实例与代码,希望能帮助到大家。 外边距: margin 左边距 margin-left:数值 | autoauto:即距离这个边最远的距离右边距: margin-right:数值 | auto上边距: margin-top:数值 这里不能用au…

    2025年12月24日 用户投稿
    000
  • CSS常用的一些属性详解

    text-align: center”>CSS常用属性 ☛关于css属性个人建议查看手册更加详细方便,我这里就几种常用属性进行分类并简单取几个常用属性值,仅供跟我一样刚学习前端的人作为入门而用。  1.字体样式 字体的缩写,写法是font:font-style|| font-var…

    用户投稿 2025年12月23日
    000
  • CSS如何实现两端对齐详解

    前面的话   两端对齐在导航nav的制作中非常常用。本文将详细介绍css两端对齐的3种实现方式 flex   弹性盒模型flex作为强大的弹性布局方式,可以hold住大部分的布局效果,当然也包括两端对齐。可以使用主轴对齐justify-content的两端对齐属性space-between just…

    用户投稿 2025年12月23日
    000

发表回复

登录后才能评论
关注微信