我對優化物化視圖 (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 兩個引數(以便資料庫可以重新組織資料 - 如有必要)?還是沒有必要?
非常感謝你
親切的問候
喬治
uj5u.com熱心網友回復:
該imporatant點是限制到完全重繪 的MV。
這些MV是通過truncateandinsert或delete 重繪 的insert,因此建議歸結為一個簡單的宣告,即您不應該為將來 在完全重繪 ( PCTFREE = 0) 中發生的更新保留空間。
這將導致 MV 的大小減小。
PCTUSED在這種情況下不扮演 IMO角色,因為沒有后續插入。
這兩個引數在使用 明確更改之前都保持有效ALTER TABLE。
概括
如果您不確定重繪 策略,我永遠不會觸及這些引數。
如果你知道你只會使全refressh 和 你做了很多的全表掃描的MV-你可能會看到一個優化的效果。在進行正常的OLTP索引訪問和嵌套回圈連接時,MV您幾乎看不出有什么不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404901.html
標籤:
