我这边生产环境,一般undo表空间都会预先设置一个大小,并且保留数据文件的自动扩展,一直也相安无事。最近有套系统的undo表空间一直报警,使用率超过85%。看了下表空间大小,才5个G,以后确实是undo表空间过小了,于是扩到10G。结果第二天又报警了,嘿,不信了,于是扩到20g。哎呦,跟我杠上了,第二天又报警了。
没办法,生了个awr报告,看到到底是哪个倒霉孩子写的大事务一句一直不提交。哎呦我去,没有找到嫌疑语句,啥情况。找来开发人员,交流一下,不存在批量之类的业务。怪了。
查了下undo状态:select status,sum(bytes)/1024/1024/1024 from dba_undo_extents group by status;发现未过期的undo竟然占了表空间的百分之九十左右。但是我实时查看数据库状态,确实没有发现正在活动的大事务。于是怀疑,莫非是遇到undo方面的bug了,是不是存在未过期undo一直没释放的情况?
在MOS上看到一篇文档doc:413732.1,有如下解释:
When the UNDO tablespace is created with NO AUTOEXTEND, following the allocation algorithm, here is the explanation for this correct behavior:
For a fixed size UNDO tablespace (NO AUTOEXTEND), starting with 10.2, we provide max retention given the fixed undo space, which is set to a value based o