【问题标题】:Life cycle of an Oracle Materialized viewOracle 物化视图的生命周期
【发布时间】:2012-10-02 16:34:47
【问题描述】:

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

Create materialized view foo
Refresh On Commit
...

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

【问题讨论】:

    标签: sql oracle materialized-views


    【解决方案1】:

    ON COMMIT 子句将 modify the commit process of all transactions that issue DML on a base table:

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

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

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

    您必须注意的一些事项:

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

    【讨论】:

    • 好的,很高兴知道。不使用On Commit 时有什么特别需要担心的吗?
    • @Woot4Moo 我添加了一些在使用 on-commit 时需要注意的事项。当您不使用 on-commit 时,Oracle 只会在您询问时刷新 MV(手动或通过计划的作业)。当基表被修改时,这些 MV 将变得陈旧。
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多