【问题标题】:Materialized View - PCTFREE and PCTUSED物化视图 - PCTFREE 和 PCTUSED
【发布时间】:2022-01-05 13:22:15
【问题描述】:

我有一些关于优化物化视图 (MV) 的问题:

在以下教程中建议将 PCTFREE 和 PCTUSED 设置为 0 或 99:

注意:如果物化视图完全刷新,则将其设置为 PCTFREE 为 0,PCTUSED 为 99,以获得最高效率。

--> https://satya-dba.blogspot.com/2009/07/materialized-views-oracle.html

第一个问题:

这个建议正确吗? PCTFREE 0和PCTUSED 99这两个参数是否应该相应设置?

MV更新的具体流程是怎样的?

MV 已创建(PCTFREE 0 和 PCTUSED 99 已相应设置):

 CREATE MATERIALIZED VIEW "SYSK85"."CMVF_01_SK85_BESTAND_2019" ("BRNR", "LEAT", "TLRTAL", "LEATSO", "STAND_DATUM", "VOAT", "AQEQ", "ELAT", "ELDT", "VSKN", "VTKZ", "ANZAHL")
 PCTFREE 0 PCTUSED 99
 NOCOMPRESS LOGGING
 NO INMEMORY 
 BUILD IMMEDIATE
 USING INDEX 
 REFRESH FORCE ON DEMAND
 ENABLE QUERY REWRITE
 AS (
 select BRNR, LEAT, TLRTAL, LEATSO, STAND_DATUM, VOAT, AQEQ, ELAT, ELDT, VSKN, VTKZ, count(*) as ANZAHL 
 from CVF_SK85_BESTAND_2019 GROUP BY BRNR, LEAT, TLRTAL, LEATSO, STAND_DATUM, VOAT, AQEQ, ELAT, ELDT, VSKN, VTKZ
);

第二个问题:

MV的Create是否应该设置PCTFREE 0和PCTUSED 99这两个参数?

但是如果MV更新了呢?

EXEC DBMS_MVIEW.REFRESH('CMVF_01_SK85_BESTAND_2019', 'C', atomic_refresh=>FALSE);

是否应该在更新后再次显式重置 PCTFREE 和 PCTUSED 两个参数(以便数据库可以重新组织数据 - 如有必要)?还是没有必要?

非常感谢

亲切的问候

乔治

【问题讨论】:

    标签: oracle performance


    【解决方案1】:

    重要的一点是限制MV的完全刷新。

    这样的MV 被truncate 和insert 或delete + insert 刷新,所以推荐 归结为一个琐碎 语句您不应该为未来更新保留空间,这些更新会在完全刷新时发生 (PCTFREE = 0)。

    这将导致 MV 的大小减小。

    PCTUSED 在这种情况下不扮演 IMO 角色,因为没有后续插入。

    在使用ALTER TABLE 明确更改它们之前,这两个参数都保持有效。

    总结

    如果您不确定刷新策略,我绝不会触及这些参数。

    如果您知道您只进行完全刷新 并且您会在MV 上进行大量全表扫描 - 您可以查看优化效果。虽然在MV 上执行正常的OLTP 索引访问和嵌套循环连接,但您几乎看不出有什么不同。

    【讨论】:

    • 非常感谢 Marmite 的帮助。那我就不自定义设置了,允许默认
    猜你喜欢
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2017-11-23
    相关资源
    最近更新 更多