我相信很多没有经验的人对如何处理latch中的撤销全局数据问题无能为力。为此,本文总结了问题产生的原因和解决方法,希望大家可以通过这篇文章来解决这个问题。
五一假期收到运维同学的微信,说应用报错,跟数据库有关。我发了一个截图,看到错误信息是无法获取下一个序列值。我以为是某个序列达到了最大值。请帮我找出是哪个序列。
所以我们查了dba_sequence,都没有达到最大值。
然后查看session的信息,查询v$session中的等待事件,发现大量的等待事件是“latch:撤销全局数据”。从事件的名称来看,应该是撤销的问题。
查询还原表空间的利用率,果然达到了100%。但是,撤销可以重用,除非非常大的事务占用整个撤销表空间,并且撤销表空间超过460 g,这不太可能是满的。
我在网上搜索了与latch:撤销全局数据相关的文章,其中一篇提到了MOS上的一个文档:顶级等待事件中的Latch:撤销全局数据(文档ID 1451536.1)
文档中描述的这种等待事件意味着大量会话试图找到新的撤消范围并窃取未到期的撤消范围。这种等待与隐式参数undo_autotune设置为FALSE时缺少UNDO空间有关。
当前数据库的_undo_autotune为FALSE,undo_retention=259200,相当于72小时。
首先理解隐式参数undo_autotune:
从10.2版开始,默认情况下,oracle会自动调整撤消保留。
根据您的还原表空间的大小和系统的繁忙程度(v$undostat中的信息)自动调整undo_retention参数,因此您通常会发现10g数据库上的还原表空间总是满的,因为当您的还原表空间中有空闲空间时,系统会自动增加undo_retention以保留更多的还原块。这种方法有利于长时间查询,但不适用于典型的OLTP系统。因为查询不太可能在OLTP上运行这么长时间,而且它还会导致上面在非常繁忙的OLTP上遇到的问题。
_undo_autotune=true,undo_retention不再适用。当_undo_autotune=false时,undo_retention会保留设定的时间。
通过以上解释,再加上五一假期的数据清理,大量UNDO被保留了72小时,最终导致UNDO表空间空间被占满,应用无法正常访问。
解决方案:
1.Set _undo_autotune=true,可以在线修改。
2.增加还原表空间的大小(调整现有数据文件的大小或增加数据文件)
3.关闭撤销保留参数
最后,undo_retention参数减少到43200(12小时),应用程序恢复正常。
参考:http://blog.itpub.net/4227/viewspace-1060723/
http://blog.csdn.net/dba_waterbin/article/details/8646982
看完以上内容,你是否掌握了latch中撤销全局数据问题的处理方法?如果您想学习更多技能或了解更多相关内容,请关注行业资讯频道,感谢您的阅读!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/86576.html