`
zhangziyangup
  • 浏览: 1186393 次
文章分类
社区版块
存档分类
最新评论

undo系列学习之如何计算最优的undo_retention及undo_retention的初体验

 
阅读更多

undo_retention简单定义,就是最多数据的最少保留时间。AUM模式下,undo_retention参数用于事务commit后undo数据保留的时间。单位为秒。这是个no guarantee的限制。也就是,若空间足够,他只是个‘花瓶’;当可用空间不足而又有事务需要回滚空间,则这些数据依然会被覆盖。这个行为可能会导致ORA-01555错误,这些数据被记忆的时间可用v$undostat里面的字段TUNED_UNDORETENTION来查询。

很多时候,我们希望undo数据能够被留存,而不是被覆盖。那么在10g,oracle对undo增加了guarantee控制,也就是,用户可以指定undo表空间必须满足undo_retention的限制。

alter tablespace undotbs1 retention guarantee|noguarantee;


通过设置期望的保留时间,修改undo表空间属性,就可以使undo表空间运行在guarantee模式。下面我们用一个实验体验一下,noguarantee和guarantee有什么区别:

sys@ORCL> select tablespace_name,contents,retention from dba_tablespaces where tablespace_name like '%UNDOTBS%';

TABLESPACE_NAME                CONTENTS  RETENTION
------------------------------ --------- -----------
UNDOTBS1                       UNDO      NOGUARANTEE

sys@ORCL> alter system set undo_retention=800;

System altered.

sys@ORCL> alter tablespace undotbs1 retention guarantee;

Tablespace altered.

sys@ORCL> select tablespace_name,contents,retention from dba_tablespaces where tablespace_name like '%UNDOTBS%';

TABLESPACE_NAME                CONTENTS  RETENTION
------------------------------ --------- -----------
UNDOTBS1                       UNDO      GUARANTEE
将undo表空间自动扩展属性取消
sys@ORCL> select file_name,tablespace_name,bytes/1024/1024 m from dba_data_files where tablespace_name like '%UNDOTBS%';

FILE_NAME                                                                TABLESPACE_NAME                         M
------------------------------------------------------------------------ ------------------------------ ----------
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_8050fkc6_.dbf       UNDOTBS1                               30

sys@ORCL> alter database datafile '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_8050fkc6_.dbf' autoextend off;

Database altered.
尝试循环小批量删除数据,在guarantee设置下,很快会出现ORA-30036错误:
hr@ORCL> select count(*) from t;

  COUNT(*)
----------
   1462140

hr@ORCL> begin
  2        for i in 1..1000
  3       loop
  4         delete from t where rownum<1001;
  5          commit;
  6       end loop;
  7      end;
  7  /
begin
*
ERROR at line 1:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
ORA-06512: at line 4
hr@ORCL> select count(*) from t;

  COUNT(*)
----------
   14620000
而在修改了undo表空间retention属性后,删除可以顺利完成
hr@ORCL> begin
  2        for i in 1..1000 
  3       loop
  4         delete from t where rownum<1001;
  5         commit;
  6       end loop;
  7      end;
  8  /

PL/SQL procedure successfully completed.


undo_retention的设置可尽责于闪回功能。对于列的类型为LOB的,自动undo数据的记忆是不支持LOBs,必须设置undo_retention的值来尽力挽留之。oracle在undo segment header上创建一个retention table用于记录相关undo存储的提交时间,从而实现其保留策略。

最优的undo_retention如何计算?

模糊计算可以借助:

如果你的事务隔离级别是 serializable或read only ,你可以让undo_retention稍微长于最长运行的事务;
如果你的事务隔离级别是read commited,你可以让undo_retention稍微长于最长运行的语句(DML)。

精确计算可以借助公式:

我们需要选一段比较有代表性的时间段来测试,或者去多段,然后加权平均

 SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]",
 SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]",
 ROUND((d.undo_size / (to_number(f.value) *
 g.undo_block_per_sec)))"OPTIMAL UNDO RETENTION [Sec]"
 FROM (
 SELECT SUM(a.bytes) undo_size
 FROM v$datafile a,
 v$tablespace b,
 dba_tablespaces c
 WHERE c.contents = 'UNDO'
 AND c.status = 'ONLINE'
 AND b.name = c.tablespace_name
 AND a.ts# = b.ts#
 ) d,
 v$parameter e,
 v$parameter f,
 (
 SELECT MAX(undoblks/((end_time-begin_time)*3600*24))undo_block_per_sec
 FROM v$undostat
 ) g
 WHERE e.name = 'undo_retention'
 AND f.name = 'db_block_size'
 
 ACTUAL UNDO SIZE [MByte] UNDO RETENTION [Sec]            OPTIMAL UNDO RETENTION [Sec]

                      30    900                                                   40421
分享到:
评论

相关推荐

    达梦修改UNDO_RETENTION.zip

    本文将围绕“达梦修改UNDO_RETENTION”这一主题,详细探讨这一设置对数据库性能的影响及其调整方法。 UNDO RETENTION参数在数据库中扮演着至关重要的角色,它定义了撤销段(UNDO SEGMENT)中数据保留的时间长度。...

    oracle undo

    解决 undo 段急剧增大问题的方法有多种,例如,调整 undo_retention 的时间,调整 undo 段的大小,使用 v$transaction 视图来查看事务执行的时间,使用 v$undostat 视图来确定事务的 undo 块的使用情况。 steal ...

    UNDO表空间管理

    ### Oracle UNDO表空间管理详解 #### 一、概述 在Oracle数据库中,UNDO表空间扮演着极其重要的角色,特别是在事务处理与数据恢复方面。本文将深入浅出地介绍Oracle 10g/11g版本中的UNDO表空间管理机制。 #### 二...

    Oracle中重做undo表空间

    Undo表空间由一系列的undo段组成,每个undo段又包含多个undo块。当事务开始时,系统会为事务分配一段undo空间来记录它的更改。当事务提交或回滚时,这些记录的undo信息会根据需要保留一定时间,这个时间段称为UNDO_...

    oracle undo详解

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

    Oracle 面试宝典-undo.docx

    为了防止数据在undo_retention期间被覆盖,可以通过设置undo_tablespace的undo_retention参数来确保所需的Undo保留时间。 ORA-01555错误通常是因为Undo信息在需要时已被重用或删除,解决方法包括增加Undo表空间大小...

    undo表空间恢复

    标题和描述均提到了“undo表...综上所述,undo表空间的管理和恢复是Oracle数据库管理员必须掌握的关键技能之一,它直接影响到数据的完整性和系统的稳定性。通过合理配置和及时维护,可以有效提升数据库的性能和可靠性。

    数据库undo表空间问题集锦

    在Oracle数据库系统中,"undo表空间"是一个至关重要的组成部分,它主要负责存储事务的回滚(rollback)信息。本文将深入探讨undo表空间的概念、作用、管理以及常见问题的处理,帮助你全面理解并有效地解决数据库undo...

    如何计算自动管理的UNDO表空间大小

     因此,以下公式可用于计算佳 undo 表空间大小:  从 Oracle 10g 开始,您可以选择使用 GUARANTEE 选项,以确保在定义的 undo_retention 时间之前,undo 信息不会被覆盖。  UNDO表空间大小由三部

    Oracle 12c Undo数据管理分析.pptx

    2. Oracle 10g 引入了自动 Undo 保留(Autotune Undo Retention),系统会根据需要自动调整 Undo 的保留时间。 3. Oracle 12c R1 引入了共享 Undo 模式(Shared Undo Mode),在多租户容器数据库(CDB)中,多个可...

    oracle 收缩undo表空间

    ### Oracle收缩Undo表空间 #### 一、概述 在Oracle数据库管理中,有时需要对Undo表空间进行管理和优化。特别是当Undo表空间因为历史数据积累而变得过大时,可能会影响数据库性能。本文将详细介绍如何通过新建一个...

    管理undo表空间全面分析详解

    本文将从DML语句与undo的关系入手,深入探讨undo在Oracle数据库中的作用及管理方式。 #### 二、DML语句与undo 在执行DML(数据操纵语言)语句时,Oracle数据库会自动记录更改前的数据,以便于在需要时进行恢复或...

    Oracle Undo

    - `UNDO_RETENTION`参数控制Undo数据保留的时间,以秒为单位。 **切换Undo表空间**: - 可以通过`ALTER SYSTEM SET UNDO_TABLESPACE = undotbs02;`命令切换到新的Undo表空间。 - 切换后,原有的Undo表空间中的事务...

    OCA-042题库

    - 设置UNDO表空间的公式大致为:Undo Size = Undo Retention * UPS,其中UPS是Undo Blocks per Second。可以通过查询`v$undostat`视图来获取UPS值。 2. **Redo Log Files** - Redo日志文件与UNDO表空间不同,它们...

    oralce 闪回

    - 设置`db_flashback_retention_target`参数来指定保留UNDO数据的时间长度。 - `UNDO_MANAGEMENT`必须设置为自动模式(AUTO)。 - `UNDO_RETENTION`设置合适的值以确保有足够的UNDO数据用于闪回。 ##### 2. 表闪回...

    Less09_Undo_TB3.pdf

    - **保证撤销保留**: 可以通过设置参数 `undo_retention` 来保证撤销数据的保留时间。 #### 使用撤销顾问 (Undo Advisor) - **撤销顾问**: 提供有关撤销数据使用情况的信息,帮助管理员了解撤销表空间的性能,并...

    Oracle误删数据恢复.txt

    - **UNDO_RETENTION**: 这个参数决定了未提交事务的数据在UNDO表空间中保留的时间长度,以秒为单位。默认情况下,该值可能因系统而异,但通常为900秒(15分钟)或更长时间。这直接关系到误删数据后能否利用UNDO表空间...

    1z0-042

    - **选项E:UNDO_RETENTION参数的值**(The value of the UNDO_RETENTION parameter): UNDO_RETENTION参数决定了撤销数据在UNDO表空间中保留的时间长度。较高的值意味着需要更大的UNDO表空间以确保撤销数据可以在更...

Global site tag (gtag.js) - Google Analytics