您好,欢迎访问一九零五行业门户网

Oracle UNDO 监控

oracle 10g及后续版本较以前版本有一新特性即自动调整undo retention时间,大大简便了管理,对于自动扩展(autoextend on)的und
oracle 10g及后续版本较以前版本有一新特性即自动调整undo retention时间,大大简便了管理,对于自动扩展(autoextend on)的undo表空间,参数undo_retention设置成为oracle自动调节undo retention的最低阀值。对于非自动扩展(autoextend off),非guarantee 的undo 表空间,oracle会根据undo表空间大小和v$undostat的历史信息(是否统计undo信息是由隐含参数 _collect_undo_stats决定的,默认情况为true)最大可能性保留undo信息。以最大化的减少类似ora-01555 等错误发生。在这种情况下的undo retention就基本没有用处了。默认情况下 _undo_autotune =true, 开启undo自动优化功能。经过优化的undo retention可以在v$undostat的  tuned_undoretention 中看到, 一般oracle每10分钟写一条unod表空间使用情况记录到v$undostat, 包括 tuned_undoretention 。
当然这一特性是由隐含参数_undo_autotune控制的,默认情况下设置为true,部分特殊情况下会将其设为false,如startup upgrade。
 如果参数设为false,oracle 不会根据表空间大小等自己调整undo retention大小,undo retention设置小时容易出现ora-01555 错误。比如表空间足够大,但还是会出现ora-01555。
在oracle 10g版本中可以使用v$undostat视图用于监控实例中当前事务使用undo表空间的情况。视图中的每行列出了每隔十分钟从实例中收集到的统计信息。每行都表示了在过去7*24小时里每隔十分钟undo表空间的使用情况,事务量和查询长度等信息的统计快照。
 undo表空间的使用情况会因事务量变化而变化,一般我们在计算时同时参考undo表空间的平均使用情况和峰值使用情况。
--------------------------------------------------------------------------------
rman备份与恢复之undo表空间丢失
关于oracle 释放过度使用的undo表空间
oracle undo的一些理解
oracle undo 镜像数据探究
oracle 回滚(rollback)和撤销(undo)
linux-6-64下安装oracle 12c笔记
在centos 6.4下安装oracle 11gr2(x64)
oracle 11gr2 在vmware虚拟机中安装步骤
debian 下 安装 oracle 11g xe r2
--------------------------------------------------------------------------------
以下sql语句用于计算过去7*24小时中undo表空间的平均使用量:
 col undo_retention for a15
 col db_block_size for a15
 select ur undo_retention, dbs db_block_size, ((ur * (ups * dbs))+(dbs * 24))/1024/1024 as m_bytes
 from (select value as ur from v$parameter where name = 'undo_retention'),
      (select (sum(undoblks) / sum(((end_time - begin_time) * 86400))) ups from v$undostat),
      (select value as dbs from v$parameter where name = 'db_block_size');
以下sql语句则按峰值情况计算undo表空间所需空间:
 col undo_retention for a15
 col db_block_size for a15
 select ur undo_retention, dbs db_block_size, ((ur * (ups * dbs)) + (dbs * 24)) / 1024 / 1024 as m_bytes
 from (select value as ur from v$parameter where name = 'undo_retention'),
      (select (undoblks / ((end_time - begin_time) * 86400)) ups from v$undostat where undoblks in (select max(undoblks) from v$undostat)),
      (select value as dbs from v$parameter where name = 'db_block_size');
需要注意因rac情况下一般存在2个undo表空间,视乎实际情况分别在2个实例中执行以上查询。
 一般来说为了尽可能维护日常业务的正常运行,我们建议按照峰值情况估算和分配undo表空间的大小,虽然这样存在存储空间上的浪费,但是可以避免undo表空间不足所带来的问题。
同时我们也可以使用dba_undo_extents视图实时监控undo表空间的使用情况:
 select sum(bytes)/1024/1024 mb, status, tablespace_name
 from dba_undo_extents
 group by status, tablespace_name order by 3, 2;
该查询将返回以status分组的各状态回滚信息所使用的空间量,一般存在三种status状态:expired,unexpired,active。active表示目前仍活跃的事务相关回滚信息,unexpired表示虽然事务已经结束但回滚信息保留的时间仍未超过实例参数undo_retention所设定的值,expired表示回滚信息保留时间已超过undo_retention所设定的值。
在undo表空间未启用guarantee选项的情况下(当前使用情况),新事务的回滚空间分配遵循以下依据:
 a) 寻找不存在active区间的回滚段,若没有则创建一个新的回滚段,若空间不允许生成新段,则返回错误。
 b) 如果有一个回滚段被选中,但是其中空闲的空间并不足以存储该事务的回滚信息,那么它将尝试创建区间,如果表空间上没有空间,那么将会进入下一步。
 c) 如果创建新区间失败,它将会搜索其他回滚段中的expired区间并重用。
 d) 如果其他回滚段中没有expired区间可使用,那么它会继续搜索其他回滚段中unexpired区间并重用,注意事务不会重用本回滚段中的unexpired区间,故unexpired的回滚空间仅部分可以为oracle重用;若仍得不到所需则返回错误。
当我们观察到active回滚信息所占用空间很大时,说明系统目前运行的事务繁忙。因目前未启用undo表空间的guarantee选项,故expired的全部回滚空间与unexpired的部分回滚空间可以为oracle复用,在实时监控时主要观察active状态回滚信息使用的空间即可。
在系统相关业务不变的情况下,我们通过计算undo表空间的峰值使用情况即可最大程度完善undo表空间的配置;而当系统处于业务调整阶段,如新的业务加入或业务时段调整情况下,则需要进一步实时监控undo表空间使用情况,以满足动态调整需求。
更多详情见请继续阅读下一页的精彩内容:

其它类似信息

推荐信息