Można użyć dziennika widoku zmaterializowanego (MV), aby umożliwić MV szybkie odświeżenie, które modyfikuje tylko zmienione dane. Jednak różne warunki uniemożliwiają MV korzystanie z dziennika i dlatego wymagają pełnego odświeżenia. Oracle zaimplementowało całkowite odświeżenie atomowe jako usunięcie i wstawienie każdego rekordu. Robi to, nawet jeśli ostatecznie nie ma żadnych zmian w danych.
Czy istnieje sposób na uczynienie tej replikacji inteligentną w odniesieniu do generowania powtórzeń ? MERGE, a następnie DELETE, wymaga dwukrotnego zapytania do źródła. Czy warto zbiorczo gromadzić dane, aby wykonać LICZBĄ POŁĄCZENIE i USUŃ? Czy jest lepszy sposób?
Aktualizacja:
Zbadałem, używając globalnego tymczasowego stołu jako obszaru przejściowego. Mimo że wykorzystują mniej niż połowę przeróbek, nadal używają ich za dużo.
źródło
insert
operacje generują znacznie mniej operacji cofaniadelete
lubupdate
operacji (prawie żadnych). Posiadanie wielu GTT, aby uniknąć kosztownych operacji, może być dobrym podejścieminsert
s. Jest to ściśle zgodne z wynikami, które widzę i jest lepsze, ale nie tak dobre, jak bym chciał.append
podpowiedzi) nie są idealnymi warunkami do ograniczenia powtarzania - uruchomiłem kilka testów, aby pokazać, co mam na myśli. Wysłany jako odpowiedź, ponieważ nie zmieści się w komentarzuOdpowiedzi:
Ma to na celu jedynie wykazanie ponownego użycia różnych
insert
operacji zamiast odpowiedzi na całe pytanie. Wyniki dla mojej instancji 10g nie są w 100% deterministyczne, ale szeroki obraz pozostał taki sam za każdym razem, gdy przechodziłem.W przypadku tabel sterty nie wiem, dlaczego
insert /*+ append */
wygenerowano więcej powtórzeń.testbed:
test:
wynik:
źródło
Dobre pytanie. „Rozwiązałem” ten problem dla mojej sytuacji jakiś czas temu, robiąc MV i wszelkie indeksy na nich NOLOGGING. Moja sytuacja nie miała sensu - i tak robię pełne odświeżenie widoku, dlaczego miałbym potrzebować przerobić?
źródło