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

Czy istnieje sposób na zmuszenie Oracle do zmiany planu zapytania bez korzystania z podpowiedzi?

Istnieje co najmniej 11 sposobów kontrolowania planu bez modyfikowania zapytania. Są one wymienione poniżej z grubsza w kolejności przydatności:

  1. Podstawa planu SQL - Zastąp jeden plan innym planem.
  2. Profile SQL - Dodaj „korektywne” wskazówki do planów. Na przykład profil może powiedzieć „to połączenie zwraca 100 razy więcej wierszy niż oczekiwano”, co pośrednio zmienia plan.
  3. Przechowywany konspekt - Pomysł podobny do SQL Plan Baseline, ale z mniejszą liczbą funkcji. Ta opcja jest prostsza w użyciu, ale mniej wydajna i nie jest już obsługiwana.
  4. DBMS_STATS.SET_X_STATS - Ręczne modyfikowanie statystyk tabel, kolumn i indeksów może znacząco zmienić plany, sprawiając, że obiekty sztucznie wyglądają na mniej lub bardziej kosztowne.
  5. Kontrola sesji - Na przykład alter session set optimizer_features_enable='11.2.0.3'; . Nie zawsze są pomocne parametry. Ale jeden z parametrów OPTIMIZER_* może pomóc lub możesz zmienić plan za pomocą nieudokumentowanej wskazówki lub wyłączyć funkcję taką jak ta:alter session set "_fix_control"='XYZ:OFF';
  6. Kontrola systemu - Podobnie jak powyżej, ale dotyczy całego systemu.
  7. DBMS_SPD - Dyrektywa SQL Plan jest podobna do profilu, ponieważ zapewnia optymalizatorowi pewne informacje korygujące. Ale to działa na niższym poziomie, we wszystkich planach i jest nowością w 12c.
  8. DBMS_ADVANCED_REWRITE - Zmień zapytanie na inne zapytanie.
  9. Wirtualna prywatna baza danych - Zmień zapytanie na inne, dodając predykaty. Nie jest przeznaczony do zwiększania wydajności, ale prawdopodobnie można go nadużyć do zmiany ścieżek dostępu do indeksu.
  10. Struktura tłumaczeń SQL - Zmień zapytanie na inne zapytanie, zanim zostanie ono przeanalizowane. Może to umożliwić uruchomienie całkowicie „niewłaściwego” SQL.
  11. Poprawka SQL (dbms_sqldiag internal.i_create_patch) - Zmień zapytanie na inne zapytanie. Podobny do DBMS_ADVANCED_REWRITE, ale jest nieudokumentowany i być może nieco mocniejszy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwraca wartość ze skryptu sql do skryptu powłoki

  2. Jak używać Distributed AD, aby skrócić czas instalowania poprawek w Oracle EBS?

  3. Jak wyczyścić wszystkie elementy z pamięci podręcznej w Oracle

  4. Jak sprawdzić, czy wartość kolumny została jawnie określona w wyzwalaczu PL/SQL PRZED UPDATE?

  5. Jak utworzyć tabelę tymczasową w bazie danych Oracle?