监控 Oracle 回滚段的最佳实践是什么?

监控 Oracle 回滚段的最佳实践是什么?

有时,我们会用尽回滚段空间,导致查询/更新失败。Oracle DBA 可以采取哪些最佳实践来确保主动监控这种情况并在发生问题之前采取适当的措施?

答案1

您使用的 Oracle 版本是什么?您使用的是手动回滚段吗?还是使用自动 UNDO 管理?如果您使用的 Oracle 版本较新(9i 或更高版本),您确实应该使用自动 UNDO 管理。

假设您使用自动 UNDO 管理,您实际上只需要知道数据库每单位时间生成多少 UNDO,以及需要执行的最长查询应该运行多长时间(或闪回查询需要回溯的最远时间)。然后,您只需将设置为UNDO_RETENTION最长查询运行时间,并调整UNDO表空间的大小以容纳该间隔内生成的所有 UNDO(尽管具体情况取决于特定的 Oracle 版本)。

从这里开始,DBA 可以相对轻松地监控 UNDO 保留率的变化。但是,DBA 可以监控运行时间最长的“实际”查询的变化,但可能更难,因为生产数据库经常会遇到可怕的失控查询,即有人试图获取报告并意外执行了笛卡尔连接或其他一些运行时间很长且成本极高的操作。DBA 可能无法判断是否存在运行时间更长的“实际”长时间运行的查询,或者这些长时间运行的查询是否真的只是错误。应用程序开发人员通常更容易与 DBA 协作来确定查询何时应该运行更长时间。这可能是开发人员知道的事情(例如,因为您正在部署一个预计会运行很长时间的新报告),也可能是开发人员记录在某处并与 DBA 定期审查的事情。

相关内容