物化视图 - PCTFREE 和 PCTUSED

Materialized View - PCTFREE and PCTUSED

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

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

Note: If a materialized view is complete refreshed, then set it's PCTFREE to 0 and PCTUSED to 99 for maximum efficiency.

--> 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 这两个参数是否应该在更新后再次显式重置(以便数据库可以重新组织数据 - 如有必要)?或者没有必要?

非常感谢

亲切的问候

乔治

重点是限制MV完全刷新

此类MVtruncateinsertdelete+insert刷新,所以建议 归结为一个 琐碎的 声明,即您不应该为 未来更新 保留 space ,这将在完全刷新时更新(PCTFREE = 0).

这将导致 MV 的大小减小。

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

这两个参数在使用 ALTER TABLE 明确更改之前一直有效。

总结

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

如果您知道您只进行全表刷新 ,那么您会进行很多全表扫描[= MV 上的 50=] - 您可能会看到 优化效果 。在 OLTP 上进行正常的 OLTP 索引访问和嵌套循环连接时,您几乎看不出有什么不同。