Oracle 10gr2的后续版本中添加了UNDO信息最短保留时间段自动调优的特性,不再仅仅依据参数UNDO_RETENTION的设定,其调优原则如下:
1. 当UNDO TABLESPACE为 fixed- size,Oracle将根据表空间的大小和历史使用情况,自动调整undo信息保存时间,同时忽略 undo_retention的值,除非 undo_retention的guarantee 特性被启用.
2. 当UNDO TABLESPACE为AUM时,Oracle将动态调整撤销信息最短保留时间为该时段最长查询时间(MAXQUERYLEN)加上300秒或参数UNDO_RETENTION间的较大者,即MAX((MAXQUERYLEN+300),UNDO_RENTION).
在自动调整启用的情况下,实际的撤销信息最短保留时间可以通过查询V$UNDOSTAT视图上的TUNED_UNDORETENTION列获得。往往最短保存时间远远大于设定的UNDO_RETENTION。
在无法就UNDO TABLESPACE做相应修改的情况,可以通过修改隐式参数”_UNDO_AUTOTUNE”为FALSE关闭该自动调优特性。以上设定生效后,V$UNDOSTAT视图上TUNED_UNDORETENTION列不再更新,且撤销信息最短保留时间固定为参数UNDO_RETENTION的设定值。该参数可以不用重启数据库而动态设置生效。
下面做实验说明undo自动调整的功能以及其弊端:注:实验环境中无他事务。
进行一个dml 语句不提交,查看dba_undo_extents 关于回滚段的信息,
YANG@yangdb-rac3> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 60
undo_tablespace string UNDOTBS1
YANG@yangdb-rac3> update bind set status='VALID' where wner='YANG';
5 rows updated.
YANG@yangdb-rac3> select segment_name ,tablespace_name,extent_id,status
2 from dba_undo_extents
3 where status='ACTIVE';
SEGMENT_NAME TABLESPACE_NAME EXTENT_ID STATUS
-------------------- --------------- ---------- ---------
_SYSSMU3_2097677531$ UNDOTBS1 2 ACTIVE
YANG@yangdb-rac3> commit;
Commit complete.
YANG@yangdb-rac3> --等待一分钟之后
YANG@yangdb-rac3> select segment_name ,tablespace_name,extent_id,status
2 from dba_undo_extents
3 where status='ACTIVE';
SEGMENT_NAME TABLESPACE_NAME EXTENT_ID STATUS
-------------------- --------------- ---------- ---------
_SYSSMU3_2097677531$ UNDOTBS1 2 UNEXPIRED
YANG@yangdb-rac3> --等待一分钟之后
YANG@yangdb-rac3> select segment_name ,tablespace_name,extent_id,status
2 from dba_undo_extents
3 where status='ACTIVE';
SEGMENT_NAME TABLESPACE_NAME EXTENT_ID STATUS
-------------------- --------------- ---------- ---------
_SYSSMU3_2097677531$ UNDOTBS1 2 UNEXPIRED
可以看到提交一分钟之后,回滚段_SYSSMU3_2097677531$的状态依然为UNEXPIRED,尽管undo_retention 设置为60s。本应该释放的undo却未被及时释放。其实这也是为什么生产环境中undo表空间总是接近100%的原因。
由之前的介绍oracle提供的undo自动调优技术,只是将undo_retention做为一个参考值,而实际设置的undo_retention时间有v$undostat.tuned_undoretention 而定,查看其信息;
YANG@yangdb-rac3> ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS' ;
Session altered.
YANG@yangdb-rac3> SELECT begin_time, end_time, tuned_undoretention FROM v$undostat;
BEGIN_TIME END_TIME TUNED_UNDORETENTION
------------------- ------------------- -------------------
2011/10/16 19:46:29 2011/10/16 19:56:29 1412 --进行查询时候的保留时间明显大于60s
2011/10/16 19:36:29 2011/10/16 19:46:29 2017
2011/10/16 19:26:29 2011/10/16 19:36:29 1416
2011/10/16 19:16:29 2011/10/16 19:26:29 2018
2011/10/16 19:06:29 2011/10/16 19:16:29 1418
2011/10/16 18:56:29 2011/10/16 19:06:29 2022
2011/10/16 18:46:29 2011/10/16 18:56:29 1421
2011/10/16 18:36:29 2011/10/16 18:46:29 2026
2011/10/16 18:26:29 2011/10/16 18:36:29 1425
2011/10/16 18:16:29 2011/10/16 18:26:29 2028



464 rows selected.

every coin has two sides,UNDO自动优化功能能够最大限度的使用undo表空间,满足大部分的sql执行,但是也带来一个问题:很多事务执行完毕之后,发现UNDO表空间会在很长时间都一直保持着使用率是接近100%的状态,active 状态的很少。这种接近状态还无法手工的收缩,甚至于重启数据库实例也无法缓解,而此时常常会收到undo表空间的监控报警。
此问题可以通过修改隐式参数” _UNDO_AUTOTUNE”为FALSE关闭该自动调优特性。以上设定生效后,V$UNDOSTAT视图的不再更新,且撤销信息最短保留时间固定为参数UNDO_RETENTION的设定值。该参数可以不用重启数据库而动态设置生效。禁用UNDO自动优化之后,Oracle不再的每十分钟记录一次当前UNDO使用情况了,在动态视图V$UNDOSTAT中也只保留禁止undo自动调优之前的数据:
YANG@yangdb-rac3> conn /as sysdba
Connected.
SYS@yangdb-rac3> alter system set "_undo_autotune"=false;
System altered.
YANG@yangdb-rac3>conn yang/yang
Connected.
YANG@yangdb-rac3>--10分钟之后
YANG@yangdb-rac3>SELECT count(1) FROM v$undostat;
COUNT(1)
----------
464 --还是之前的个数
YANG@yangdb-rac3>SELECT begin_time, end_time, tuned_undoretention FROM v$undostat where rownum =1;
BEGIN_TIME END_TIME TUNED_UNDORETENTION
------------------- ------------------- -------------------
2011/10/16 19:56:29 2011/10/16 20:08:11 1592
---
YANG@yangdb-rac3> SELECT begin_time, end_time, tuned_undoretention FROM v$undostat where rownum BEGIN_TIME END_TIME TUNED_UNDORETENTION
------------------- ------------------- -------------------
2011/10/16 19:56:29 2011/10/16 21:08:53 1592

上面两个是在不同时间进行的查询, v$undostat的记录不足每十分钟进行一次统计。
再次做一个实验:这次事务提交一分钟之后,undo段的状态变为EXPIRED
YANG@yangdb-rac3> UPDATE bind set status ='INVALID' where status='VALID';
72747 rows updated.
YANG@yangdb-rac3> ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS' ;
Session altered.
YANG@yangdb-rac3> select sysdate from dual;
SYSDATE
-------------------
2011/10/16 20:13:41
YANG@yangdb-rac3> commit;
Commit complete.

–提交时立即做查询:
YANG@yangdb-rac3> select segment_name ,tablespace_name,extent_id,status
2 from dba_undo_extents
3 where segment_name='_SYSSMU3_2097677531$' or status='ACTIVE';
SEGMENT_NAME TABLESPACE_NAME EXTENT_ID STATUS
-------------------- --------------- ---------- ---------
_SYSSMU9_1424341975$ UNDOTBS1 0 ACTIVE --活动状态
_SYSSMU9_1424341975$ UNDOTBS1 1 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 2 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 3 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 4 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 5 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 6 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 7 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 8 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 9 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 10 ACTIVE
_SYSSMU9_1424341975$ UNDOTBS1 11 ACTIVE
16 rows selected
YANG@yangdb-rac3> SELECT count(1) FROM v$undostat;
COUNT(1)
----------
464

–过1分钟多一些时间,再次查看undo回滚段的状态:
YANG@yangdb-rac3> SELECT begin_time, end_time, tuned_undoretention FROM v$undostat where rownum =1;
BEGIN_TIME END_TIME TUNED_UNDORETENTION
------------------- ------------------- -------------------
2011/10/16 19:56:29 2011/10/16 20:14:50 1592

YANG@yangdb-rac3> select segment_name ,tablespace_name,extent_id,status
2 from dba_undo_extents
3 where segment_name=’_SYSSMU9_1424341975$’ or status=’ACTIVE’;
SEGMENT_NAME TABLESPACE_NAME EXTENT_ID STATUS
——————– ————— ———- ———
_SYSSMU9_1424341975$ UNDOTBS1 0 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 1 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 2 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 3 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 4 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 5 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 6 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 7 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 8 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 9 EXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 10 UNEXPIRED
_SYSSMU9_1424341975$ UNDOTBS1 11 EXPIRED
12 rows selected.
可见,修改隐式参数” _UNDO_AUTOTUNE”为FALSE关闭该自动调优特性,可以解决表空间的使用率总是100%的问题。
附上DBA_UNDO_EXTENTS,STATUS的值及其意义:
ACTIVE 活动状态,说明当前这个数据区被某个正在进行的事务使用。
EXPIRED 已过期,说明已分配的数据区已经完成了它的使命,随时可以被分配给其它新的事务使用。
UNEXPIRED 未过期,说明分配的数据区已经不属于任何的活动事务,但是由于UNDO RETENTION设置的需要,一般情况下不会被回收重用。

转://Oracle undo 自动调优的更多相关文章

  1. Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  2. Oracle 内存参数调优设置

    Oracle 数据库系统中起到调节作用的参数叫初始化参数,数据库管理员根据实际情况需要适当调整这些 初始化参数以优化Oracle系统. 1 主要系统参数调优介绍 2 系统内存参数的分配 2.1 Ora ...

  3. dbms_sqltune.report_sql_monitor 自动调优

    --创建 dbms_sqltune.create_tuning_task ; --执行 dbms_sqltune.execute_tuning_task; --产看创建的task 和 status S ...

  4. oracle数据库性能调优

    一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子 ...

  5. oracle获取clob调优

    引用Oracle.DataAccess.dll,,在oracle 安装目录下的D:\oracle\product\10.2.0\db_1\ODP.NET\bin\1.x\Oracle.DataAcce ...

  6. Oracle调优总结(经典实践 重要)

    转载:http://langgufu.iteye.com/blog/1974211 Problem Description:1.每个表的结构及主键索引情况2.每个表的count(*)记录是多少3.对于 ...

  7. 【oracle11g,13】表空间管理2:undo表空间管理(调优) ,闪回原理

    一.undo空间原理: dml操作会产生undo数据. update时,sever process 会在databuffer 中找到该记录的buffer块,没有就从datafile中找并读入data ...

  8. 一个InnoDB性能超过Oracle的调优Case

    年前抽空到兄弟公司支援了一下Oracle迁移MySQL的测试,本想把MySQL调优到接近Oracle的性能即可,但经过 @何_登成 @淘宝丁奇 @淘宝褚霸 @淘伯松 诸位大牛的指导和帮助(排名不分先后 ...

  9. linux下TCP/IP及内核参数优化调优(转)

    Linux下TCP/IP及内核参数优化有多种方式,参数配置得当可以大大提高系统的性能,也可以根据特定场景进行专门的优化,如TIME_WAIT过高,DDOS攻击等等. 如下配置是写在sysctl.con ...

随机推荐

  1. Mac下写博客工具MarsEdit相关资料

    参考资料: https://www.maoshu.cc/967.html 下载地址: https://www.red-sweater.com/marsedit/ 博客园的配置: http://www. ...

  2. eclipse编写js代码没有提示

    安装插件 点击Help,选择Eclipse Marketplace... 搜索js,安装AngularJS Eclipse 重启eclipse,右键项目,选择Configure(配置),选择Conve ...

  3. jQuery插件之上传文件ajaxfileupload.js源码与使用

    在网页应用中,一般会用到上传文件或者图片什么的到服务器,那么可以用ajaxfileupload.js,但是在使用ajaxfileupload.js时候,当服务器返回的json带有&符号的时候, ...

  4. 洛谷P3245 [HNOI2016]大数(莫队)

    题意 题目链接 Sol 莫队板子题.. 维护出每个位置开始的字符串\(mod P\)的结果,记为\(S_i\) 两个位置\(l, r\)满足条件当且仅当\(S_l - S_r = 0\),也就是\(S ...

  5. h5笔记02

    Markdown 用普通文本描述富文本的语法 扩展名md,markdown 链接:http://wowubuntu.com/markdown/ 代表h标签 没有符号的代表段落 -符号代表无序列表 1. ...

  6. loadrunner 脚本优化-检查点设置

    脚本优化-检查点设置 by:授客 QQ:1033553122 VuGen判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的是HTTP状态为200 OK,那么VuGen就认为脚本正确地 ...

  7. 图说OOP基础(一)

    本文用图形化的形式描述OOP的相关知识.对OOP进行系统化的梳理,以便掌握,仅供学习分享使用,如有不足之处,还请指正. 涉及知识点: OOP的相关知识 OOP知识总图 [Object-Orientat ...

  8. Python高级特性:切片

    切片的目的是实现取一个list或tuple的部分元素 学习自廖雪峰,个人理解如下: 取列表L的前三个元素 >>> L = ['Michael', 'Sarah', 'Tracy', ...

  9. (办公)重新选择一个开发工具Eclipse

    文章Eclipse内容摘抄自w3cschool的eclipse,原文地址:https://www.w3cschool.cn/eclipse/eclipse-run-configuration.html ...

  10. Docker Data Center系列(四)- 离线安装UCP和DTR

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 离线安装UCP 1.1 可用版本 Version ...