1

我正在寻找 Oracle 物化视图的生命周期。例如语句:

Create materialized view foo
Refresh On Commit
...

每次提交到我的数据库时,是否会更新此视图,或者仅更新视图语句中引用的表之一?除此之外,Oracle 会在什么时候销毁旧缓存并用新缓存替换它?具体来说,物化视图的“陈旧”窗口是什么?意思是它取决于创建物化视图需要多长时间。

4

1 回答 1

2

ON COMMIT子句将修改在基表上发布 DML 的所有事务的提交过程

指定 ON COMMIT 以指示每当数据库提交在物化视图的主表上操作的事务时将发生快速刷新。此子句可能会增加完成提交所需的时间,因为数据库执行刷新操作是提交过程的一部分。

提交将取决于物化视图的刷新是否成功(这意味着提交可能会失败,因为无法刷新依赖的 MV)。

刷新发生在与发出提交的事务相同的事务中。这意味着一旦提交完成,所有会话都可以看到更改(因此数据永远不会过时)。

您必须注意的一些事项:

  • 使用 on-commit MV 有性能成本:物化视图日志(将 DML“触发器”添加到基表)增加了 DML 上的工作,显然提交将执行比平常更多的工作。对您的工作量进行基准测试,以确保额外的工作不会成为负担。
  • 在聚合的提交 MV 中,并发事务可以更新相同的 MV 行,这可能会导致在额外工作之上的提交期间出现一些争用。
  • 有些工具不希望提交失败,这可能会导致一些 UI 问题(通常是旧的客户端-服务器应用程序)。
于 2012-10-01T15:37:53.453 回答