实体化视图在 NEED_COMPILE 状态时刷新
Materialize view refresh when its on NEED_COMPILE state
我是DB的新蜜蜂。
我们的生产服务器中有大量的 Materialize-view。通过作业在存储过程中每 3 小时手动刷新所有视图。
过去几周当 MV 刷新时遇到问题,DB 转到 Peek IO 操作。 CPU 利用率变高导致运行缓慢。
后来我们注意到,由于过去对核心表进行了一些DML/DDL操作,所以MV大部分转为NEED_COMPILE状态。当实际刷新发生在此状态时,发现 "object not found" 错误已记录。
请建议我把点连接起来以了解问题,
- 这种情况会导致peek IO操作吗?
- 当 MV 本身处于 NEED_COMPILE 时,MV 日志会发生什么
状态?
- 当实际MV处于NEED_COMPILE状态时,MV日志是否会导致IO操作Peek?
当您对主表执行 DML/DDL 操作时,转换到 NEEDS_COMPILE 状态是预期的行为。使用 "REFRESH ON COMMIT" 您会得到不同的行为,因为这些 MV 与 DML 同时刷新。在那种状态下,可以读取物化视图,但是当然看不到更新的记录。至于性能问题,请确保 MV 日志已正确编制索引(通常需要 M_ROW$$ 和 XID$$ 上的索引,其中 XID$$ 从 Oracle 11gR2 开始替换 SNAPTIME$$。可能需要更多索引来提高性能。至于 "object not found" 错误,您必须提交有关 Oracle 版本的详细信息以及您获得的确切日志。
我是DB的新蜜蜂。 我们的生产服务器中有大量的 Materialize-view。通过作业在存储过程中每 3 小时手动刷新所有视图。
过去几周当 MV 刷新时遇到问题,DB 转到 Peek IO 操作。 CPU 利用率变高导致运行缓慢。
后来我们注意到,由于过去对核心表进行了一些DML/DDL操作,所以MV大部分转为NEED_COMPILE状态。当实际刷新发生在此状态时,发现 "object not found" 错误已记录。
请建议我把点连接起来以了解问题,
- 这种情况会导致peek IO操作吗?
- 当 MV 本身处于 NEED_COMPILE 时,MV 日志会发生什么 状态?
- 当实际MV处于NEED_COMPILE状态时,MV日志是否会导致IO操作Peek?
当您对主表执行 DML/DDL 操作时,转换到 NEEDS_COMPILE 状态是预期的行为。使用 "REFRESH ON COMMIT" 您会得到不同的行为,因为这些 MV 与 DML 同时刷新。在那种状态下,可以读取物化视图,但是当然看不到更新的记录。至于性能问题,请确保 MV 日志已正确编制索引(通常需要 M_ROW$$ 和 XID$$ 上的索引,其中 XID$$ 从 Oracle 11gR2 开始替换 SNAPTIME$$。可能需要更多索引来提高性能。至于 "object not found" 错误,您必须提交有关 Oracle 版本的详细信息以及您获得的确切日志。