Indeksy częściowe w Oracle Database 12c

Oracle Database 12c oferuje ciekawe rozwiązanie, pozwalające zredukować rozmiar indeksu tworzonego na tabeli partycjonowanej, w której wiele partycji ma charakter archiwalny (bardzo rzadko podlega zapytaniom). Indeks częściowy – bo o nim mowa – może obejmować swoim zasięgiem wybrane partycje tabeli, podczas gdy rekordy w pozostałych partycjach tabeli pozostają bez indeksu. Gdy realizowane jest zapytanie do Read more about Indeksy częściowe w Oracle Database 12c[…]

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, Read more about Kilka indeksów na tej samej kolumnie (wyrażeniu) ?![…]

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 Read more about Walczymy ze zbędnym REDO w Oracle Database 12c! (temp_undo_enabled)[…]

Automatic Data Optimization w 12c (Information Lifecycle Management)

To jedna z ciekawszych nowych funkcjonalności serwera Oracle Database 12c. Pomaga zoptymalizować mechanizmy składowania danych, którymi użytkownicy od pewnego czasu przestali się aktywnie interesować. Aktualnie dostępne są dwa rozwiązania: (1) kompresja (rekompresja) danych „niedotykanych” przez użytkowników, (2) przenoszenie (tzw. tiering) do „tańszej” przestrzeni tabel tych partycji, które przestają się mieścić w aktualnej przestrzeni tabel, a Read more about Automatic Data Optimization w 12c (Information Lifecycle Management)[…]

Błędy ORA-12519 – typowe rozwiązania

Najczęstszą przyczyną błędu ORA-12519 ujawniającego się podczas próby logowania do serwera bazy danych: Listener refused the connection with the following error: ORA-12519, TNS:no appropriate service handler found [SQLCode: 12519] jest osiągnięcie przez serwer limitu równocześnie połączonych procesów/sesji określanego parametrami inicjalizacyjnymi PROCESSES i SESSIONS. Oto prosty sposób sprawdzenia aktualnych wartości tych limitów (LIMIT_VALUE), jak i odczytania Read more about Błędy ORA-12519 – typowe rozwiązania[…]

Jak nie pomylić się za pierwszym razem? Adaptatywne plany wykonania w Oracle Database 12c

Zajmowaliśmy się już kiedyś ciekawą kwestą korygowania nieoptymalnego planu wykonania z wykorzystaniem Cardinality Feedback (Jak optymalizator uczy się na błędach). Pokazaliśmy, że po pierwszym wykonaniu nieoptymalnego planu wykonania optymalizator potrafi go zmodyfikować tak, aby drugie wykonanie przebiegło już bardziej efektywnie. Niestety, ten mechanizm serwera potrafi być skuteczny dopiero przy drugim wywołaniu tego samego zapytania. Pierwsze Read more about Jak nie pomylić się za pierwszym razem? Adaptatywne plany wykonania w Oracle Database 12c[…]

Profile czy hinty?

Zarówno SQL Profiles, jak i Hints to mechanizmy pozwalające sterować zachowaniem optymalizatora  zapytań tak, aby wydajność generowanych planów była jak najlepsza. Byłyby one niepotrzebne, gdyby optymalizator potrafił zawsze trafnie wybrać optymalny plan wykonania. Ponieważ jednak nierzadko zdarza się optymalizatorowi „chybić”, to takie lekarstwa są niezbędne. Hinty to zapisane w treści polecenia SQL wskazówki (zalecenia), instruujące Read more about Profile czy hinty?[…]

Jak możemy chronić się przed pogorszeniem planu wykonania?

Nierzadko spotykamy się z problemem gwałtownego pogorszenia wydajności starej, wielokrotnie sprawdzonej i zoptymalizowanej aplikacji. Przyczyną zwykle jest upgrade oprogramowania serwera bazy danych, zmiana sposobu zbierania statystyk dla optymalizatora zapytań, rekonfiguracja optymalizatora zapytań czy zmiana ustawień systemowych. Czy można jakoś uchronić się przed takimi wydajnościowymi niespodziankami w przyszłości? Istnieje mechanizm serwera bazy danych Oracle Database umożliwiający Read more about Jak możemy chronić się przed pogorszeniem planu wykonania?[…]

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 Read more about Eksperymenty z CURSOR_SHARING[…]

Dlaczego polecenie SELECT powoduje zapisy dyskowe? Delayed Block Cleanout!

Przyjrzyjmy się ciekawemu zjawisku, które przejawia się tym, że czasami wykonanie zapytania SELECT powoduje modyfikacje bloków dyskowych oraz zapisy danych powtórzenia (Redo). W konsekwencji , wydajność polecenia SELECT staje się nieakceptowalna. W poniższym eksperymencie posługuję się tabelą zawierającą milion rekordów, zajmująca 130MB. W pierwszym kroku, na tabeli wykonuję polecenie UPDATE, które modyfikuje co piąty rekord. Read more about Dlaczego polecenie SELECT powoduje zapisy dyskowe? Delayed Block Cleanout![…]