物化视图在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状态下刷新的主要内容,如果未能解决你的问题,请参考以下文章

PG 物化视图

如何获得oracle物化视图 定时刷新时 刷新所用的时间 或者是监控 物化视图在jobs中建立的job任务的执行时间

oracle物化视图不会自动更新是怎么回事

PostgreSQL物化视图刷新“堆叠”

Oracle设置物化视图的自动刷新

并发刷新物化视图