`
itspace
  • 浏览: 978635 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle 10g新特性之memory undo(imu)

阅读更多
 
  我们知道在Oracle 10g之前,Oracle执行事务之前必须在undo表空间记录事务的执行情况,如分配事务表(TX Table),分配undo block。进行这些操作必须将undo block读至buffer cache,这又会涉及到Oracle latch分配和latch pin等操作。Oracle为了实现一致性读取要求,假如undo block没在buffer cache,又需从undo表空间物理读取block,这些资源密集型操作势必影响其性能。从Oracle 10g开始,Oracle开始推出一新特性memory undo,即专门在shared pool中开辟内存处理事务,以下就简单研究一下In memory UNDO,简称imu,注意在RAC情况下imu不被支持,搜索metalink目前imu存在较多bug

研究平台为
引用
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production


Oralce 10g是否使用由隐含参数_in_memory_undo决定,默认情况为TRUE。
引用
_in_memory_undo                          TRUE                 Make in memory undo for top level transactions


此外imu还涉及以下参数
imu pool在shard_pool分配的个数,注意此参数和实际分配的个数不符,只作为阀值存在:
引用
_imu_pools                               3                    in memory undo pools

DBWR是否刷新imu pool:
引用
_db_writer_flush_imu                     TRUE                 If FALSE, DBWR will not downgrade IMU txns for AGING

递归操作是否启动imu:
引用
_recursive_imu_transactions              FALSE                recursive transactions may be IMU


基于以上参数我们再深入探索。
查看imu pool在shared_pool分配的大小,可以看到在shared_pool中分配了1235304 BYTES。
引用
SQL> select * from v$sgastat where name='KTI-UNDO';

POOL         NAME                                          BYTES
------------ ---------------------------------------- ----------
shared pool  KTI-UNDO                                    1235304

进一步通过X$KTIFP,可以查看每一个imu pool内存使用情况,可以看到目前系统中imu pool共为18个(为参数transactions*10%),每个pool大小为65535 bytes(对于32为系统为64k + 24bytes=65535 bytes,对于64位系统为128k + 1k=132096 bytes),可以看到pool大小为64k,所以imu只针对小事务使用。
引用
SQL> show parameter transactions

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
transactions                         integer     187
SQL> select KTIFPNO,KTIFPPSI from X$KTIFP;

   KTIFPNO   KTIFPPSI
---------- ----------
         0      65535
         1      65535
         2      65535
         3         16
         4      65535
         5      65535
         6      65535
         7      65535
         8      65535
         9      65535
        10      65535

   KTIFPNO   KTIFPPSI
---------- ----------
        11      65535
        12      65535
        13      65535
        14      65535
        15      65535
        16      65535
        17      65535

18 rows selected.


Oracle alert日志也可以看到分配给imu pool数量,用ILAT =18表示
引用
Autotune of undo retention is turned on.
IMODE=BR
ILAT =18
LICENSE_MAX_USERS = 0
SYS auditing is disabled


通过以下视图可以查看Oracle触发imu刷新内存的条件
引用
SQL> col INDX for 999
SQL> col KTIFFCAT for a50
SQL> select indx,ktiffcat,ktiffflc from X$KTIFF;
INDX KTIFFCAT                                             KTIFFFLC
---- -------------------------------------------------- ----------
   0 Undo pool overflow flushes                                  0
   1 Stack cv flushes                                        34142
   2 Multi-block undo flushes                                    0
   3 Max. chgs flushes                                       51607
   4 NTP flushes                                               492
   5 Contention flushes                                        679
   6 Redo pool overflow flushes                                  1
   7 Logfile space flushes                                       0
   8 Multiple persistent buffer flushes                          0
   9 Bind time flushes                                           0
  10 Rollback flushes                                         4945

INDX KTIFFCAT                                             KTIFFFLC
---- -------------------------------------------------- ----------
  11 Commit flushes                                         215244
  12 Recursive txn flushes                                   49992
  13 Redo only CR flushes                                        0
  14 Ditributed txn flushes                                      0
  15 Set txn use rbs flushes                                     0
  16 Bitmap state change flushes                             85557
  17 Presumed commit violation                                   0

18 rows selected.


当系统启用imu,部分事务即可通过imu提交。
引用
SQL> select name,value from v$sysstat where name like '%commits%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
user commits                                                          42785
IMU commits                                                           40411


当然了Oracle使用imu特性也是通过latch保护的,每一个imu pool都有相应的latch保护。每个事务独立的使用imu pool。
引用
SQL> select LATCH#,NAME,GETS,MISSES from v$latch where name ='In memory undo latch';

    LATCH# NAME                                           GETS     MISSES
---------- ---------------------------------------- ---------- ----------
       192 In memory undo latch                       14548635         74

SQL> select NAME,GETS,MISSES from v$latch_children where name='In memory undo latch';

NAME                                           GETS     MISSES
---------------------------------------- ---------- ----------
In memory undo latch                        2997946         31
In memory undo latch                         286606          4
In memory undo latch                        6641899         13
In memory undo latch                        4328804         13
In memory undo latch                         113778         13
In memory undo latch                         121081          0
In memory undo latch                          58811          0
In memory undo latch                              0          0
In memory undo latch                              0          0
In memory undo latch                              0          0
In memory undo latch                              0          0

NAME                                           GETS     MISSES
---------------------------------------- ---------- ----------
In memory undo latch                              0          0
In memory undo latch                              0          0
In memory undo latch                              0          0
In memory undo latch                              0          0
In memory undo latch                              0          0
In memory undo latch                              0          0
In memory undo latch                              0          0

18 rows selected.


简单总结:
Oracle 10g通过在shared_pool中开辟一小块内存,用来缓存未提交的小事务相关的undo block,然后通过一定的触发条件,有序批量的写出,有效的避免了不必要的读写操作,对于性能的提高启到了一定的作用。

0
0
分享到:
评论

相关推荐

    oracle10g新特性

    Oracle 10g 新特性详解 Oracle 10g 是 Oracle 数据库的一个重要版本,它引入了许多创新特性,显著提升了数据库的性能、可用性和管理效率。以下是对这些新特性的详细解析: 1. 回收站(Recyclebin): 在 Oracle 10...

    12c 新特性-Temporary Undo

    在Oracle 12c版本中引入了一项重要的新特性——Temporary Undo,这项技术旨在优化临时表的操作性能,并减少对Redo日志的空间占用。传统的临时表在进行更新操作时,虽然不会产生Redo条目,但相关的Undo信息仍然会被...

    oracle 10g经典实战

    oracle 10g 经典实战: oracle10g经典实战第1章Oracle_10g简介.ppt oracle10g经典实战第2章_数据库和表的创建.ppt ...oracle10g经典实战第9章_闪回操作和Undo.ppt oracle10g经典实战第10章_其他概念.ppt

    oracle 12C 新特性

    Oracle 12C 新特性 Oracle 12C 是 Oracle 数据库系统最新版本,其不同于其它版本的新特性给数据库开发人员和管理人员带来很大便利!本系列文章是 Oracle ACE 总监 Syed Jaffer Hussain 对 Oracle 数据库 12c 的一些...

    Oracle 10g 学习笔记

    │ oracle10g系统管理之UNDO表空间 - lvhuiqing的专栏 - CSDN博客.mht │ oracle10g系统管理之序列 - lvhuiqing的专栏 - CSDN博客.mht │ oracle10g系统管理之序列 - lvhuiqing的专栏 - CSDN博客.mht.lnk │ oracle...

    oracle 10g OCP 试题解析

    Oracle 10g OCP 047解析(精简版)可能是对某些特定主题或难点的集中解析,比如SQL查询的高级特性、PL/SQL编程、数据库架构设计、逻辑与物理备份的区别、闪回技术的运用、数据库性能问题诊断和解决方法等。精简版可能...

    Oracle的Temp表空间和UNDO表空间的处理

    CREATE UNDO TABLESPACE undotbs DATAFILE '/oracle/app/oracle/oradata/ora10g/undo01.dbf' SIZE 100M; ``` ##### 步骤二:切换到新的UNDO表空间 可以通过以下方式将数据库的UNDO表空间切换到新创建的表空间: -...

    oracle 10G 实验手册

    《Oracle 10G 实验手册》:深入解析Oracle闪回功能 Oracle 10G引入了一系列创新功能,其中最为显著的是闪回技术(Flashback)。这一特性在Oracle 9i的基础上进行了重大改进,极大地简化了数据库管理员(DBA)的工作...

    seata-oracle版undolog.sql

    oracle版本的undolog建表语句。 2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地...

    Oracle 11g数据库新特性与升级最佳实践

    ### Oracle 11g数据库新特性与升级最佳实践 #### Oracle 11g数据库新特性 **1. 分区** 自Oracle 8数据库以来,分区技术一直是Oracle数据库的重要组成部分,经历了十年的持续创新。Oracle 11g进一步扩展了分区功能...

    oracle undo

    Oracle UNDO 机制详解 Oracle UNDO 机制是 Oracle 数据库中的一种重要机制,用于记录和回滚事务的操作。UNDO 段是 Oracle 数据库中的一种特殊类型的段,用于存储事务的回滚信息。 undo 段的介绍 undo 段是 ...

    ORACLE redo undo.docx

    IMU(In Memory Undo) IMU 是一种基于内存的 undo 机制,通过在 shared pool 中开辟内存区域,大大减少了 undoSegments 的生成。IMU 可以提高 undo 机制的性能。 闪回查询 闪回查询是一种基于 undo 机制的查询方式...

    oracle undo详解

    Oracle数据库的Undo机制是其核心特性之一,它主要用于支持事务的回滚、读取一致性和闪回查询。本文将深入探讨Undo的详细功能及其优势。 首先,数据操纵语言(DML)包括INSERT、UPDATE、DELETE和MERGE等SQL语句,...

    脚本-Oracle释放过度使用的Undo表空间

    ### 关于Oracle释放过度使用的Undo表空间的知识点 在Oracle数据库管理中,Undo表空间扮演着极其重要的角色。它主要用于存储事务处理过程中产生的Undo记录,这些记录对于事务回滚、一致性读取以及恢复操作至关重要。...

    关于举办“Oracle10g OCP认证”培训班的通知

    Oracle 10g是Oracle数据库的一个重要版本,它引入了许多新特性,如自动内存管理、RMAN(Recovery Manager)以及数据闪回等,这些都在OCP认证培训中被详细讲解。 培训对象主要是数据库架构师、DBA、资深开发人员和...

    oracle的undo与redo

    此外,在Oracle 11g中,撤销段(Undo Segment)也被优化为可以动态增长,以适应不同的事务处理需求。 Oracle的这两种日志类型相互配合,确保了数据库的ACID(原子性、一致性、隔离性、持久性)特性得到实现。它们是...

Global site tag (gtag.js) - Google Analytics