如何处理latch中undo全局数据问题

分类:编程技术 时间:2024-02-20 16:00 浏览:0 评论:0
0
相信很多没有经验的人对于如何处理latch中的undo全局数据问题一头雾水。本文总结了问题的原因和解决方案。通过这篇文章,希望你能解决这个问题。

五一假期期间,收到一位运维同学的微信消息,说应用报错,与数据库有关。我发送了屏幕截图,发现错误消息是“无法获取下一个序列值”。我认为某个序列已经达到了最大值。请帮我看看这是什么序列。

于是我检查了dba_sequences,发现没有序列达到最大值。

于是查看了session信息,查询了v$session中的等待事件,发现大量的等待事件是“latch: undo global data”。从事件名称来看,应该是undo问题。

查询undo表空间的使用率,结果是需要达到 100%。然而,除非一个非常大的事务占用了整个undo表空间,否则undo可以被重用。 undo表空间有460多G,不太可能满。

在网上搜索了latch: undo global data相关的文章,其中一篇提到了MOS上的一篇文档:“LATCH: UNDO GLOBAL DATA” In The Top Wait Events(文档ID 1451536.1)

p >

文档描述这个等待事件意味着大量的会话正在试图寻找新的undoextent并窃取未过期的undoextent。此等待与隐式参数 _undo_autotune 设置为 FALSE 时 UNDO 空间不足有关。

当前数据库的_undo_autotune确实为FALSE,undo_retention=259200,换算为72小时。

首先了解一下隐含参数_undo_autotune:

从10.2版本开始,Oracle默认采用自动调整undo保留的方法

根据你的数据库大小undo tablespace 而系统的繁忙程度(v$undostat中的信息)会自动调整undo_retention参数,所以在10g的数据库上你经常会发现undo表空间总是满的,因为当你undo tablespace有空闲空间时,系统会自动增加undo_retention 保留更多撤消块。此方法适用于长查询,但不适用于典型的 OLTP 系统。因为不太可能在OLTP上运行这么长的查询,而且在非常繁忙的OLTP上也会导致上述问题。

当_undo_autotune=true时,undo_retention不再适用。当_undo_autotune=false时,undo_retention保留设定的时间。

通过上述解释,加上五一假期期间的数据清理工作,导致大量undo保留了72小时,最终导致undo表空间满,应用程序无法启动可以正常访问。

解决方案:

1.设置_undo_autotune=true,即h可以在线修改

2.增加undo表空间大小(调整现有数据文件大小或增加数据文件)

3.减小undo_retention参数

最后将undo_retention参数设置为43200(12小时),应用恢复正常。

参考:http://blog.itpub.net/4227/viewspace-1060723/

http://blog.csdn.net/dba_waterbin/article/details/8646982< /p>

看完上面的内容,你明白latch中undo全局数据问题是如何处理的了吗?如果您想学习更多技能或者想了解更多相关内容,请关注行业资讯频道。感谢您的阅读!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何处理latch中undo全局数据问题

用户评论