Mithilfe eines MV-Protokolls ( Materialized View ) kann ein MV eine schnelle Aktualisierung durchführen, bei der nur die geänderten Daten geändert werden. Verschiedene Bedingungen verhindern jedoch, dass das MV das Protokoll verwendet, und erfordern daher eine vollständige Aktualisierung. Oracle implementierte eine vollständige atomare Aktualisierung als Löschen und Einfügen jedes Datensatzes. Dies geschieht auch dann, wenn letztendlich keine Änderungen an den Daten vorgenommen wurden.
Gibt es eine Möglichkeit, diese Replikation im Hinblick auf die Redo-Generierung intelligent zu machen ? Bei einem MERGE gefolgt von einem DELETE muss die Quelle zweimal abgefragt werden. Wäre es wert, die Daten in großen Mengen zu sammeln, um eine BULK MERGE und DELETE durchzuführen? Gibt es einen besseren Weg?
Aktualisieren:
Ich habe die Verwendung einer globalen temporären Tabelle als Staging-Bereich untersucht. Obwohl sie weniger als die Hälfte des Wiederherstellens verwenden, verwenden sie immer noch zu viel.
quelle
insert
Ops erzeugen viel weniger Rückgängig alsdelete
oderupdate
Ops (fast keine in der Tat). Mehrere GTTS zu haben, um teure Operationen zu vermeiden, könnte ein guter Ansatz seininsert
s um 60% zeigt . Dies entspricht genau den Ergebnissen, die ich sehe, und ist besser, aber nicht so gut, wie ich es gerne hätte.append
Hinweis) sind keine idealen Bedingungen für die Reduzierung von Wiederholungen. Ich habe einige Tests durchgeführt, um zu zeigen, was ich meine. Gepostet als Antwort, weil sie nicht in einen Kommentar passenAntworten:
Dies soll lediglich die Wiederholung der Verwendung verschiedener
insert
Vorgänge demonstrieren, anstatt die gesamte Frage zu beantworten. Die Ergebnisse meiner 10g-Instanz sind nicht zu 100% deterministisch, aber das Gesamtbild blieb bei jedem Durchlauf gleich.Für die Heap-Tabellen weiß ich nicht, warum die
insert /*+ append */
mehr Redo generiert.Prüfstand:
Prüfung:
Ergebnis:
quelle
Gute Frage. Ich habe dieses Problem für meine Situation vor einiger Zeit "gelöst", indem ich die MVs und alle Indizes auf ihnen NOLOGGING gemacht habe. Meine Situation hatte keinen Sinn - ich habe die Ansicht trotzdem vollständig aktualisiert. Warum sollte ich sie wiederholen müssen?
quelle