- 浏览: 978635 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
孤星119:
好熟悉的数据库字段啊, 上家公司做的项目每天都跟这些字段打招呼 ...
Oracle exp compress参数引起的空间浪费 -
itspace:
quxiaoyong 写道遇到个问题,网上一搜,全他妈这篇文章 ...
数据库连接错误ORA-28547 -
quxiaoyong:
遇到个问题,网上一搜,全他妈这篇文章。你转来转去的有意思吗?
数据库连接错误ORA-28547 -
hctech:
关于version count过高的问题,不知博主是否看过ey ...
某客户数据库性能诊断报告 -
itspace:
invalid 写道写的不错,我根据这个来安装,有点理解错误了 ...
AIX 配置vncserver
我们知道在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
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
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.
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
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.
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
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.
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,然后通过一定的触发条件,有序批量的写出,有效的避免了不必要的读写操作,对于性能的提高启到了一定的作用。
发表评论
-
buffer cache 的内部结构
2020-03-18 14:21 576BUFFER CACHE作为数据块的 ... -
Oracle OMC介绍
2020-03-18 13:19 484Oracle管理云服务(OMC)的大数据平台,自动收集的企业 ... -
参加Oracle勒索病毒防范专题培训会议
2019-09-27 17:15 5112019年7月22日,受邀参加Oracle勒索病毒防范专题培训 ... -
记一次内存换IO的Oracle优化
2019-09-27 16:50 826某客户数据库从P595物理 ... -
如何定位Oracle SQL执行计划变化的原因
2019-07-03 14:49 1458性能优化最难的是能够 ... -
如何定位Oracle SQL执行计划变化的原因
2018-10-30 09:24 1185性能优化最难的是能够 ... -
数据库性能优化目标
2018-10-08 10:59 518从数据库性能优化的场 ... -
数据库无法打开的原因及解决办法
2018-10-05 20:45 2117数据库的启动是一个相当复杂的过程。比如,Oracle在启动之前 ... -
怎么样彻底删除数据库?
2018-09-18 11:10 598Oracle提供了drop database命令用来删除数据库 ... -
Oracle减少日志量的方法
2018-09-10 10:17 865LGWR进程将LOG BUFFER中的 ... -
如何快速关闭数据库
2018-09-09 13:14 1231“一朝被蛇咬,十年怕井绳”。在没被“蛇”咬之前,很多DBA喜欢 ... -
关于《如何落地智能化运维》PPT
2018-05-17 10:19 1128在DTCC 2018发表《如何落地智能化运维》演讲,主要内容如 ... -
记录在redhat5.8平台安装oracle11.2容易忽视的几个问题
2018-05-11 19:58 577问题一:ping不通问题 在虚拟机上安装好linux系统后, ... -
《Oracle DBA实战攻略》第一章
2018-05-11 10:42 945即日起,不定期更新《OracleDBA实战攻略》一书电子版,请 ... -
Oracle 12c新特性
2018-05-11 10:33 898查询所有pdb [oracle@gj4 ~]$ sqlplu ... -
关于修改memory_target的值后数据库无法启动的问题
2017-02-28 12:24 3981操作系统:RHEL6.5 数据库版本:11.2.0.4 ... -
10g rac安装error while loading shared libraries libpthread.so.0 问题
2017-02-28 12:22 69311g rac安装在二节点跑脚本一般会报此错误: 解决这个问 ... -
记一次Oracle会话共享模式故障处理过程
2017-02-27 19:16 798故障简述 XXX第八人民医院HIS数据库7月13日11点左右从 ... -
RESMGR:cpu quantum等待事件处理过程
2017-02-27 18:23 2615由于数据库上线过程中出现大量的RESMGR:cpu quant ... -
谈谈log file sync
2014-03-19 14:18 1757数据库中的log file sync等待事件指的是,当user ...
相关推荐
Oracle 10g 新特性详解 Oracle 10g 是 Oracle 数据库的一个重要版本,它引入了许多创新特性,显著提升了数据库的性能、可用性和管理效率。以下是对这些新特性的详细解析: 1. 回收站(Recyclebin): 在 Oracle 10...
在Oracle 12c版本中引入了一项重要的新特性——Temporary Undo,这项技术旨在优化临时表的操作性能,并减少对Redo日志的空间占用。传统的临时表在进行更新操作时,虽然不会产生Redo条目,但相关的Undo信息仍然会被...
oracle 10g 经典实战: oracle10g经典实战第1章Oracle_10g简介.ppt oracle10g经典实战第2章_数据库和表的创建.ppt ...oracle10g经典实战第9章_闪回操作和Undo.ppt oracle10g经典实战第10章_其他概念.ppt
Oracle 12C 新特性 Oracle 12C 是 Oracle 数据库系统最新版本,其不同于其它版本的新特性给数据库开发人员和管理人员带来很大便利!本系列文章是 Oracle ACE 总监 Syed Jaffer Hussain 对 Oracle 数据库 12c 的一些...
│ oracle10g系统管理之UNDO表空间 - lvhuiqing的专栏 - CSDN博客.mht │ oracle10g系统管理之序列 - lvhuiqing的专栏 - CSDN博客.mht │ oracle10g系统管理之序列 - lvhuiqing的专栏 - CSDN博客.mht.lnk │ oracle...
Oracle 10g OCP 047解析(精简版)可能是对某些特定主题或难点的集中解析,比如SQL查询的高级特性、PL/SQL编程、数据库架构设计、逻辑与物理备份的区别、闪回技术的运用、数据库性能问题诊断和解决方法等。精简版可能...
CREATE UNDO TABLESPACE undotbs DATAFILE '/oracle/app/oracle/oradata/ora10g/undo01.dbf' SIZE 100M; ``` ##### 步骤二:切换到新的UNDO表空间 可以通过以下方式将数据库的UNDO表空间切换到新创建的表空间: -...
《Oracle 10G 实验手册》:深入解析Oracle闪回功能 Oracle 10G引入了一系列创新功能,其中最为显著的是闪回技术(Flashback)。这一特性在Oracle 9i的基础上进行了重大改进,极大地简化了数据库管理员(DBA)的工作...
oracle版本的undolog建表语句。 2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地...
### Oracle 11g数据库新特性与升级最佳实践 #### Oracle 11g数据库新特性 **1. 分区** 自Oracle 8数据库以来,分区技术一直是Oracle数据库的重要组成部分,经历了十年的持续创新。Oracle 11g进一步扩展了分区功能...
Oracle UNDO 机制详解 Oracle UNDO 机制是 Oracle 数据库中的一种重要机制,用于记录和回滚事务的操作。UNDO 段是 Oracle 数据库中的一种特殊类型的段,用于存储事务的回滚信息。 undo 段的介绍 undo 段是 ...
IMU(In Memory Undo) IMU 是一种基于内存的 undo 机制,通过在 shared pool 中开辟内存区域,大大减少了 undoSegments 的生成。IMU 可以提高 undo 机制的性能。 闪回查询 闪回查询是一种基于 undo 机制的查询方式...
Oracle数据库的Undo机制是其核心特性之一,它主要用于支持事务的回滚、读取一致性和闪回查询。本文将深入探讨Undo的详细功能及其优势。 首先,数据操纵语言(DML)包括INSERT、UPDATE、DELETE和MERGE等SQL语句,...
### 关于Oracle释放过度使用的Undo表空间的知识点 在Oracle数据库管理中,Undo表空间扮演着极其重要的角色。它主要用于存储事务处理过程中产生的Undo记录,这些记录对于事务回滚、一致性读取以及恢复操作至关重要。...
Oracle 10g是Oracle数据库的一个重要版本,它引入了许多新特性,如自动内存管理、RMAN(Recovery Manager)以及数据闪回等,这些都在OCP认证培训中被详细讲解。 培训对象主要是数据库架构师、DBA、资深开发人员和...
此外,在Oracle 11g中,撤销段(Undo Segment)也被优化为可以动态增长,以适应不同的事务处理需求。 Oracle的这两种日志类型相互配合,确保了数据库的ACID(原子性、一致性、隔离性、持久性)特性得到实现。它们是...