PL/SQL w SQL: dwa proste eksperymenty [WITH, PRAGMA UDF, Result Cache, DETERMINISTIC, Scalar Subquery Caching]

W związku z częstymi pytaniami o to, jak optymalnie wykorzystywać funkcje PL/SQL w poleceniach SQL, przyjrzyjmy się następującym dwóm eksperymentom wydajnościowym. Naszym celem będzie przeszukiwanie tabeli liczącej milion rekordów, a klazula WHERE będzie zawierać odwołanie do bardzo prostej funkcji PL/SQL. Eksperyment 1 Dane wejściowe: tabela MROWS zawierająca milion unikatowych rekordów, funkcja PL/SQL DBL() zwraca podwojoną Read more about PL/SQL w SQL: dwa proste eksperymenty [WITH, PRAGMA UDF, Result Cache, DETERMINISTIC, Scalar Subquery Caching][…]

Kolejność ewaluacji predykatów w WHERE: ASSOCIATE STATISTICS i ORDERED_PREDICATES

W przypadku złożonych zapytań SQL problem wydajnościowy może czasami wynikać z nieoptymalnej kolejności ewaluacji predykatów w klauzuli WHERE. Warto w tym miejscu przypomnieć dwa ważne fakty dotyczące optymalizacji i wykonywania zapytań w systemie Oracle Database: Oracle Database stosuje skróconą ewaluację (short-circuit evaluation) warunków logicznych – przykładowo, gdy w warunku „WHERE a=1 AND b=2 AND c=3” Read more about Kolejność ewaluacji predykatów w WHERE: ASSOCIATE STATISTICS i ORDERED_PREDICATES[…]

Instalacja Oracle Database 12.2 w środowisku Docker

W związku z coraz powszechniejszym wykorzystywaniem kontenerów Docker i wynikającymi z tego pytaniami o prawidłową instalację i konfigurację oprogramowania serwera bazy danych przeprowadźmy krótką demonstrację obejmującą: (1) przygotowanie systemu operacyjnego Oracle Linux 7.2, (2) instalację oprogramowania Docker Engine, (3) instalację i konfigurację oprogramowania Oracle Database 12c. 1. Przygotowanie systemu operacyjnego Oracle Linux 7.2 Obejmuje dwie Read more about Instalacja Oracle Database 12.2 w środowisku Docker[…]

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 ‚%…%’. Read more about Przeszukiwanie danych pełnotekstowych – indeks Oracle Text typu CTXSYS.CONTEXT[…]

Automatyczne zarządzanie pamięcią SGA a usterka ORA-04031

Od czasów wersji Oracle Database 10g powszechnie wykorzystujemy mechanizmy automatycznego zarządzania pamięcią operacyjną instancji (Automatic Shared Memory Management – ASMM, czy później Automatic Memory Management – AMM). Pamiętamy ze szkoleń, że zwalniają one administratora m.in. z obowiązku ręcznego konfigurowania rozmiarów obszarów buforowych takich jak Buffer Cache i Shared Pool oraz z podejmowania decyzji o proporcji Read more about Automatyczne zarządzanie pamięcią SGA a usterka ORA-04031[…]

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 Read more about STATISTICS_LEVEL=ALL – zyski vs. koszty[…]

Oracle Database 12.2 Database Sharding – porady praktyczne

Jedną z flagowych funkcjonalności drugiego wydania serwera bazy danych Oracle Database 12c (12.2) jest Database Sharding (dzielenie bazy danych). Jest to klon rozwiązania dobrze znanego w świecie systemów NoSQL, polegającego na horyzontalnym partycjonowaniu danych pomiędzy wiele fizycznych lokalizacji. Taki rozdział danych pozwala następnie rozdzielić obciążenie aplikacyjne i tym samym uzyskać efekt prawie-liniowej skalowalności bardzo dużych Read more about Oracle Database 12.2 Database Sharding – porady praktyczne[…]

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 Read more about Jak bardzo statystyki systemowe wpływają na wybór planu wykonania?[…]

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 Read more about Oracle Database FGAC/VPD – blaski i cienie (a.k.a. CONTEXT_SENSITIVE)[…]

Hinty bez ingerencji w treść zapytania? SQL Patch!

Od czasu do czasu pojawia się konieczność skorygowania decyzji optymalizatora zapytań, który pomimo poprawnych i aktualnych statystyk uparcie nie chce wybrać najlepszego planu wykonania (query execution plan). Większość deweloperów sięga wtedy po wskazówki sterujące (hinty), umieszczane w treści problematycznego zapytania. Jest to metoda skuteczna, o ile mamy możliwość edycji treści zapytania – co bywa trudne Read more about Hinty bez ingerencji w treść zapytania? SQL Patch![…]