Historia wymaga pasterzy, nie rzeźników.

Okazało się wtedy, że kiedy używany był optymalizator regułowy, polecenie było wykonywane wydajnie.
Po wielu analizach zdecydowano się na sprawdzenie parametrów pliku INIT.ORA. Okazało się, że parametr COMPATIBLE był ustawiony na system w wersji 8.0.0, choć faktycznie praca odbywała się w systemie Oracle 8.1.7. Po zmianie wartości parametru na 8.1.7 i ponownym wykonaniu polecenia UPDATE okazało się, że indeks jest tym razem używany poprawnie i czas wykonania wynosił około O, l sekundy.
Parametr COMPATIBLE nie jest jedynym, który wymaga takiego samego ustawienia w bazie przedprodukcyjnej i produkcyjnej w celu zapewnienia identycznego działania optymalizatora kosztowego. Są to:
SORT_AREA_SIZE
Liczba bajtów przydzielanych użytkownikowi na sesję w celu sortowania danych w pamięci.
Jeśli parametr jest ustawiony na swoją wartość domyślną 64K, NESTED LOOPS (pętle zagnieżdżone) będą preferowane względem SORT MERGES (złączenia przez sortowanie i scalenie) lub HASH JOINS (złączenia haszujące).
HASH_AREA_SIZE
Liczba bajtów przydzielanych użytkownikowi na sesję w celu przeprowadzania w pamięci złączeń haszujących (hash joins). Wartość domyślna wynosi dwukrotność SORT_AREA_SIZE. Złączenia haszujące często nie działają poprawnie, jeśli parametr ten jest ustawiony na wartość niższą od l megabajta.
HASH_JOIN_ENABLED
Udostępnia lub blokuje używanie złączeń haszujących. Wartość domyślna to TRUE i parametr zazwyczaj nie wymaga ustawienia.
OPTIMIZER_MODE
Możliwe wartości to CHOOSE, FIRST_ROWS lub ALL_ROWS. Wartość CHOOSE
powoduje, że optymalizator kosztowy jest używany, jeśli dostępne są statystyki. Wartość FIRST_ROWS działa w ten sam sposób, ale powoduje zwiększenie preferencji wobec NESTED LOOPS zamiast SORT MERGE lub HASH JOINS. Wartość ALL_ROWS
powoduje preferowanie SORT MERGE oraz HASH JOINS przed NESTED LOOPS.
DB_FILE_MULTIBLOCK_READ_COUNT
Liczba bloków, które system Oracle pobiera przy każdym odczycie z tabeli. Jeśli określi się dużą wartość (na przykład 16 lub 32), system Oracle będzie w wielu sytuacjach wybierał
FULL TABLE SCANS (przegląd całej tabeli) zamiast NESTED LOOPS.
OPTIMIZER_MODE_ENABLE
Udostępnia nowe funkcje optymalizatora. Na przykład ustawienie parametru na wartość 8.1.7
pozwala na wykorzystanie wszystkich mechanizmów udostępnionych w wersji systemu Oracle 8.1.7 (i wcześniejszych). Parametr ten może także automatycznie ustawiać inne parametry, takie jak FAST_FULL_SCAN_ENABLED.
Główne udoskonalenia, jakie wprowadzono w różnych wersjach systemu to: 8.0.4 -
uszeregowane pętle zagnieżdżone (ordered nested loops), szybkie pełne przeglądy (fast fuli seans); 8.0.5 - wiele poprawek błędów optymalizatora; 8.1.6 - udoskonalona obsługa histogramów, partycji i pętli zagnieżdżonych; 8.1.7
- udoskonalona obsługa partycji i optymalizacja podwyrażeń; 9.0.1 - znacznie udoskonalone złączenia indeksowe, scalanie złożonych perspektyw, usprawnienia w obsłudze indeksów
bitmapowych, podwyrażeń oraz złączeń.
OPTIMIZER_INDEX_CACHING
Parametr ten „mówi" systemowi Oracle o odsetku danych zaindeksowanych, jakich można się będzie spodziewać w pamięci. Domyślna wartość tego parametru wynosi 0, a zakres wartości
- od O do 100. Im wyższa wartość, tym bardziej prawdopodobne jest wykorzystanie NESTED
LOOPS zamiast SORT MERGE i HASH JOIN. W niektórych systemach zauważono poprawę wydajności przy ustawieniu go na wartość 90.
OPTIMIZER_INDEX_ COST_ADJ
Ustawienia tego parametru mogą zwiększyć częstotliwość używania indeksów. Wartość domyślna to 100. Zmniejszenie jej do 10 oznacza, że optymalizator kosztowy ma obniżyć koszt wykorzystania indeksu do 10% wartości domyślnej. Można także określić wartość jako dużo większą od 100 w celu wymuszenia SORT MERGE lub HASH JOIN. W niektórych ośrodkach zanotowano wzrost wydajności przy ustawieniu tego parametru na wartość pochodzącą z przedziału 10 do 50 w przypadku systemów OLTP* oraz 50 w przypadku systemów wspomagających podejmowanie decyzji . Zmniejszenie wartości może przyspieszyć wykonywanie niektórych zapytań OLTP, ale sprawia jednocześnie, że czas wykonywania zadań wynoszący kilka godzin ulec może znaczącemu wydłużeniu.
Zwiększenie tej wartości może spowodować sytuację odwrotną.
OLTP (On Line Transaction Processing) - systemy przetwarzania transakcyjnego- przyp. tlum OLAP (On LinÄ™ Analytical Processing) - systemy przetwarzania analitycznego- przyp. tlum STAR_TRANSFORMATION_ENABLED
Sprawia, że wykorzystywana jest transformacja typu gwiazda (star transformation) w celu scalenia indeksów bitmapowych w tabelach faktów*. Jest to metoda odmienna od złączenia kartezjańskiego, które zazwyczaj ma miejsce w przypadku zapytań stosowanych względem danych w tabelach o logicznej strukturze gwiazdy (star schema).

Podstrony