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

相关推荐

  • HTML的语法详解

    这次给大家带来html的语法详解,怎么使用html的语法?使用html语法的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是HTML标记语言? HTML是表示网页信息的符号标记语言。 2.HTML的标记和他的属性 1.HTML文档的保存格式:.html、.htm、.xhtml 立即学习“前端…

    用户投稿 2026年5月10日
    000
  • php实现哪些功能

    PHP是一种通用脚本语言,可用来实现广泛的功能,包括:动态Web开发:生成响应用户请求的动态 веб页面。内容管理系统(CMS):构建允许用户管理网站内容的CMS。电子商务:开发具有购物车、订单处理和支付网关集成的电子商务网站。服务器端编程:编写命令行脚本和工具。文件操作:创建、读取、写入和删除文件…

    2026年5月10日
    000
  • CSS常用的一些属性详解

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

    用户投稿 2026年5月10日
    000
  • SQL查询:精确判断事件过期,结合日期与时间列

    本文旨在解决数据库中事件过期判断不精确的问题,特别是当事件的过期日期和时间分别存储在不同列时。我们将探讨两种主流的sql查询策略:一种是利用逻辑运算符`or`和`and`进行分情况判断,另一种是通过合并日期和时间列为单一时间戳进行直接比较。文章将详细阐述每种方法的实现方式、适用场景及相关注意事项,确…

    2026年5月10日
    100
  • HTML表单如何实现白名单功能?怎样只允许授权用户?

    要实现%ignore_a_1%的白名单功能并确保只有授权用户操作,核心答案是必须依赖后端服务器进行严格的身份认证、会话管理、授权检查和数据验证,前端仅能提供用户体验层面的初步提示而不能保障安全;具体而言,首先通过用户身份认证(如用户名/密码或oauth)确认用户身份,服务器创建会话并返回标识符,后续…

    2026年5月10日
    800
  • 如何用C#实现数据库的跨平台迁移?使用EF Core工具?

    使用EF Core实现跨平台数据库迁移,需定义实体与DbContext,通过动态配置不同数据库提供程序,利用EF Core CLI生成并应用迁移,结合Fluent API处理数据库差异,确保结构与数据兼容。 要实现数据库的跨平台迁移,C# 中最常用且高效的方式是使用 Entity Framework…

    2026年5月10日
    000
  • Python连接MySQL 5.1:克服旧版认证与字符集兼容性挑战

    本教程详细阐述了如何使用Python 3和mysql.connector库成功连接到老旧的MySQL 5.1数据库。文章重点介绍了解决旧版认证协议和字符集兼容性问题的关键配置,特别是use_pure=True和charset=’utf8’的重要性,并提供了可运行的代码示例。同…

    2026年5月10日
    000
  • 想提升IT技能?哪些含金量高的认证值得考?

    it职业发展:高含金量认证助您成功 想在IT领域提升竞争力?选择合适的认证至关重要。本文推荐几项国内外认可度高的IT认证,助您在职业道路上更进一步。 热门认证推荐: 1. 高级软件设计师(软考高级): 国内IT领域含金量最高的认证之一。涵盖软件工程、项目管理及计算机基础知识。证明您在软件设计和开发方…

    2026年5月10日
    000
  • 什么是资产代币化(Asset Tokenization)?它如何将现实世界资产带入区块链?

    资产代币化是通过区块链将房产、股票等实体资产权益转化为可分割的数字代币。首先选择目标资产并由合规机构确权估值,随后在链上发行对应代币并通过智能合约绑定权益比例,实现自动化分红与转让。为确保真实性,引入第三方审计和去中心化预言机同步链下数据,资金流由托管账户与链上地址联动记录,提升透明度。代币化降低投…

    2026年5月10日
    000
  • MySQL、PostgreSQL、SQL Server和Oracle中空字符串、数字0和NULL占用空间有何区别

    不同数据库系统中空字符串、数字0和NULL的存储空间差异 本文比较了MySQL InnoDB、PostgreSQL、SQL Server和Oracle数据库中,空字符串(”)、数字0和NULL值在磁盘上所占用的空间大小。 MySQL InnoDB存储引擎: 整型字段: NULL: 不占用…

    2026年5月10日
    000
  • html文档中含有java怎么运行_html含java运行方法【教程】

    现代浏览器不支持Java Applet,推荐通过JavaScript调用Java后端服务或使用WebAssembly运行Java代码。 如果您在HTML文档中嵌入了Java代码,但发现无法正常运行,这通常是因为现代浏览器不再支持Java小程序(Applet)或相关插件。以下是几种实现HTML中Jav…

    2026年5月10日
    000
  • php主要运用哪些东西

    PHP 是一种通用脚本语言,主要用于 Web 开发,包括创建动态网页、网站框架和内容管理系统。此外,它还支持 Web 服务(RESTful 和 SOAP)、数据库操作、命令行脚本、桌面应用程序和图像处理。 PHP 语言的主要应用 PHP(超文本预处理器)是一种广泛应用的通用脚本语言,主要用于 Web…

    2026年5月10日
    100
  • 深入理解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日
    000
  • CSS的三栏布局详解

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

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

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

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

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

    2025年12月24日 用户投稿
    200
  • 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日 用户投稿
    000

发表回复

登录后才能评论
关注微信