Przeszukiwanie danych pełnotekstowych – indeks Oracle Text typu CTXSYS.CONTEXT

Dość powszechnym wyzwaniem dla programistów jest umożliwienie użytkownikom bazy danych efektywnego wyszukiwania informacji w oparciu o częściowe dopasowanie danych tekstowych, np. szukanie produktów zawierających określone słowo w opisie, szukanie symboli produktów zawierających określony fragment, szukanie dokumentów tekstowych zawierających podaną frazę, itp. Zwykle zadania takie są realizowane za pomocą operatora LIKE ‚%…%’ lub UPPER(…) LIKE ‚%…%’.[…]

STATISTICS_LEVEL=ALL – zyski vs. koszty

Dwa z najbardziej atrakcyjnych mechanizmów optymalizatora zapytań Oracle Database 12c – „cardinality feedback” i „adaptive cursor sharing” – do prawidłowego działania wymagają (o czym często ze zdziwieniem przekonują się administratorzy) przełączenia parametru inicjalizacyjnego STATISTICS_LEVEL na poziom „ALL” (domyślnie „TYPICAL”). Przy takim ustawieniu gromadzone są dodatkowe wskaźniki wydajnościowe: Plan Execution Statistics i Timed OS Statistics (zainteresowanych[…]

Jak bardzo statystyki systemowe wpływają na wybór planu wykonania?

Wiemy, że statystyki systemowe są ważnym opisem wydajności wykorzystywanej platformy sprzętowej oraz że kosztowy optymalizator zapytań Oracle Database odwołuje się do ich wartości podczas szacowania kosztów planów wykonania zapytań (pisaliśmy o statystykach systemowych TU). Wielu administratorów zastanawia się jednak, jak bardzo optymalizator zapytań jest „wrażliwy” na wartości tych statystyk (zbieranych metodami eksperymentalnymi). Aby odpowiedzieć na[…]

Oracle Database FGAC/VPD – blaski i cienie (a.k.a. CONTEXT_SENSITIVE)

Drobnoziarnista kontrola dostępu (Fine-Grained Access Control – FGAC) jest popularną techniką kontroli dostępu użytkowników do danych na poziomie rekordów (w przeciwieństwie do kontroli dostępu na poziomie tabeli – realizowanej poleceniami GRANT), pozwalającą udostępniać różnym użytkownikom różne zestawy rekordów z tej samej tabeli (co daje efekt tzw. Virtual Private Database – VPD). Ogólna idea FGAC sprowadza[…]

Wpływ Clustering Factor na wydajność zapytań zakresowych z indeksem

W tabelach typu Heap (najpopularniejsze, domyślne) kolejność fizycznego ułożenia rekordów jest zasadniczo przypadkowa, wynikająca m.in. z porządku ich wstawiania. Kolejność ta nie ma żadnego znaczenia dla wydajności zapytań dokonujących pełnego odczytu tabeli lub jednorekordowych zapytań punktowych z użyciem indeksu. Ma jednak znaczenie dla wydajności realizacji zapytań zakresowych z użyciem indeksu, gdzie wynikowy zbiór rekordów tabeli[…]

Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?

Przyjrzyjmy się dziś dość popularnemu problemowi wydajności masowej operacji UPDATE dokonującej modyfikacji bardzo dużej liczby rekordów. Spotykają się z nim najczęściej programiści implementujący zadania wsadowe. Dla celów demonstracji posłużymy się tabelą UPD_TEST o następującej strukturze: create table upd_test (c1 number(10), c2 char(1018)); Rozmiar kolumny C2 został tak dobrany, aby średnia długość rekordu oscylowała w okolicach[…]

Kilka indeksów na tej samej kolumnie (wyrażeniu) ?!

W przeszłości wielokrotnie podejmowałem dyskusje dotyczące właściwego doboru typu indeksu w zależności od charakterystyki danych i od rodzaju wykonywanych zapytań. Wydawało się, że jednym z niespełnionych marzeń programistów było utworzenie wielu alternatywnych indeksów na tej samej kolumnie (np. bitmapowy, b-drzewo, partycjonowany lokalnie, partycjonowany globalnie,…) tak, aby to optymalizator zapytań (a nie programista) wybrał sobie ten,[…]

Walczymy ze zbędnym REDO w Oracle Database 12c! (temp_undo_enabled)

Jak dobrze wiemy, serwer bazy danych Oracle Database zapewnia odtwarzalność realizowanych transakcji poprzez generowanie informacji Redo zapisywanych w dziennikach powtórzeń (redo logs). Gdy zdarzy się awaria, informacje te pozwalają zrekonstruować stan bazy danych będący skutkiem transakcji zrealizowanych przed awarią. Istnieją jednak sytuacje, w których programiście wcale nie zależy na zabezpieczeniu transakcji, a wręcz postrzega on[…]

Eksperymenty z CURSOR_SHARING

Jednym z bardziej popularnych parametrów konfiguracyjnych jest CURSOR_SHARING, umożliwiający sterowanie współdzieleniem kursorów i planów wykonania zapytań (pojawił się w 8.1.6). Może przyjąć jedną z trzech wartości: EXACT (domyślna), SIMILAR, FORCE, przy czym Oracle zapowiedział wycofanie opcji SIMILAR (już nawet w wersji 11g [ogłoszenie ID 1169017.1], jednak jest nadal dostępna). Parametr CURSOR_SHARING jest reklamowany jako lekarstwo[…]

Wyłączanie użycia ścieżki bezpośredniej przy pełnym odczycie tabeli (Oracle Database 11g)

Jednym z ciekawszych mechanizmów prowadzenia dyskowego wejścia/wyjścia w Oracle Database 11g jest realizacja pełnego odczytu tabeli (full table scan) metodą ścieżki bezpośredniej (direct path). Idea ścieżki bezpośredniej polega na pomijaniu bufora Buffer Cache i odczytywaniu bloków tabeli z dysku bezpośrednio do PGA. Dzięki temu możliwa jest poprawa wydajności operacji pełnego odczytu tabeli (brak narzutów związanych[…]