最近在梳理巡检和监控项,涉及到表空间的监控,本文主要讨论undo监控脚本和块分配过程。
1. undo怎么监控?
select status,sum(bytes)/1024/1024 size_m from dba_undo_extents group by status;
2. 为什么?
undo是一个可以重用的表空间,其中ACTIVE状态的空间是当前正在使用的,所以理论上我们只监控这部分空间使用即可,形象点可以看下图:
回到问题本身,为什么普通的表空间使用率脚本不适用UNDO?,因为v$filespace_usage 和dba_tablespace_usage_metrics 统计的都包含了active+unexpired数据所以理论上使用率经常会高于实际active的使用率。
3. 如何判断Undo非Active空间是否可用?
要明确一定,active的undo段肯定是不能重用,那么剩余的非active(expired+unexpired)正常情况都可以重用,这里就要注意了,如果出现不能重用那么有可能是两种原因(这里未讨论Retention Guarantee的情况,Retention Guarantee下的Unexpired Extents不能重用):
新的DML申请undo块草图,图太难看了,自己有点看不下去了,不过没找到合适方法表达,先贴上来便于理解吧。
已发起DML申请undo块草图
目前还没介绍ORA-01555,下一篇文章介绍。
参考文章:DBA_TABLESPACE_USAGE_METRICS and expired undo extents (Doc ID 1615851.1)
https://blog.toadworld.com/how-does-oracle-reuse-expired-and-unexpired-undo-extents