物化视图在NEEDS_COMPILE状态下刷新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物化视图在NEEDS_COMPILE状态下刷新相关的知识,希望对你有一定的参考价值。
我是DB的新鲜蜜蜂。我们的prod服务器中有大量的Materialized-view。通过作业在存储过程中每3小时手动刷新所有视图。
在MV刷新发生的过去几周有一个问题,DB进入了Peek IO操作。 CPU利用率变大导致速度缓慢。
后来我们注意到,由于过去在核心表上进行了一些DML / DDL操作,大多数MV都处于NEED_COMPILE状态。当此状态发生实际刷新时,发现“找不到对象”错误。
请告诉我连接点以了解问题,
- 这种情况会导致偷看IO操作吗?
- 当MV本身处于NEED_COMPILE状态时,MV日志会发生什么?
- 当实际MV处于NEED_COMPILE状态时,MV日志是否导致IO操作?
答案
当您对主表执行DML / DDL操作时,转换到NEEDS_COMPILE状态是预期的行为。使用“REFRESH ON COMMIT”会得到不同的行为,因为这些MV与DML同时刷新。在该状态下,可以读取物化视图,但当然无法看到更新的记录。至于性能问题,请确保MV日志已正确编入索引(通常需要M_ROW $$和XID $$上的索引,其中XID $$替换自Oracle 11gR2以来的SNAPTIME $$)。可能需要更多索引来提高性能。至于“找不到对象”错误,您必须提交有关Oracle版本和您获得的确切日志的详细信息。
以上是关于物化视图在NEEDS_COMPILE状态下刷新的主要内容,如果未能解决你的问题,请参考以下文章