Popraw statystyki. Szacunkowa liczba wierszy to 1, ale rzeczywista liczba wierszy to ponad 7 milionów i ciągle rośnie. Powoduje to, że plan wykonania używa pętli zagnieżdżonej zamiast sprzężenia mieszającego. Pętla zagnieżdżona działa lepiej w przypadku małych ilości danych, a sprzężenie haszujące działa lepiej w przypadku dużych ilości danych. Naprawienie, które może być tak proste, jak upewnienie się, że odpowiednie tabele mają dokładne, aktualne statystyki. Zwykle można to zrobić, zbierając statystyki z ustawieniami domyślnymi, na przykład:exec dbms_stats.gather_table_stats('SIRS_UATC1', 'TBL_RECON_PM');
.
Jeśli to nie poprawi oszacowania kardynalności, spróbuj użyć dynamicznej wskazówki próbkowania, takiej jak /*+ dynamic_sampling(5) */
. W przypadku tak długotrwałego zapytania warto poświęcić trochę więcej czasu na wstępne próbkowanie danych, jeśli prowadzi to do lepszego planu.
Użyj paralelizmu na poziomie instrukcji zamiast paralelizmu na poziomie obiektu. Jest to prawdopodobnie najczęstszy błąd związany z równoległym SQL. Jeśli używasz równoległości na poziomie obiektu, wskazówka musi odwoływać się do aliasu obiektu. Od 11gR2 nie ma potrzeby martwić się określaniem obiektów. Ta instrukcja wymaga tylko jednej wskazówki:INSERT /*+ PARALLEL(16) APPEND */ ...
. Zwróć uwagę, że NOLOGGING
nie jest prawdziwą wskazówką.