我的用户正在启动一个带有链接子选择的丑陋的更新,这是一个在非常激烈的在线环境中共存的在线查询。
在跟踪中,我看到了所需 UNDO 保留的估计值,该估计值大约是我们当前 UNDO 保留的 10 倍。
作为一名新手 DBA,我的直觉告诉我优化查询可能会有所帮助并解决没有 ORA-01555 的 UPDATE。
我完全错了吗?
太感谢了!
我的用户正在启动一个带有链接子选择的丑陋的更新,这是一个在非常激烈的在线环境中共存的在线查询。
在跟踪中,我看到了所需 UNDO 保留的估计值,该估计值大约是我们当前 UNDO 保留的 10 倍。
作为一名新手 DBA,我的直觉告诉我优化查询可能会有所帮助并解决没有 ORA-01555 的 UPDATE。
我完全错了吗?
太感谢了!
Oracle 数据库 [独特地] 以查询/事务启动时的时间戳为基准运行所有查询。为了实现这一点,它会使用可用的撤消段,在内存中有效地将其使用的每个数据块“闪回”到该时间戳。如果撤消缓冲区中没有足够的数据来实现这一点,那就糟了!您会收到错误 ORA-01555。
因此,这是一个使用大量数据并需要很长时间才能完成的查询,因此它需要大量撤消才能将所有数据“恢复”到一致的时间戳。
哎哟!
需要明确的是,您的用户是否登录到生产数据库并执行更新查询?如果是这样,那么您将面临更大的问题。
希望这是他们在应用程序中运行的东西。如果是这样,那么这个问题应该在测试此应用程序及其查询
时发现,特别是性能测试。 如果您的开发人员没有这样做,他们应该这样做。
良好的直觉!
调整您的工作负载,而不是数据库。