Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dlaczego nie mogę zmusić Oracle 11g do zużywania większej liczby procesorów dla pojedynczego zapytania SQL?

Najważniejszą rzeczą do zrozumienia w przypadku równoległości Oracle jest to, że jest to skomplikowane. Optymalizacja równoległości wymaga dużej wiedzy na temat Oracle, czytania podręczników, sprawdzania wielu parametrów, testowania długotrwałych zapytań i dużego sceptycyzmu.

Zadawaj właściwe pytania

Problemy równoległe w rzeczywistości obejmują trzy różne pytania:

  1. Ile serwerów równoległych zostało żądanych?
  2. Ile serwerów równoległych zostało przydzielonych?
  3. Ile serwerów równoległych zostało użytych w sensowny sposób?

Użyj najlepszych narzędzi

Przejdź od razu do najlepszego narzędzia — SQL Monitoring z aktywnymi raportami. Znajdź swój identyfikator SQL_ID i wygeneruj raport HTML:select dbms_sqltune.report_sql_monitor(sql_id => 'your_sql_id', type => 'active') from dual; . Tylko w ten sposób można dowiedzieć się, ile czasu poświęcono na każdy krok w planie realizacji. I powie Ci, ile paralelizmu skutecznie wykorzystano i gdzie. Na przykład:

Inną dobrą opcją jest type => 'text' . Nie zawiera aż tylu informacji, ale można je szybciej przeglądać i łatwiej się nimi dzielić.

Monitorowanie SQL obejmuje również żądany DOP i przydzielony DOP:

100-wierszowy równoległy select może działać pięknie, ale potem wszystko zatrzymuje się w jednym kroku z powodu niebuforowanej sekwencji. Możesz godzinami gapić się na plan wyjaśnienia, ślad lub raport AWR i nie widzieć problemu. Aktywny raport sprawia, że ​​powolne kroki są niemal trywialne. Nie trać czasu na zgadywanie, gdzie leży problem.

Jednak nadal potrzebne są inne narzędzia. Plan wyjaśnień wygenerowany za pomocą explain plan for ... i select * from table(dbms_xplan.display); dostarczy kilku kluczowych informacji. W szczególności Notes sekcja może zawierać wiele powodów, dla których zapytanie nie żądało równoległości.

Ale DLACZEGO mam taką liczbę serwerów równoległych?

Odpowiednie informacje znajdują się w kilku różnych podręcznikach, które są bardzo przydatne, ale czasami są niedokładne lub mylące. Istnieje wiele mitów i wiele złych rad na temat równoległości. A technologia zmienia się znacząco z każdym wydaniem.

Po zebraniu wszystkich renomowanych źródeł lista czynników wpływających na liczbę serwerów równoległych jest zdumiewająco długa. Poniższa lista jest uporządkowana według tego, co moim zdaniem jest najważniejszymi czynnikami:

  1. Równoległość między operacjami Każde zapytanie używające sortowania lub grupowania przydzieli dwa razy więcej serwerów równoległych niż DOP. Jest to prawdopodobnie odpowiedzialne za mit „Oracle przydziela jak najwięcej serwerów równoległych!”.
  2. Wskazówka dotycząca zapytania Najlepiej wskazówka na poziomie instrukcji, taka jak /*+ parallel */ lub ewentualnie wskazówka na poziomie obiektu, taka jak /*+ noparallel(table1) */ . Jeśli określony krok planu działa szeregowo, jest to zwykle spowodowane podpowiedziami na poziomie obiektu tylko w części zapytania.
  3. Rekursywny SQL Niektóre operacje mogą działać równolegle, ale można je skutecznie serializować za pomocą rekurencyjnego kodu SQL. Na przykład niebuforowana sekwencja na dużej wstawce. Rekursywny kod SQL wygenerowany w celu przeanalizowania instrukcji również będzie miał postać szeregową; na przykład dynamiczne zapytania próbkowania.
  4. Zmień sesję alter session [force|enable] parallel [query|dml|ddl]; Zauważ, że równoległy DML jest domyślnie wyłączony.
  5. Stopień tabeli
  6. Stopień indeksu
  7. Indeks był tańszy Równoległe wskazówki informują optymalizatora, aby rozważył pełne skanowanie tabeli z określonym DOP. W rzeczywistości nie wymuszają równoległości. Optymalizator może nadal korzystać z szeregowego dostępu do indeksu, jeśli uważa, że ​​jest to tańsze. (FULL wskazówka może pomóc rozwiązać ten problem.)
  8. Zarządzanie planem Plany bazowe SQL Plan, kontury, profile, zaawansowane przepisywanie i translatory SQL mogą zmieniać stopień równoległości za Twoimi plecami. Sprawdź sekcję Notatki planu.
  9. Wydanie Tylko wersje Enterprise i Personal umożliwiają wykonywanie operacji równoległych. Z wyjątkiem pakietu DBMS_PARALLEL_EXECUTE.
  10. PARALLEL_ADAPTIVE_MULTI_USER
  11. PARALLEL_AUTOMATIC_TUNING
  12. PARALLEL_DEGREE_LIMIT
  13. PARALLEL_DEGREE_POLICY
  14. PARALLEL_FORCE_LOCAL
  15. PARALLEL_INSTANCE_GROUP
  16. PARALLEL_IO_CAP_ENABLED
  17. PARALLEL_MAX_SERVERS To jest górna granica dla całego systemu. Tutaj jest kompromis. Uruchamianie zbyt wielu równoległych serwerów naraz jest szkodliwe dla systemu. Ale obniżenie wersji zapytania do szeregowego może być katastrofalne w przypadku niektórych zapytań.
  18. PARALLEL_MIN_PERCENT
  19. PARALLEL_MIN_SERVERS
  20. PARALLEL_MIN_TIME_THRESHOLD
  21. PARALLEL_SERVERS_TARGET
  22. PARALLEL_THREADS_PER_CPU
  23. Liczba węzłów RAC Kolejny mnożnik dla domyślnego DOP.
  24. CPU_COUNT Jeśli używany jest domyślny DOP.
  25. RECOVERY_PARALLELISM
  26. FAST_START_PARALLEL_ROLLBACK
  27. Profil SESSIONS_PER_USER ogranicza również serwery równoległe.
  28. Menedżer zasobów
  29. Obciążenie systemu Jeśli parametr Parallel_adaptive_multi_user ma wartość true. Prawdopodobnie niemożliwe do odgadnięcia, kiedy Oracle zacznie dławić.
  30. PROCESY
  31. Równoległe ograniczenia DML Równoległy DML nie będzie działał, jeśli którykolwiek z tych przypadków:
    1. ZGODNE <9.2 dla wewnątrz partycji
    2. WSTAW WARTOŚCI, tabele z wyzwalaczami
    3. replikacja
    4. integralność autoreferencyjna lub usuń kaskadowe lub odroczone ograniczenia integralności
    5. dostęp do kolumny obiektów
    6. tabela niepartycjonowana z LOB
    7. równoległość wewnątrz partycji z LOB
    8. transakcja rozproszona
    9. tabele w klastrach
    10. tabele tymczasowe
  32. Podzapytania skalarne nie działają równolegle? To jest w instrukcji i chciałbym, żeby tak był prawda, ale moje testy wskazują, że paralelizm działa tutaj w 11g.
  33. ENQUEUE_RESOURCES Ukryty parametr w 10g, czy to już ma znaczenie?
  34. Tabele zorganizowane według indeksu Nie można równolegle wstawić ścieżki bezpośredniej do obiektów IOT? (Czy to nadal prawda?)
  35. Wymagania dotyczące funkcji równoległego przetwarzania potokowego Należy użyć CURSOR (?). DO ZROBIENIA.
  36. Funkcje muszą być PARALLEL_ENABLE
  37. Rodzaj oświadczenia Starsze wersje ograniczały równoległość w DML w zależności od partycjonowania. Niektóre z aktualnych podręczników nadal to zawierają, ale z pewnością nie jest to już prawdą.
  38. Liczba partycji Tylko dla złączeń partycjonowanych w starszych wersjach.(?)
  39. Błędy W szczególności widziałem wiele błędów związanych z parsowaniem. Oracle przydzieli odpowiednią liczbę serwerów równoległych, ale nic się nie stanie, ponieważ wszystkie czekają na zdarzenia, takie jak cursor: pin s wait on x .

Ta lista z pewnością nie jest kompletna i nie obejmuje funkcji 12c. I nie rozwiązuje problemów z systemem operacyjnym i sprzętem. I nie odpowiada na strasznie trudne pytanie:„jaki jest najlepszy stopień równoległości?” (Krótka odpowiedź:więcej jest zwykle lepiej, ale kosztem innych procesów.) Mam nadzieję, że przynajmniej daje poczucie, jak trudne mogą być te problemy i jest dobrym miejscem do rozpoczęcia poszukiwań.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sposób na sprawdzenie gotowego sql . Oracle

  2. Praca ze zdarzeniami w Oracle Cloud Infrastructure Część 1:podstawy usługi

  3. Tworzenie timera w Oracle Forms / Forms 6i i wyświetlanie zegara

  4. Jak zainstalować Oracle na komputerze Mac

  5. Jak znaleźć tabelę, w której statystyki są zablokowane?