26 lipca 2016

Blog Oracle/Postgres

  • PostgreSQL 12 – co się stało z plikiem recovery.conf?
    Pojawienie się dwunastej wersji serwera PostgreSQL spowodowało konieczność wprowadzenia poprawek do stosowanych przez nas procedur odtwarzania bazy danych po awarii! Przypomnijmy, że w wersjach PostgreSQL 8, 9, 10, i 11 odtwarzanie bazy danych w oparciu o archiwalne pliki WAL realizowaliśmy poprzez utworzenie w katalogu Data Directory pliku o nazwie recovery.conf, a w nim – umieszczenie parametru restore_command. Parametr ten wskazywał sposób przywracania archiwalnych plików WAL z lokalizacji, w której pierwotnie były one zapisane. W chwili Read more about Blog Oracle/Postgres[…]
  • Podstawy: Exadata Smart Scan – jak sprawdzić, czy się odbył?
    Jednym z najbardziej interesujących rozwiązań technicznych dostępnych na platformie Oracle Exadata jest Smart Scan. Na początek małe przypomnienie: architektura sprzętowa platformy Oracle Exadata przewiduje podział na maszyny odpowiedzialne za fizyczne składowanie danych (Exadata Cell Server) i na maszyny, na których pracuje instancja serwera bazy danych (Database Machine). Te dwa rodzaje maszyn połączone są szybką siecią lokalną zrealizowaną w technologii Infiniband. Zarys tej architektury pokazuje poniższy rysunek. Ponieważ, mimo wszystko, przepustowość Infiniband jest ograniczona, a jednocześnie Read more about Blog Oracle/Postgres[…]
  • 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ą wartość parametru wywołania: CREATE TABLE mrows (id NUMBER); BEGIN   FOR i IN 0..999999 LOOP     INSERT INTO mrows VALUES Read more about Blog Oracle/Postgres[…]
  • 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” niespełniony będzie pierwszy predykat (a=1), to w ogóle nie zostaną przebadane pozostałe predykaty, gdyż wynik jest już znany (false). Oracle Read more about Blog Oracle/Postgres[…]
  • 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 czynności: aktualizację jądra systemu operacyjnego do wersji 4.1.12 lub wyższej (domyślna 3.8.13) oraz wyłączenie SELinux. Aby dokonać automatycznej aktualizacji jądra Read more about Blog Oracle/Postgres[…]
  • 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 ‚%…%’. Niestety, tradycyjne struktury indeksów (B*-drzewo i bitmapowy) są w przypadku takich zapytań bezsilne, co doprowadza do planów wykonania bazujących na Read more about Blog Oracle/Postgres[…]
  • 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 rozmiarów PGA/SGA. Wymagają jedynie określenia pożądanego rozmiaru całkowitego SGA (parametr SGA_TARGET) lub pożądanego sumarycznego rozmiaru PGA i SGA (parametr MEMORY_TARGET). Read more about Blog Oracle/Postgres[…]
  • 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 tym, jakie wskaźniki są gromadzone przy różnych ustawieniach kieruję do analizy wyniku zapytania „select statistics_name, description, activation_level from v$statistics_level”). Ponieważ Read more about Blog Oracle/Postgres[…]
  • 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 baz danych. Oczywiście pod warunkiem, że rozsądnie rozdzielimy zarówno dane, jak i obciążenie aplikacyjne. Realizacja Database Shardingu w Oracle Database Read more about Blog Oracle/Postgres[…]
  • 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 to pytanie przeprowadźmy prosty eksperyment. Dana jest tabela o rozmiarze 375 bloków, zawierająca 100 tysięcy rekordów o średniej długości 22 Read more about Blog Oracle/Postgres[…]