{"id":11,"date":"2016-07-26T13:17:18","date_gmt":"2016-07-26T11:17:18","guid":{"rendered":"http:\/\/explainit.pl\/wordpress\/?page_id=11"},"modified":"2021-01-24T11:58:27","modified_gmt":"2021-01-24T10:58:27","slug":"blog","status":"publish","type":"page","link":"https:\/\/explainit.pl\/wordpress\/blog\/","title":{"rendered":"Blog Oracle\/Postgres"},"content":{"rendered":"<ul class=\"wp-block-latest-posts__list has-dates wp-block-latest-posts\"><li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2024\/12\/17\/o-wydajnosci-przyrostowych-fizycznych-kopii-bezpieczenstwa-postgresql-17\/\">O efektywno\u015bci przyrostowych fizycznych kopii bezpiecze\u0144stwa PostgreSQL 17<\/a><time datetime=\"2024-12-17T21:11:14+01:00\" class=\"wp-block-latest-posts__post-date\">17 grudnia 2024<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jednym z najbardziej oczekiwanych nowych mechanizm\u00f3w serwera PostgreSQL 17 jest funkcja wykonywania przyrostowych kopii bezpiecze\u0144stwa. Umo\u017cliwia ona redukcj\u0119 rozmiaru codziennej fizycznej kopii bezpiecze\u0144stwa dzi\u0119ki uwzgl\u0119dnianiu wy\u0142\u0105cznie tych blok\u00f3w danych, kt\u00f3re uleg\u0142y zmianom od czasu wykonania wcze\u015bniejszej kopii bezpiecze\u0144stwa. Mo\u017ce to skutkowa\u0107 mniejszym zu\u017cyciem pami\u0119ci dyskowej oraz kr\u00f3tszym czasem wykonywania. Nale\u017cy pami\u0119ta\u0107, \u017ce aby mo\u017cliwe by\u0142o wykonywanie przyrostowych kopii bezpiecze\u0144stwa w systemie PostgreSQL 17, niezb\u0119dne jest uprzednie aktywowanie procesu WAL Summarizer (parametr summarize_wal = on), kt\u00f3ry <a href=\"https:\/\/explainit.pl\/wordpress\/2024\/12\/17\/o-wydajnosci-przyrostowych-fizycznych-kopii-bezpieczenstwa-postgresql-17\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about O efektywno\u015bci przyrostowych fizycznych kopii bezpiecze\u0144stwa PostgreSQL 17<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\">Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144<\/a><time datetime=\"2021-12-13T20:29:00+01:00\" class=\"wp-block-latest-posts__post-date\">13 grudnia 2021<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Wraz z wprowadzeniem wersji 14 PostgreSQL pojawi\u0142a si\u0119 mo\u017cliwo\u015b\u0107 &#8211; na kt\u00f3r\u0105 d\u0142ugo czekali\u015bmy &#8211; definiowania statystyk rozszerzonych dla wyra\u017ce\u0144. Jest to mechanizm znany np. z Oracle Database, wspomagaj\u0105cy szacowanie selektywno\u015bci predykat\u00f3w opartych o funkcje\/wyra\u017cenia. Wiemy, jak wa\u017cne jest trafne szacowanie selektywno\u015bci predykat\u00f3w wyst\u0119puj\u0105cych w zapytaniach &#8211; od tego przecie\u017c zale\u017cy precyzja oszacowania koszt\u00f3w plan\u00f3w wykonania zapytania i tym samym wyb\u00f3r planu optymalnego. W domy\u015blnej konfiguracji, PostgreSQL gromadzi statystyki dla ka\u017cdej kolumny ka\u017cdej tabeli (statystyki <a href=\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/\">Podstawy: Vacuum w PostgreSQL<\/a><time datetime=\"2021-01-24T12:54:20+01:00\" class=\"wp-block-latest-posts__post-date\">24 stycznia 2021<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Poniewa\u017c powr\u00f3t do podstaw nikomu jeszcze nie zaszkodzi\u0142, to proponujemy dzi\u015b ma\u0142e repetytorium z zakresu MVCC i operacji Vacuum. Pami\u0119tamy, \u017ce PostgreSQL jest oczywi\u015bcie systemem transakcyjnym, wspieraj\u0105cym tradycyjne w\u0142asno\u015bci ACID dla transakcji realizowanych przez aplikacje u\u017cytkownik\u00f3w. W celu prawid\u0142owej realizacji izolacji transakcji, PostgreSQL stosuje technik\u0119 MVCC (Multiversion Concurrency Control), w ramach kt\u00f3rej ka\u017cda modyfikacja rekordu przyczynia si\u0119 do powstania jego nowego obrazu, podczas gdy dotychczasowy obraz rekordu jest pozostawiany w tabeli na potrzeby innych transakcji <a href=\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Podstawy: Vacuum w PostgreSQL<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2021\/01\/12\/sortowanie-przyrostowe-w-postgresql-13\/\">Sortowanie przyrostowe w PostgreSQL 13<\/a><time datetime=\"2021-01-12T16:10:15+01:00\" class=\"wp-block-latest-posts__post-date\">12 stycznia 2021<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jedn\u0105 z nowych technik optymalizacji wydajno\u015bci, jakie pojawi\u0142y si\u0119 w PostgreSQL 13 jest sortowanie przyrostowe (incremental sorting). Znajduje ono zastosowanie w zapytaniach, kt\u00f3re sortuj\u0105 rekordy wed\u0142ug klucza wielokolumnowego. W przesz\u0142o\u015bci, popularnym sposobem na optymalizacj\u0119 takich sortowa\u0144 by\u0142o utworzenie indeksu na wszystkich kolumnach klucza sortowania. Obecnie, serwer PostgreSQL potrafi w takiej sytuacji skorzysta\u0107 r\u00f3wnie\u017c z indeksu obejmuj\u0105cego tylko cz\u0119\u015b\u0107 (pocz\u0105tkow\u0105) kolumn klucza sortowania, a nast\u0119pnie &#8222;dosortowa\u0107&#8221; rekordy wed\u0142ug ko\u0144cowych kolumn klucza. Dzi\u0119ki temu mechanizmowi, PostgreSQL 13 <a href=\"https:\/\/explainit.pl\/wordpress\/2021\/01\/12\/sortowanie-przyrostowe-w-postgresql-13\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Sortowanie przyrostowe w PostgreSQL 13<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2020\/12\/12\/weryfikacja-poprawnosci-kopii-bezpieczenstwa-w-postgresql-13\/\">Weryfikacja poprawno\u015bci kopii bezpiecze\u0144stwa w PostgreSQL 13<\/a><time datetime=\"2020-12-12T11:39:25+01:00\" class=\"wp-block-latest-posts__post-date\">12 grudnia 2020<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Spo\u015br\u00f3d wielu nowo\u015bci, jakie pojawi\u0142y si\u0119 w wersji 13 serwera PostgreSQL, wielu z nas doceni interesuj\u0105ce narz\u0119dzie, umo\u017cliwiaj\u0105ce weryfikacj\u0119 poprawno\u015bci przechowywanej fizycznej kopii bezpiecze\u0144stwa: pg_verifybackup. Na wst\u0119pie nale\u017cy zauwa\u017cy\u0107, \u017ce podczas wykonywania fizycznej kopii bezpiecze\u0144stwa za pomoc\u0105 pg_basebackup, teraz generowany jest specjalny plik deskryptora, nazwany backup_manifest, kt\u00f3ry zawiera wykaz wszystkich plik\u00f3w wchodz\u0105cych w sk\u0142ad kopii bezpiecze\u0144stwa, wraz z ich sumami kontrolnymi. Dodatkowo, plik backup_manifest zawiera r\u00f3wnie\u017c deklaracj\u0119 zakresu rekord\u00f3w WAL, kt\u00f3re b\u0119d\u0105 niezb\u0119dne do usp\u00f3jnienia <a href=\"https:\/\/explainit.pl\/wordpress\/2020\/12\/12\/weryfikacja-poprawnosci-kopii-bezpieczenstwa-w-postgresql-13\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Weryfikacja poprawno\u015bci kopii bezpiecze\u0144stwa w PostgreSQL 13<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2020\/11\/30\/postgresql-12-13-aktywacja-sum-kontrolnych-w-plikach-danych\/\">PostgreSQL 12\/13: aktywacja sum kontrolnych w plikach danych<\/a><time datetime=\"2020-11-30T12:14:04+01:00\" class=\"wp-block-latest-posts__post-date\">30 listopada 2020<\/time><div class=\"wp-block-latest-posts__post-excerpt\">W domy\u015blnej konfiguracji serwera, ewentualne uszkodzenia plik\u00f3w danych s\u0105 wykrywane podczas dost\u0119pu do bloku dyskowego tylko w sytuacji, kiedy blok danych nie mo\u017ce by\u0107 odczytany z dysku lub jego zawarto\u015b\u0107 jest nieczytelna (uszkodzony format bloku). Niestety, bardziej &#8222;subtelne&#8221; uszkodzenia, polegaj\u0105ce np. na przek\u0142amaniu pojedynczego bajtu, s\u0105 niedostrzegalne dla serwera PostgreSQL. Aby umo\u017cliwi\u0107 automatyczn\u0105 detekcj\u0119 nawet takich &#8222;subtelnych&#8221; uszkodze\u0144, ju\u017c w wersji 9.3 wprowadzono mechanizm sum kontrolnych, kt\u00f3re pozwalaj\u0105 wykrywa\u0107 jakiekolwiek zaburzenia zawarto\u015bci blok\u00f3w danych. Niestety, <a href=\"https:\/\/explainit.pl\/wordpress\/2020\/11\/30\/postgresql-12-13-aktywacja-sum-kontrolnych-w-plikach-danych\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about PostgreSQL 12\/13: aktywacja sum kontrolnych w plikach danych<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2020\/01\/10\/postgresql-12-co-sie-stalo-z-plikiem-recovery-conf\/\">PostgreSQL 12 &#8211; co si\u0119 sta\u0142o z plikiem recovery.conf?<\/a><time datetime=\"2020-01-10T15:22:00+01:00\" class=\"wp-block-latest-posts__post-date\">10 stycznia 2020<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Pojawienie si\u0119 dwunastej wersji serwera PostgreSQL spowodowa\u0142o konieczno\u015b\u0107 wprowadzenia poprawek do stosowanych przez nas procedur odtwarzania bazy danych po awarii! Przypomnijmy, \u017ce w wersjach PostgreSQL 8, 9, 10, i 11 odtwarzanie bazy danych w oparciu o archiwalne pliki WAL realizowali\u015bmy poprzez utworzenie w katalogu Data Directory pliku o nazwie recovery.conf, a w nim &#8211; umieszczenie parametru restore_command. Parametr ten wskazywa\u0142 spos\u00f3b przywracania archiwalnych plik\u00f3w WAL z lokalizacji, w kt\u00f3rej pierwotnie by\u0142y one zapisane. W chwili <a href=\"https:\/\/explainit.pl\/wordpress\/2020\/01\/10\/postgresql-12-co-sie-stalo-z-plikiem-recovery-conf\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about PostgreSQL 12 &#8211; co si\u0119 sta\u0142o z plikiem recovery.conf?<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2019\/06\/08\/podstawy-exadata-smart-scan-jak-sprawdzic-czy-sie-odbyl\/\">Podstawy: Exadata Smart Scan &#8211; jak sprawdzi\u0107, czy si\u0119 odby\u0142?<\/a><time datetime=\"2019-06-08T12:08:23+02:00\" class=\"wp-block-latest-posts__post-date\">8 czerwca 2019<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jednym z najbardziej interesuj\u0105cych rozwi\u0105za\u0144 technicznych dost\u0119pnych na platformie Oracle Exadata jest Smart Scan. Na pocz\u0105tek ma\u0142e przypomnienie: architektura sprz\u0119towa platformy Oracle Exadata przewiduje podzia\u0142 na maszyny odpowiedzialne za fizyczne sk\u0142adowanie danych (Exadata Cell Server) i na maszyny, na kt\u00f3rych pracuje instancja serwera bazy danych (Database Machine). Te dwa rodzaje maszyn po\u0142\u0105czone s\u0105 szybk\u0105 sieci\u0105 lokaln\u0105 zrealizowan\u0105 w technologii Infiniband. Zarys tej architektury pokazuje poni\u017cszy rysunek. Poniewa\u017c, mimo wszystko, przepustowo\u015b\u0107 Infiniband jest ograniczona, a jednocze\u015bnie <a href=\"https:\/\/explainit.pl\/wordpress\/2019\/06\/08\/podstawy-exadata-smart-scan-jak-sprawdzic-czy-sie-odbyl\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Podstawy: Exadata Smart Scan &#8211; jak sprawdzi\u0107, czy si\u0119 odby\u0142?<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2018\/12\/04\/pl-sql-w-sql-dwa-proste-eksperymenty-with-pragma-udf-result-cache-deterministic-scalar-subquery-caching\/\">PL\/SQL w SQL: dwa proste eksperymenty [WITH, PRAGMA UDF, Result Cache, DETERMINISTIC, Scalar Subquery Caching]<\/a><time datetime=\"2018-12-04T17:04:19+01:00\" class=\"wp-block-latest-posts__post-date\">4 grudnia 2018<\/time><div class=\"wp-block-latest-posts__post-excerpt\">W zwi\u0105zku z cz\u0119stymi pytaniami o to, jak optymalnie wykorzystywa\u0107 funkcje PL\/SQL w poleceniach SQL, przyjrzyjmy si\u0119 nast\u0119puj\u0105cym dw\u00f3m eksperymentom wydajno\u015bciowym. Naszym celem b\u0119dzie przeszukiwanie tabeli licz\u0105cej milion rekord\u00f3w, a klazula WHERE b\u0119dzie zawiera\u0107 odwo\u0142anie do bardzo prostej funkcji PL\/SQL. Eksperyment 1 Dane wej\u015bciowe: tabela MROWS zawieraj\u0105ca milion unikatowych rekord\u00f3w, funkcja PL\/SQL DBL() zwraca podwojon\u0105 warto\u015b\u0107 parametru wywo\u0142ania: CREATE TABLE mrows (id NUMBER); BEGIN &nbsp; FOR i IN 0..999999 LOOP &nbsp;&nbsp;&nbsp; INSERT INTO mrows VALUES <a href=\"https:\/\/explainit.pl\/wordpress\/2018\/12\/04\/pl-sql-w-sql-dwa-proste-eksperymenty-with-pragma-udf-result-cache-deterministic-scalar-subquery-caching\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about PL\/SQL w SQL: dwa proste eksperymenty [WITH, PRAGMA UDF, Result Cache, DETERMINISTIC, Scalar Subquery Caching]<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2018\/08\/30\/kolejnosc-ewaluacji-predykatow-w-where-associate-statistics-i-ordered_predicates\/\">Kolejno\u015b\u0107 ewaluacji predykat\u00f3w w WHERE: ASSOCIATE STATISTICS i ORDERED_PREDICATES<\/a><time datetime=\"2018-08-30T15:08:24+02:00\" class=\"wp-block-latest-posts__post-date\">30 sierpnia 2018<\/time><div class=\"wp-block-latest-posts__post-excerpt\">W przypadku z\u0142o\u017conych zapyta\u0144 SQL problem wydajno\u015bciowy mo\u017ce czasami wynika\u0107 z nieoptymalnej kolejno\u015bci ewaluacji predykat\u00f3w w klauzuli WHERE. Warto w tym miejscu przypomnie\u0107 dwa wa\u017cne fakty dotycz\u0105ce optymalizacji i wykonywania zapyta\u0144 w systemie Oracle Database: Oracle Database stosuje skr\u00f3con\u0105 ewaluacj\u0119 (short-circuit evaluation) warunk\u00f3w logicznych &#8211; przyk\u0142adowo, gdy w warunku &#8222;WHERE a=1 AND b=2 AND c=3&#8221; niespe\u0142niony b\u0119dzie pierwszy predykat (a=1), to w og\u00f3le nie zostan\u0105 przebadane pozosta\u0142e predykaty, gdy\u017c wynik jest ju\u017c znany (false). Oracle <a href=\"https:\/\/explainit.pl\/wordpress\/2018\/08\/30\/kolejnosc-ewaluacji-predykatow-w-where-associate-statistics-i-ordered_predicates\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Kolejno\u015b\u0107 ewaluacji predykat\u00f3w w WHERE: ASSOCIATE STATISTICS i ORDERED_PREDICATES<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2018\/01\/01\/instalacja-oracle-database-12-2-w-srodowisku-docker\/\">Instalacja Oracle Database 12.2 w \u015brodowisku Docker<\/a><time datetime=\"2018-01-01T17:25:50+01:00\" class=\"wp-block-latest-posts__post-date\">1 stycznia 2018<\/time><div class=\"wp-block-latest-posts__post-excerpt\">W zwi\u0105zku z coraz powszechniejszym wykorzystywaniem kontener\u00f3w Docker i wynikaj\u0105cymi z tego pytaniami o prawid\u0142ow\u0105 instalacj\u0119 i konfiguracj\u0119 oprogramowania serwera bazy danych przeprowad\u017amy kr\u00f3tk\u0105 demonstracj\u0119 obejmuj\u0105c\u0105: (1) przygotowanie systemu operacyjnego Oracle Linux 7.2, (2) instalacj\u0119 oprogramowania Docker Engine, (3) instalacj\u0119 i konfiguracj\u0119 oprogramowania Oracle Database 12c. 1. Przygotowanie systemu operacyjnego Oracle Linux 7.2 Obejmuje dwie czynno\u015bci: aktualizacj\u0119 j\u0105dra systemu operacyjnego do wersji 4.1.12 lub wy\u017cszej (domy\u015blna 3.8.13) oraz wy\u0142\u0105czenie SELinux. Aby dokona\u0107 automatycznej aktualizacji j\u0105dra <a href=\"https:\/\/explainit.pl\/wordpress\/2018\/01\/01\/instalacja-oracle-database-12-2-w-srodowisku-docker\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Instalacja Oracle Database 12.2 w \u015brodowisku Docker<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2017\/12\/03\/przeszukiwanie-danych-pelnotekstowych-indeks-oracle-text-typu-ctxsys-context\/\">Przeszukiwanie danych pe\u0142notekstowych &#8211; indeks Oracle Text typu CTXSYS.CONTEXT<\/a><time datetime=\"2017-12-03T15:50:28+01:00\" class=\"wp-block-latest-posts__post-date\">3 grudnia 2017<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Do\u015b\u0107 powszechnym wyzwaniem dla programist\u00f3w jest umo\u017cliwienie u\u017cytkownikom bazy danych efektywnego wyszukiwania informacji w oparciu o cz\u0119\u015bciowe dopasowanie danych tekstowych, np. szukanie produkt\u00f3w zawieraj\u0105cych okre\u015blone s\u0142owo w opisie, szukanie symboli produkt\u00f3w zawieraj\u0105cych okre\u015blony fragment, szukanie dokument\u00f3w tekstowych zawieraj\u0105cych podan\u0105 fraz\u0119, itp. Zwykle zadania takie s\u0105 realizowane za pomoc\u0105 operatora LIKE '%&#8230;%&#8217; lub UPPER(&#8230;) LIKE '%&#8230;%&#8217;. Niestety, tradycyjne struktury indeks\u00f3w (B*-drzewo i bitmapowy) s\u0105 w przypadku takich zapyta\u0144 bezsilne, co doprowadza do plan\u00f3w wykonania bazuj\u0105cych na <a href=\"https:\/\/explainit.pl\/wordpress\/2017\/12\/03\/przeszukiwanie-danych-pelnotekstowych-indeks-oracle-text-typu-ctxsys-context\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Przeszukiwanie danych pe\u0142notekstowych &#8211; indeks Oracle Text typu CTXSYS.CONTEXT<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2017\/09\/13\/automatyczne-zarzadzanie-pamiecia-sga-a-usterka-ora-04031\/\">Automatyczne zarz\u0105dzanie pami\u0119ci\u0105 SGA a usterka ORA-04031<\/a><time datetime=\"2017-09-13T11:19:53+02:00\" class=\"wp-block-latest-posts__post-date\">13 wrze\u015bnia 2017<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Od czas\u00f3w wersji Oracle Database 10g powszechnie wykorzystujemy mechanizmy automatycznego zarz\u0105dzania pami\u0119ci\u0105 operacyjn\u0105 instancji (Automatic Shared Memory Management &#8211; ASMM, czy p\u00f3\u017aniej Automatic Memory Management &#8211; AMM). Pami\u0119tamy ze szkole\u0144, \u017ce zwalniaj\u0105 one administratora m.in. z obowi\u0105zku r\u0119cznego konfigurowania rozmiar\u00f3w obszar\u00f3w buforowych takich jak Buffer Cache i Shared Pool oraz z podejmowania decyzji o proporcji rozmiar\u00f3w PGA\/SGA. Wymagaj\u0105 jedynie okre\u015blenia po\u017c\u0105danego rozmiaru ca\u0142kowitego SGA (parametr SGA_TARGET) lub po\u017c\u0105danego sumarycznego rozmiaru PGA i SGA (parametr MEMORY_TARGET). <a href=\"https:\/\/explainit.pl\/wordpress\/2017\/09\/13\/automatyczne-zarzadzanie-pamiecia-sga-a-usterka-ora-04031\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Automatyczne zarz\u0105dzanie pami\u0119ci\u0105 SGA a usterka ORA-04031<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2017\/08\/06\/statistics_levelall-zyski-vs-koszty\/\">STATISTICS_LEVEL=ALL &#8211; zyski vs. koszty<\/a><time datetime=\"2017-08-06T10:00:27+02:00\" class=\"wp-block-latest-posts__post-date\">6 sierpnia 2017<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Dwa z najbardziej atrakcyjnych mechanizm\u00f3w optymalizatora zapyta\u0144 Oracle Database 12c &#8211; &#8222;cardinality feedback&#8221; i &#8222;adaptive cursor sharing&#8221; &#8211; do prawid\u0142owego dzia\u0142ania wymagaj\u0105 (o czym cz\u0119sto ze zdziwieniem przekonuj\u0105 si\u0119 administratorzy) prze\u0142\u0105czenia parametru inicjalizacyjnego STATISTICS_LEVEL na poziom &#8222;ALL&#8221; (domy\u015blnie &#8222;TYPICAL&#8221;). Przy takim ustawieniu gromadzone s\u0105 dodatkowe wska\u017aniki wydajno\u015bciowe: Plan Execution Statistics i Timed OS Statistics (zainteresowanych tym, jakie wska\u017aniki s\u0105 gromadzone przy r\u00f3\u017cnych ustawieniach kieruj\u0119 do analizy wyniku zapytania &#8222;select statistics_name, description, activation_level from v$statistics_level&#8221;). Poniewa\u017c <a href=\"https:\/\/explainit.pl\/wordpress\/2017\/08\/06\/statistics_levelall-zyski-vs-koszty\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about STATISTICS_LEVEL=ALL &#8211; zyski vs. koszty<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2017\/06\/10\/oracle-database-12-2-database-sharding-porady-praktyczne\/\">Oracle Database 12.2 Database Sharding &#8211; porady praktyczne<\/a><time datetime=\"2017-06-10T15:12:49+02:00\" class=\"wp-block-latest-posts__post-date\">10 czerwca 2017<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jedn\u0105 z flagowych funkcjonalno\u015bci drugiego wydania serwera bazy danych Oracle Database 12c (12.2) jest Database Sharding (dzielenie bazy danych). Jest to klon rozwi\u0105zania dobrze znanego w \u015bwiecie system\u00f3w NoSQL, polegaj\u0105cego na horyzontalnym partycjonowaniu danych pomi\u0119dzy wiele fizycznych lokalizacji. Taki rozdzia\u0142 danych pozwala nast\u0119pnie rozdzieli\u0107 obci\u0105\u017cenie aplikacyjne i tym samym uzyska\u0107 efekt prawie-liniowej skalowalno\u015bci bardzo du\u017cych baz danych. Oczywi\u015bcie pod warunkiem, \u017ce rozs\u0105dnie rozdzielimy zar\u00f3wno dane, jak i obci\u0105\u017cenie aplikacyjne. Realizacja Database Shardingu w Oracle Database <a href=\"https:\/\/explainit.pl\/wordpress\/2017\/06\/10\/oracle-database-12-2-database-sharding-porady-praktyczne\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Oracle Database 12.2 Database Sharding &#8211; porady praktyczne<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2017\/05\/29\/jak-bardzo-statystyki-systemowe-wplywaja-na-wybor-planu-wykonania\/\">Jak bardzo statystyki systemowe wp\u0142ywaj\u0105 na wyb\u00f3r planu wykonania?<\/a><time datetime=\"2017-05-29T17:09:59+02:00\" class=\"wp-block-latest-posts__post-date\">29 maja 2017<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Wiemy, \u017ce statystyki systemowe s\u0105 wa\u017cnym opisem wydajno\u015bci wykorzystywanej platformy sprz\u0119towej oraz \u017ce kosztowy optymalizator zapyta\u0144 Oracle Database odwo\u0142uje si\u0119 do ich warto\u015bci podczas szacowania koszt\u00f3w plan\u00f3w wykonania zapyta\u0144 (pisali\u015bmy o statystykach systemowych TU). Wielu administrator\u00f3w zastanawia si\u0119 jednak, jak bardzo optymalizator zapyta\u0144 jest &#8222;wra\u017cliwy&#8221; na warto\u015bci tych statystyk (zbieranych metodami eksperymentalnymi). Aby odpowiedzie\u0107 na to pytanie przeprowad\u017amy prosty eksperyment. Dana jest tabela o rozmiarze 375 blok\u00f3w, zawieraj\u0105ca 100 tysi\u0119cy rekord\u00f3w o \u015bredniej d\u0142ugo\u015bci 22 <a href=\"https:\/\/explainit.pl\/wordpress\/2017\/05\/29\/jak-bardzo-statystyki-systemowe-wplywaja-na-wybor-planu-wykonania\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Jak bardzo statystyki systemowe wp\u0142ywaj\u0105 na wyb\u00f3r planu wykonania?<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2017\/01\/04\/oracle-database-fgacvpd-blaski-i-cienie-a-k-a-context_sensitive\/\">Oracle Database FGAC\/VPD &#8211; blaski i cienie (a.k.a. CONTEXT_SENSITIVE)<\/a><time datetime=\"2017-01-04T12:01:13+01:00\" class=\"wp-block-latest-posts__post-date\">4 stycznia 2017<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Drobnoziarnista kontrola dost\u0119pu (Fine-Grained Access Control &#8211; FGAC) jest popularn\u0105 technik\u0105 kontroli dost\u0119pu u\u017cytkownik\u00f3w do danych na poziomie rekord\u00f3w (w przeciwie\u0144stwie do kontroli dost\u0119pu na poziomie tabeli &#8211; realizowanej poleceniami GRANT), pozwalaj\u0105c\u0105 udost\u0119pnia\u0107 r\u00f3\u017cnym u\u017cytkownikom r\u00f3\u017cne zestawy rekord\u00f3w z tej samej tabeli (co daje efekt tzw. Virtual Private Database &#8211; VPD). Og\u00f3lna idea FGAC sprowadza si\u0119 do implementacji funkcji PL\/SQL, kt\u00f3re generuj\u0105 tre\u015bci predykat\u00f3w selekcji &#8211; automatycznie i nieodwo\u0142alnie do\u0142\u0105czanych do klauzuli WHERE ka\u017cdego zapytania <a href=\"https:\/\/explainit.pl\/wordpress\/2017\/01\/04\/oracle-database-fgacvpd-blaski-i-cienie-a-k-a-context_sensitive\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Oracle Database FGAC\/VPD &#8211; blaski i cienie (a.k.a. CONTEXT_SENSITIVE)<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/09\/19\/hinty-bez-ingerencji-w-tresc-zapytania-sql-patch\/\">Hinty bez ingerencji w tre\u015b\u0107 zapytania? SQL Patch!<\/a><time datetime=\"2016-09-19T11:40:13+02:00\" class=\"wp-block-latest-posts__post-date\">19 wrze\u015bnia 2016<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Od czasu do czasu pojawia si\u0119 konieczno\u015b\u0107 skorygowania decyzji optymalizatora zapyta\u0144, kt\u00f3ry pomimo poprawnych i aktualnych statystyk uparcie nie chce wybra\u0107 najlepszego planu wykonania (query execution plan). Wi\u0119kszo\u015b\u0107 deweloper\u00f3w si\u0119ga wtedy po wskaz\u00f3wki steruj\u0105ce (hinty), umieszczane w tre\u015bci problematycznego zapytania. Jest to metoda skuteczna, o ile mamy mo\u017cliwo\u015b\u0107 edycji tre\u015bci zapytania &#8211; co bywa trudne w przypadku, gdy &#8222;leczymy&#8221; cudz\u0105 aplikacj\u0119 o zamkni\u0119tym kodzie \u017ar\u00f3d\u0142owym. Istnieje jednak &#8222;p\u00f3\u0142legalne&#8221; rozwi\u0105zanie, dzi\u0119ki kt\u00f3remu mo\u017cemy poprosi\u0107 serwer bazy <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/09\/19\/hinty-bez-ingerencji-w-tresc-zapytania-sql-patch\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Hinty bez ingerencji w tre\u015b\u0107 zapytania? SQL Patch!<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/09\/07\/wplyw-clustering-factor-na-wydajnosc-zapytan-zakresowych-z-indeksem\/\">Wp\u0142yw Clustering Factor na wydajno\u015b\u0107 zapyta\u0144 zakresowych z indeksem<\/a><time datetime=\"2016-09-07T20:20:46+02:00\" class=\"wp-block-latest-posts__post-date\">7 wrze\u015bnia 2016<\/time><div class=\"wp-block-latest-posts__post-excerpt\">W tabelach typu Heap (najpopularniejsze, domy\u015blne) kolejno\u015b\u0107 fizycznego u\u0142o\u017cenia rekord\u00f3w jest zasadniczo przypadkowa, wynikaj\u0105ca m.in. z porz\u0105dku ich wstawiania. Kolejno\u015b\u0107 ta nie ma \u017cadnego znaczenia dla wydajno\u015bci zapyta\u0144 dokonuj\u0105cych pe\u0142nego odczytu tabeli lub jednorekordowych zapyta\u0144 punktowych z u\u017cyciem indeksu. Ma jednak znaczenie dla wydajno\u015bci realizacji zapyta\u0144 zakresowych z u\u017cyciem indeksu, gdzie wynikowy zbi\u00f3r rekord\u00f3w tabeli jest odczytywany na podstawie referencji ROWID znajduj\u0105cych si\u0119 w li\u015bciu (s\u0105siednich li\u015bciach) indeksu. Od tego, czy referencje te s\u0105 &#8222;s\u0105siednie&#8221; <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/09\/07\/wplyw-clustering-factor-na-wydajnosc-zapytan-zakresowych-z-indeksem\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Wp\u0142yw Clustering Factor na wydajno\u015b\u0107 zapyta\u0144 zakresowych z indeksem<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/08\/19\/podstawy-oracle-database-uwaga-na-koszt-planu-wykonania-zapytania\/\">Podstawy Oracle Database: uwaga na koszt planu wykonania zapytania!<\/a><time datetime=\"2016-08-19T14:42:41+02:00\" class=\"wp-block-latest-posts__post-date\">19 sierpnia 2016<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Czas rozprawi\u0107 si\u0119 ze zbyt cz\u0119sto powtarzan\u0105 herezj\u0105, zanim stanie si\u0119 prawd\u0105&#8230; Elementem techniki kosztowej optymalizacji zapyta\u0144 jest szacowanie koszt\u00f3w alternatywnych plan\u00f3w wykonania zapytania. Odbywa si\u0119 ono automatycznie podczas przetwarzania polecenia SQL przez optymalizator zapyta\u0144. Plan wykonania, kt\u00f3rego szacowany koszt okaza\u0142 si\u0119 najni\u017cszy ze wszystkich rozwa\u017canych, jest wybierany jako plan do realizacji. Programista ma mo\u017cliwo\u015b\u0107 obejrzenia zarysu najlepszego (najta\u0144szego) planu wykonania zapytania (np. poleceniem EXPLAIN PLAN FOR lub &#8211; lepiej &#8211; zapytaniem do funkcji pakietu <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/08\/19\/podstawy-oracle-database-uwaga-na-koszt-planu-wykonania-zapytania\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Podstawy Oracle Database: uwaga na koszt planu wykonania zapytania!<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\">Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?<\/a><time datetime=\"2016-08-11T23:34:36+02:00\" class=\"wp-block-latest-posts__post-date\">11 sierpnia 2016<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Przyjrzyjmy si\u0119 dzi\u015b do\u015b\u0107 popularnemu problemowi wydajno\u015bci masowej operacji UPDATE dokonuj\u0105cej modyfikacji bardzo du\u017cej liczby rekord\u00f3w. Spotykaj\u0105 si\u0119 z nim najcz\u0119\u015bciej programi\u015bci implementuj\u0105cy zadania wsadowe. Dla cel\u00f3w demonstracji pos\u0142u\u017cymy si\u0119 tabel\u0105 UPD_TEST o nast\u0119puj\u0105cej strukturze: create table upd_test (c1 number(10), c2 char(1018)); Rozmiar kolumny C2 zosta\u0142 tak dobrany, aby \u015brednia d\u0142ugo\u015b\u0107 rekordu oscylowa\u0142a w okolicach 1 kB. Na pocz\u0105tek tabela zostanie wype\u0142niona 100 000 nieistotnych rekord\u00f3w, dzi\u0119ki czemu jej rozmiar wyniesie 100 MB. begin &nbsp; <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/07\/14\/hinty-dla-perspektyw\/\">Hinty dla perspektyw<\/a><time datetime=\"2016-07-14T10:51:05+02:00\" class=\"wp-block-latest-posts__post-date\">14 lipca 2016<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Hinty (wskaz\u00f3wki) s\u0105 (niestety) do\u015b\u0107 popularnym narz\u0119dziem w r\u0119kach deweloper\u00f3w usi\u0142uj\u0105cych nak\u0142oni\u0107 kosztowy optymalizator zapyta\u0144 do zastosowania wybranego (przez dewelopera) planu wykonania zapytania. Wiele hint\u00f3w wymaga podania nazwy obiektu zapytania (tabeli, indeksu, itp.), w stosunku do kt\u00f3rego chcemy wymusi\u0107 okre\u015blone zachowanie optymalizatora. Co jednak zrobi\u0107 w przypadku, gdy zapytanie operuje na perspektywie, a chcemy u\u017cy\u0107 hintu w stosunku do np. tabeli u\u017cytej wewn\u0105trz definicji ten perspektywy (oczywi\u015bcie zwykle nie mamy mo\u017cliwo\u015bci ingerowania w definicj\u0119 perspektywy)? <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/07\/14\/hinty-dla-perspektyw\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Hinty dla perspektyw<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/06\/09\/podstawy-oracle-database-alokacja-pamieci-pga\/\">Podstawy Oracle Database: alokacja pami\u0119ci PGA<\/a><time datetime=\"2016-06-09T18:14:31+02:00\" class=\"wp-block-latest-posts__post-date\">9 czerwca 2016<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Pami\u0119\u0107 PGA (Program Global Area) serwera bazy danych Oracle Database 12c jest bezpo\u015brednio wykorzystywana przez procesy Server Process obs\u0142uguj\u0105ce sesje u\u017cytkownik\u00f3w. W przeciwie\u0144stwie do SGA, PGA nie jest wsp\u00f3\u0142dzielona przez wiele sesji &#8211; ka\u017cda sesja ma do dyspozycji swoj\u0105 odr\u0119bn\u0105 prywatn\u0105 cz\u0119\u015b\u0107 PGA. Preferowany sumaryczny rozmiar PGA dla wszystkich sesji mo\u017ce by\u0107 ustalony przez administratora (PGA_AGGREGATE_TARGET) lub automatycznie dobrany przez instancj\u0119 (w ramach MEMORY_TARGET). W trybie serwera dedykowanego (Dedicated Server Mode) pami\u0119\u0107 PGA zawiera trzy <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/06\/09\/podstawy-oracle-database-alokacja-pamieci-pga\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Podstawy Oracle Database: alokacja pami\u0119ci PGA<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\">Czy d\u0142ugi klucz = z\u0142y klucz?<\/a><time datetime=\"2016-04-04T14:13:06+02:00\" class=\"wp-block-latest-posts__post-date\">4 kwietnia 2016<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Histogramy wykorzystujemy do\u015b\u0107 powszechnie w celu mniej lub bardziej precyzyjnego szacowania selektywno\u015bci predykat\u00f3w u\u017cytych w zapytaniach (oczywi\u015bcie dla kolumn o nier\u00f3wnomiernym rozk\u0142adzie statystycznym). W pewnych przypadkach mo\u017cemy jednak pa\u015b\u0107 ofiar\u0105 uproszczenia zastosowanego przez Oracle podczas generowania histogram\u00f3w, czego efektem b\u0119d\u0105 z\u0142e\/bardzo z\u0142e szacunki selektywno\u015bci. Uproszczenie to dotyczy kolumn typu tekstowego i polega na uwzgl\u0119dnianiu w histogramie wy\u0142\u0105cznie pierwszych 64 znak\u00f3w (lub 32 znak\u00f3w w wersji Oracle Database 11g) tekstu kolumny. W rezultacie, r\u00f3\u017cne warto\u015bci posiadaj\u0105ce <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Czy d\u0142ugi klucz = z\u0142y klucz?<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/01\/05\/gdzie-sa-moje-histogramy-slow-kilka-o-size-auto\/\">Gdzie s\u0105 moje histogramy? S\u0142\u00f3w kilka o SIZE AUTO<\/a><time datetime=\"2016-01-05T11:56:51+01:00\" class=\"wp-block-latest-posts__post-date\">5 stycznia 2016<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Dla poprawnego dzia\u0142ania, kosztowy optymalizator zapyta\u0144 musi posiada\u0107 wiedz\u0119 o rozk\u0142adzie warto\u015bci kolumny, na kt\u00f3rej oparty jest predykat w zapytaniu. Wiedz\u0119 tak\u0105 mo\u017ce pozyska\u0107 na trzy sposoby: (1) pobieraj\u0105c losow\u0105 pr\u00f3bk\u0119 danych w chwili wykonywania zapytania (dynamic sampling), (2) pos\u0142uguj\u0105c si\u0119 wcze\u015bniej zebranymi statystykami podstawowymi i przyjmuj\u0105c rozk\u0142ad jednorodny warto\u015bci, (3) pos\u0142uguj\u0105c si\u0119 zebranym wcze\u015bniej histogramem i odczytuj\u0105c z niego charakterystyk\u0119 rozk\u0142adu warto\u015bci. W systemach OLTP b\u0119dziemy zwykle unikali Dynamic Samplingu na rzecz w\u0142a\u015bciwie zbieranych <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/01\/05\/gdzie-sa-moje-histogramy-slow-kilka-o-size-auto\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Gdzie s\u0105 moje histogramy? S\u0142\u00f3w kilka o SIZE AUTO<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2015\/07\/15\/kompresja-hcc-ocena-skutecznosci-na-laptopie\/\">Kompresja HCC &#8211; ocena skuteczno\u015bci na laptopie<\/a><time datetime=\"2015-07-15T13:04:19+02:00\" class=\"wp-block-latest-posts__post-date\">15 lipca 2015<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Exadata, ZFS oraz Pillar Axiom umo\u017cliwiaj\u0105 stosowanie wysoce skutecznej kompresji kolumnowej HCC (Hybric Columnar Compression) &#8211; ciekawy opis znajduje si\u0119 tu. Funkcjonalno\u015b\u0107 HCC jest jednak wbudowana w ka\u017cde wydanie serwera bazy danych Oracle Database 12c (nie tylko Exadata), lecz mo\u017cliwo\u015b\u0107 jej u\u017cycia jest blokowana na zasadzie &#8222;nie, bo nie&#8221;. Pomys\u0142y na jej odblokowanie publikowali ju\u017c Jonathan Lewis i Martin Berger. Natomiast zupe\u0142nie legalnie z HCC korzysta funkcja DBMS_COMPRESSION.GET_COMPRESSION_RATIO, kt\u00f3ra w celu oszacowania skuteczno\u015bci kompresji fizycznie <a href=\"https:\/\/explainit.pl\/wordpress\/2015\/07\/15\/kompresja-hcc-ocena-skutecznosci-na-laptopie\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Kompresja HCC &#8211; ocena skuteczno\u015bci na laptopie<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2015\/05\/15\/uwaga-na-stara-plan_table\/\">Uwaga na star\u0105 tabel\u0119 PLAN_TABLE<\/a><time datetime=\"2015-05-15T16:20:33+02:00\" class=\"wp-block-latest-posts__post-date\">15 maja 2015<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Nie ka\u017cdy administrator serwera bazy danych Oracle Database 10g\/11g\/12c zauwa\u017cy\u0142, \u017ce wiele lat temu Oracle zmieni\u0142 podej\u015bcie do tworzenia tabeli PLAN_TABLE (wykorzystywanej do pobierania planu wykonania zapytania). O ile dawno temu musieli\u015bmy j\u0105 budowa\u0107 samodzielnie za pomoc\u0105 skryptu utlxplan.sql, oddzielnie w schemacie ka\u017cdego zainteresowanego u\u017cytkownika, to pocz\u0105wszy od wersji 10g tabela PLAN_TABLE jest automatycznie tworzona przez skrypt catplan.sql (wo\u0142any z catptyps.sql, wo\u0142any z kolei z catproc.sql) jako og\u00f3lnodost\u0119pna globalna tabela tymczasowa w schemacie SYS wraz <a href=\"https:\/\/explainit.pl\/wordpress\/2015\/05\/15\/uwaga-na-stara-plan_table\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Uwaga na star\u0105 tabel\u0119 PLAN_TABLE<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2015\/03\/04\/indeksy-czesciowe-w-oracle-database-12c\/\">Indeksy cz\u0119\u015bciowe w Oracle Database 12c<\/a><time datetime=\"2015-03-04T16:05:49+01:00\" class=\"wp-block-latest-posts__post-date\">4 marca 2015<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Oracle Database 12c oferuje ciekawe rozwi\u0105zanie, pozwalaj\u0105ce zredukowa\u0107 rozmiar indeksu tworzonego na tabeli partycjonowanej, w kt\u00f3rej wiele partycji ma charakter archiwalny (bardzo rzadko podlega zapytaniom). Indeks cz\u0119\u015bciowy &#8211; bo o nim mowa &#8211; mo\u017ce obejmowa\u0107 swoim zasi\u0119giem wybrane partycje tabeli, podczas gdy rekordy w pozosta\u0142ych partycjach tabeli pozostaj\u0105 bez indeksu. Gdy realizowane jest zapytanie do tak indeksowanej tabeli, optymalizator zapyta\u0144 skorzysta z indeksu w przypadku partycji uwzgl\u0119dnionych w indeksie, oraz z pe\u0142nego odczytu partycji w <a href=\"https:\/\/explainit.pl\/wordpress\/2015\/03\/04\/indeksy-czesciowe-w-oracle-database-12c\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Indeksy cz\u0119\u015bciowe w Oracle Database 12c<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2014\/07\/01\/kilka-indeksow-na-tej-samej-kolumnie-wyrazeniu\/\">Kilka indeks\u00f3w na tej samej kolumnie (wyra\u017ceniu) ?!<\/a><time datetime=\"2014-07-01T15:37:08+02:00\" class=\"wp-block-latest-posts__post-date\">1 lipca 2014<\/time><div class=\"wp-block-latest-posts__post-excerpt\">W przesz\u0142o\u015bci wielokrotnie podejmowa\u0142em dyskusje dotycz\u0105ce w\u0142a\u015bciwego doboru typu indeksu w zale\u017cno\u015bci od charakterystyki danych i od rodzaju wykonywanych zapyta\u0144. Wydawa\u0142o si\u0119, \u017ce jednym z niespe\u0142nionych marze\u0144 programist\u00f3w by\u0142o utworzenie wielu alternatywnych indeks\u00f3w na tej samej kolumnie (np. bitmapowy, b-drzewo, partycjonowany lokalnie, partycjonowany globalnie,&#8230;) tak, aby to optymalizator zapyta\u0144 (a nie programista) wybra\u0142 sobie ten, kt\u00f3ry jest najkorzystniejszy. Dot\u0105d jednak by\u0142o to niemo\u017cliwe. W wersji Oracle Database 12c nie\u015bmia\u0142o wprowadzono mo\u017cliwo\u015b\u0107 definiowania kilku indeks\u00f3w na <a href=\"https:\/\/explainit.pl\/wordpress\/2014\/07\/01\/kilka-indeksow-na-tej-samej-kolumnie-wyrazeniu\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Kilka indeks\u00f3w na tej samej kolumnie (wyra\u017ceniu) ?!<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\">Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)<\/a><time datetime=\"2014-05-12T15:09:45+02:00\" class=\"wp-block-latest-posts__post-date\">12 maja 2014<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jak dobrze wiemy, serwer bazy danych Oracle Database zapewnia odtwarzalno\u015b\u0107 realizowanych transakcji poprzez generowanie informacji Redo zapisywanych w dziennikach powt\u00f3rze\u0144 (redo logs). Gdy zdarzy si\u0119 awaria, informacje te pozwalaj\u0105 zrekonstruowa\u0107 stan bazy danych b\u0119d\u0105cy skutkiem transakcji zrealizowanych przed awari\u0105. Istniej\u0105 jednak sytuacje, w kt\u00f3rych programi\u015bcie wcale nie zale\u017cy na zabezpieczeniu transakcji, a wr\u0119cz postrzega on zapisy informacji Redo jako element spowalniaj\u0105cy funkcjonowanie ca\u0142ego systemu. Na przyk\u0142ad \u2013 podczas zapisywania w bazie danych informacji tymczasowych, kt\u00f3re <a href=\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2014\/02\/05\/automatic-data-optimization-w-12c-information-lifecycle-management\/\">Automatic Data Optimization w 12c (Information Lifecycle Management)<\/a><time datetime=\"2014-02-05T13:33:28+01:00\" class=\"wp-block-latest-posts__post-date\">5 lutego 2014<\/time><div class=\"wp-block-latest-posts__post-excerpt\">To jedna z ciekawszych nowych funkcjonalno\u015bci serwera Oracle Database 12c. Pomaga zoptymalizowa\u0107 mechanizmy sk\u0142adowania danych, kt\u00f3rymi u\u017cytkownicy od pewnego czasu przestali si\u0119 aktywnie interesowa\u0107. Aktualnie dost\u0119pne s\u0105 dwa rozwi\u0105zania: (1) kompresja (rekompresja) danych \u201eniedotykanych\u201d przez u\u017cytkownik\u00f3w, (2) przenoszenie (tzw. tiering) do \u201eta\u0144szej\u201d przestrzeni tabel tych partycji, kt\u00f3re przestaj\u0105 si\u0119 mie\u015bci\u0107 w aktualnej przestrzeni tabel, a kt\u00f3rymi u\u017cytkownicy najmniej si\u0119 interesuj\u0105. Aby skorzysta\u0107 z Automatic Data Optimization nale\u017cy zdefiniowa\u0107 tzw. polityk\u0119 ILM, np.: alter table zamowienia <a href=\"https:\/\/explainit.pl\/wordpress\/2014\/02\/05\/automatic-data-optimization-w-12c-information-lifecycle-management\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Automatic Data Optimization w 12c (Information Lifecycle Management)<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2013\/11\/15\/ora-12519-typowe-rozwiazania\/\">B\u0142\u0119dy ORA-12519 &#8211; typowe rozwi\u0105zania<\/a><time datetime=\"2013-11-15T11:49:36+01:00\" class=\"wp-block-latest-posts__post-date\">15 listopada 2013<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Najcz\u0119stsz\u0105 przyczyn\u0105 b\u0142\u0119du ORA-12519 ujawniaj\u0105cego si\u0119 podczas pr\u00f3by 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\u0105gni\u0119cie przez serwer limitu r\u00f3wnocze\u015bnie po\u0142\u0105czonych proces\u00f3w\/sesji okre\u015blanego parametrami inicjalizacyjnymi PROCESSES i SESSIONS. Oto prosty spos\u00f3b sprawdzenia aktualnych warto\u015bci tych limit\u00f3w (LIMIT_VALUE), jak i odczytania najwy\u017cszej dotychczas (MAX_UTILIZATION) liczby r\u00f3wnoczesnych sesji i proces\u00f3w: SQL&gt; select * from v$resource_limit where resource_name in (&#8217;processes&#8217;,&#8217;sessions&#8217;); RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION <a href=\"https:\/\/explainit.pl\/wordpress\/2013\/11\/15\/ora-12519-typowe-rozwiazania\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about B\u0142\u0119dy ORA-12519 &#8211; typowe rozwi\u0105zania<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2013\/10\/21\/jak-nie-pomylic-sie-za-pierwszym-razem-adaptatywne-plany-wykonania-w-12c\/\">Jak nie pomyli\u0107 si\u0119 za pierwszym razem? Adaptatywne plany wykonania w  Oracle Database 12c<\/a><time datetime=\"2013-10-21T09:52:20+02:00\" class=\"wp-block-latest-posts__post-date\">21 pa\u017adziernika 2013<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Zajmowali\u015bmy si\u0119 ju\u017c kiedy\u015b ciekaw\u0105 kwest\u0105 korygowania nieoptymalnego planu wykonania z wykorzystaniem Cardinality Feedback (Jak optymalizator uczy si\u0119 na b\u0142\u0119dach). Pokazali\u015bmy, \u017ce po pierwszym wykonaniu nieoptymalnego planu wykonania optymalizator potrafi go zmodyfikowa\u0107 tak, aby drugie wykonanie przebieg\u0142o ju\u017c bardziej efektywnie. Niestety, ten mechanizm serwera potrafi by\u0107 skuteczny dopiero przy drugim wywo\u0142aniu tego samego zapytania. Pierwsze wywo\u0142anie trzeba spisa\u0107 na straty\u2026? Niekoniecznie\u2026 Interesuj\u0105ce rozwi\u0105zanie zosta\u0142o wprowadzone w Oracle Database 12.1 pod nazw\u0105 Adaptive Plans. Polega ono <a href=\"https:\/\/explainit.pl\/wordpress\/2013\/10\/21\/jak-nie-pomylic-sie-za-pierwszym-razem-adaptatywne-plany-wykonania-w-12c\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Jak nie pomyli\u0107 si\u0119 za pierwszym razem? Adaptatywne plany wykonania w  Oracle Database 12c<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2013\/08\/11\/profile-czy-hinty\/\">Profile czy hinty?<\/a><time datetime=\"2013-08-11T11:22:44+02:00\" class=\"wp-block-latest-posts__post-date\">11 sierpnia 2013<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Zar\u00f3wno SQL Profiles, jak i Hints to mechanizmy pozwalaj\u0105ce sterowa\u0107 zachowaniem optymalizatora &nbsp;zapyta\u0144 tak, aby wydajno\u015b\u0107 generowanych plan\u00f3w by\u0142a jak najlepsza. By\u0142yby one niepotrzebne, gdyby optymalizator potrafi\u0142 zawsze trafnie wybra\u0107 optymalny plan wykonania. Poniewa\u017c jednak nierzadko zdarza si\u0119 optymalizatorowi \u201echybi\u0107\u201d, to takie lekarstwa s\u0105 niezb\u0119dne. Hinty to zapisane w tre\u015bci polecenia SQL wskaz\u00f3wki (zalecenia), instruuj\u0105ce optymalizator zapyta\u0144 na temat tego, jakie kroki powinny, lub nie powinny znale\u017a\u0107 si\u0119 w planie wykonania. Umo\u017cliwiaj\u0105 one zaw\u0119\u017cenie przestrzeni <a href=\"https:\/\/explainit.pl\/wordpress\/2013\/08\/11\/profile-czy-hinty\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Profile czy hinty?<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2013\/06\/19\/jak-mozemy-chronic-sie-przed-pogorszeniem-planu-wykonania\/\">Jak mo\u017cemy chroni\u0107 si\u0119 przed pogorszeniem planu wykonania?<\/a><time datetime=\"2013-06-19T08:45:23+02:00\" class=\"wp-block-latest-posts__post-date\">19 czerwca 2013<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Nierzadko spotykamy si\u0119 z problemem gwa\u0142townego pogorszenia wydajno\u015bci starej, wielokrotnie sprawdzonej i zoptymalizowanej aplikacji. Przyczyn\u0105 zwykle jest upgrade oprogramowania serwera bazy danych, zmiana sposobu zbierania statystyk dla optymalizatora zapyta\u0144, rekonfiguracja optymalizatora zapyta\u0144 czy zmiana ustawie\u0144 systemowych. Czy mo\u017cna jako\u015b uchroni\u0107 si\u0119 przed takimi wydajno\u015bciowymi niespodziankami w przysz\u0142o\u015bci? Istnieje mechanizm serwera bazy danych Oracle Database umo\u017cliwiaj\u0105cy ochron\u0119 dobrych, wydajnych plan\u00f3w wykonania zapyta\u0144 przed gwa\u0142townym pogorszeniem w wyniku zmian systemowych \u2013 SQL Plan Management. Zast\u0119puje on wcze\u015bniejsze <a href=\"https:\/\/explainit.pl\/wordpress\/2013\/06\/19\/jak-mozemy-chronic-sie-przed-pogorszeniem-planu-wykonania\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Jak mo\u017cemy chroni\u0107 si\u0119 przed pogorszeniem planu wykonania?<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2013\/03\/29\/eksperymenty-z-cursor_sharing\/\">Eksperymenty z CURSOR_SHARING<\/a><time datetime=\"2013-03-29T15:54:01+01:00\" class=\"wp-block-latest-posts__post-date\">29 marca 2013<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jednym z bardziej popularnych parametr\u00f3w konfiguracyjnych jest CURSOR_SHARING, umo\u017cliwiaj\u0105cy sterowanie wsp\u00f3\u0142dzieleniem kursor\u00f3w i plan\u00f3w wykonania zapyta\u0144 (pojawi\u0142 si\u0119 w 8.1.6). Mo\u017ce przyj\u0105\u0107 jedn\u0105 z trzech warto\u015bci: EXACT (domy\u015blna), SIMILAR, FORCE, przy czym Oracle zapowiedzia\u0142 wycofanie opcji SIMILAR (ju\u017c nawet w wersji 11g [og\u0142oszenie ID 1169017.1], jednak jest nadal dost\u0119pna). Parametr CURSOR_SHARING jest reklamowany jako lekarstwo na problemy wydajno\u015bciowe powodowane przez niesfornych programist\u00f3w, kt\u00f3rzy w cz\u0119sto wykonywanych zapytaniach SQL stosuj\u0105 litera\u0142y zamiast zmiennych wi\u0105zanych (bind variables). <a href=\"https:\/\/explainit.pl\/wordpress\/2013\/03\/29\/eksperymenty-z-cursor_sharing\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Eksperymenty z CURSOR_SHARING<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2013\/01\/30\/dlaczego-select-powoduje-zapisy-dyskowe-delayed-block-cleanout\/\">Dlaczego polecenie SELECT powoduje zapisy dyskowe? Delayed Block Cleanout!<\/a><time datetime=\"2013-01-30T13:42:09+01:00\" class=\"wp-block-latest-posts__post-date\">30 stycznia 2013<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Przyjrzyjmy si\u0119 ciekawemu zjawisku, kt\u00f3re przejawia si\u0119 tym, \u017ce czasami wykonanie zapytania SELECT powoduje modyfikacje blok\u00f3w dyskowych oraz zapisy danych powt\u00f3rzenia (Redo). W konsekwencji , wydajno\u015b\u0107 polecenia SELECT staje si\u0119 nieakceptowalna. W poni\u017cszym eksperymencie pos\u0142uguj\u0119 si\u0119 tabel\u0105 zawieraj\u0105c\u0105 milion rekord\u00f3w, zajmuj\u0105ca 130MB. W pierwszym kroku, na tabeli wykonuj\u0119 polecenie UPDATE, kt\u00f3re modyfikuje co pi\u0105ty rekord. Zagregowane statystyki sesji s\u0142usznie ukazuj\u0105 wykonanie modyfikacji blok\u00f3w danych oraz wygenerowanie danych powt\u00f3rzenia. Zatwierdzam transakcj\u0119, ko\u0144cz\u0119 sesj\u0119. W drugim kroku, <a href=\"https:\/\/explainit.pl\/wordpress\/2013\/01\/30\/dlaczego-select-powoduje-zapisy-dyskowe-delayed-block-cleanout\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Dlaczego polecenie SELECT powoduje zapisy dyskowe? Delayed Block Cleanout!<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/20\/a-czy-pamietasz-o-statystykach-systemowych\/\">A czy pami\u0119tasz o statystykach systemowych?<\/a><time datetime=\"2012-12-20T16:13:06+01:00\" class=\"wp-block-latest-posts__post-date\">20 grudnia 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jak wiemy, aby trafnie estymowa\u0107 koszty plan\u00f3w wykonania zapyta\u0144, optymalizator zapyta\u0144 wymaga obecno\u015bci szeregu statystyk (modeli statystycznych). Statystyki te dziel\u0105 si\u0119 na cztery kategorie: (1) statystyki opisuj\u0105ce tabele (liczba rekord\u00f3w, liczba blok\u00f3w, \u015bredni rozmiar rekordu), (2) statystyki opisuj\u0105ce indeksy (liczba blok\u00f3w li\u015bci, liczba poziom\u00f3w, wsp\u00f3\u0142czynnik klastrowania), (3) statystyki opisuj\u0105ce kolumny tabel (liczba warto\u015bci, liczba warto\u015bci pustych, rozk\u0142ad warto\u015bci \u2013 histogram), (4) statystyki systemowe (wydajno\u015b\u0107 CPU, wydajno\u015b\u0107 dyskowego I\/O). O ile pierwsze trzy kategorie statystyk s\u0105 <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/20\/a-czy-pamietasz-o-statystykach-systemowych\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about A czy pami\u0119tasz o statystykach systemowych?<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/19\/jak-optymalizator-oracle-database-uczy-sie-na-bledach-cardinality-feedback\/\">Jak optymalizator Oracle Database uczy si\u0119 na b\u0142\u0119dach (Cardinality Feedback)<\/a><time datetime=\"2012-12-19T19:19:13+01:00\" class=\"wp-block-latest-posts__post-date\">19 grudnia 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Podczas estymacji kosztu planu wykonania zapytania, kosztowy optymalizator zapyta\u0144 musi m.in. oszacowa\u0107 liczby rekord\u00f3w (tzw. kardynalno\u015b\u0107), kt\u00f3re b\u0119d\u0105 przetwarzane przez zapytanie w r\u00f3\u017cnych fazach jego realizacji. Od precyzji tych szacunk\u00f3w zale\u017c\u0105 decyzje dotycz\u0105ce np. kolejno\u015bci \u0142\u0105czenia tabel czy te\u017c wyboru algorytmu \u0142\u0105czenia tabel. Szacunki kardynalno\u015bci s\u0105 dokonywane przede wszystkim na podstawie dost\u0119pnych statystyk dla tabel i ich kolumn. Nie zawsze jednak optymalizator zachowuje sie nieomylnie, zw\u0142aszcza gdy w zapytaniu wyst\u0119puj\u0105 z\u0142o\u017cone predykaty lub gdy dost\u0119pne <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/19\/jak-optymalizator-oracle-database-uczy-sie-na-bledach-cardinality-feedback\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Jak optymalizator Oracle Database uczy si\u0119 na b\u0142\u0119dach (Cardinality Feedback)<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/18\/dlaczego-99-ze-100-to-tylko-1\/\">Dlaczego 99 ze 100 to tylko 1%?<\/a><time datetime=\"2012-12-18T20:55:29+01:00\" class=\"wp-block-latest-posts__post-date\">18 grudnia 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">W bazie danych umieszczamy tabel\u0119 zawieraj\u0105c\u0105 sto rekord\u00f3w, kt\u00f3re w kolumnie P\u0141E\u0106 posiadaj\u0105 99 razy warto\u015b\u0107 \u2018M\u2019 i jeden raz warto\u015b\u0107 \u2018K\u2019. Gromadzimy statystyki dla tej tabeli, gromadzimy histogram dla kolumny P\u0141E\u0106. Nast\u0119pnie wykonujemy zapytanie, kt\u00f3re w klauzuli WHERE posiada predykat UPPER(P\u0141E\u0106) = \u2018M\u2019. Jaka jest selektywno\u015b\u0107 tego predykatu? Oczywi\u015bcie 99%. Jak\u0105 selektywno\u015b\u0107 oszacuje optymalizator kosztowy? &#8230; 1%. Przyjrzyjmy si\u0119 poni\u017cszemu przyk\u0142adowi. Kolumna Rows w planie wykonania zapytania pokazuje oczekiwan\u0105 przez optymalizator liczb\u0119 rekord\u00f3w spe\u0142niaj\u0105cych <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/18\/dlaczego-99-ze-100-to-tylko-1\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Dlaczego 99 ze 100 to tylko 1%?<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/17\/wylaczanie-uzycia-sciezki-bezposredniej-w-pelnym-odczycie-tabeli-oracle-database\/\">Wy\u0142\u0105czanie u\u017cycia \u015bcie\u017cki bezpo\u015bredniej przy pe\u0142nym odczycie tabeli (Oracle Database 11g)<\/a><time datetime=\"2012-12-17T00:18:25+01:00\" class=\"wp-block-latest-posts__post-date\">17 grudnia 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jednym z ciekawszych mechanizm\u00f3w prowadzenia dyskowego wej\u015bcia\/wyj\u015bcia w Oracle Database 11g jest realizacja pe\u0142nego odczytu tabeli (full table scan) metod\u0105 \u015bcie\u017cki bezpo\u015bredniej (direct path). Idea \u015bcie\u017cki bezpo\u015bredniej polega na pomijaniu bufora Buffer Cache i odczytywaniu blok\u00f3w tabeli z dysku bezpo\u015brednio do PGA. Dzi\u0119ki temu mo\u017cliwa jest poprawa wydajno\u015bci operacji pe\u0142nego odczytu tabeli (brak narzut\u00f3w zwi\u0105zanych z zarz\u0105dzaniem Buffer Cache). Czy programista\/administrator ma mo\u017cliwo\u015b\u0107 decydowania, kt\u00f3re operacje pe\u0142nego odczytu tabeli maj\u0105 korzysta\u0107 ze \u015bcie\u017cki bezpo\u015bredniej (np. <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/17\/wylaczanie-uzycia-sciezki-bezposredniej-w-pelnym-odczycie-tabeli-oracle-database\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Wy\u0142\u0105czanie u\u017cycia \u015bcie\u017cki bezpo\u015bredniej przy pe\u0142nym odczycie tabeli (Oracle Database 11g)<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/15\/gdy-brakuje-niektorych-statystyk-dla-optymalizatora\/\">Gdy brakuje (niekt\u00f3rych) statystyk dla optymalizatora<\/a><time datetime=\"2012-12-15T20:19:04+01:00\" class=\"wp-block-latest-posts__post-date\">15 grudnia 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">W jaki spos\u00f3b kosztowy optymalizator zapyta\u0144 estymuje koszt planu wykonania zapytania je\u015bli administrator\/programista nie zadba\u0142 o zgromadzenie statystyk dla optymalizatora? Wcze\u015bniejsze wersje serwer\u00f3w Oracle Database prze\u0142\u0105cza\u0142y si\u0119 wtedy w tryb optymalizacji regu\u0142owej. Serwer Oracle Database 11g skorzysta w tej sytuacji z tzw. dynamicznego pr\u00f3bkowania (dynamic sampling), polegaj\u0105cego na pobraniu losowej pr\u00f3bki blok\u00f3w tabel uczestnicz\u0105cych w zapytaniu (i wykorzystaniu tych blok\u00f3w do oblicze\u0144 selektywno\u015bci). Og\u00f3lnie rzecz bior\u0105c, dynamiczne pr\u00f3bkowanie pogarsza efektywno\u015b\u0107 pracy optymalizatora zapyta\u0144, poniewa\u017c powoduje <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/15\/gdy-brakuje-niektorych-statystyk-dla-optymalizatora\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Gdy brakuje (niekt\u00f3rych) statystyk dla optymalizatora<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/10\/sledzenie-pracy-optymalizatora-zapytan-oracle-database\/\">\u015aledzenie pracy optymalizatora zapyta\u0144 Oracle Database<\/a><time datetime=\"2012-12-10T19:58:15+01:00\" class=\"wp-block-latest-posts__post-date\">10 grudnia 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Dzia\u0142anie kosztowego optymalizatora zapyta\u0144 w uproszczeniu polega na: (1) transformacji tekstu zapytania SQL, (2) generowaniu alternatywnych plan\u00f3w wykonania zapytania, (3) estymacji ich koszt\u00f3w, (4) wyborze tego planu wykonania, kt\u00f3rego estymowany koszt jest najni\u017cszy. Transformacja tekstu zapytania SQL mo\u017ce obejmowa\u0107 np. scalanie definicji perspektywy, \u201ewpychanie\u201d predykat\u00f3w, rozwijanie podzapyta\u0144, przepisywanie zapyta\u0144 na perspektywy materializowane. Z kolei alternatywne plany wykonania zapytania mog\u0105 si\u0119 r\u00f3\u017cni\u0107 np. kolejno\u015bci\u0105 \u0142\u0105czenia tabel, algorytmami \u0142\u0105czenia tabel, wyborem indeks\u00f3w. Programista\/administrator mo\u017ce oczywi\u015bcie w \u0142atwy <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/10\/sledzenie-pracy-optymalizatora-zapytan-oracle-database\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about \u015aledzenie pracy optymalizatora zapyta\u0144 Oracle Database<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\">Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)<\/a><time datetime=\"2012-12-02T13:31:07+01:00\" class=\"wp-block-latest-posts__post-date\">2 grudnia 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Buffer Cache to obszar pami\u0119ci wewn\u0105trz SGA pe\u0142ni\u0105cy rol\u0119 dwukierunkowego bufora dyskowego uczestnicz\u0105cego w operacjach odczytu i zapisu obiekt\u00f3w u\u017cytkownik\u00f3w (tabele, indeksy). Jego rozmiar jest okre\u015blany automatycznie lub jest narzucony przez administratora (parametr db_cache_size). Buffer Cache s\u0142u\u017cy redukcji aktywno\u015bci dyskowej serwera. Zanim zapytanie SQL odczyta blok danych z dysku, najpierw pr\u00f3buje znale\u017a\u0107 ten blok w Buffer Cache. Gdy szukany blok nie znajduje sie w Buffer Cache, wtedy jest odczytywany z dysku i (zwykle) umieszczany w <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/11\/29\/odtwarzanie-bazy-danych-oracle-po-awarii-ostatnia-deska-ratunku\/\">Odtwarzanie bazy danych Oracle po awarii \u2013 ostatnia deska ratunku<\/a><time datetime=\"2012-11-29T23:55:59+01:00\" class=\"wp-block-latest-posts__post-date\">29 listopada 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jak wiemy, do kompletnego odtworzenia bazy danych po awarii dyskowej niezb\u0119dne s\u0105: (1) kopie bezpiecze\u0144stwa uszkodzonych plik\u00f3w, (2) wszystkie archiwalne pliki dziennika powt\u00f3rze\u0144, kt\u00f3re powsta\u0142y od momentu wykonania kopii bezpiecze\u0144stwa. Gdy brakuje niekt\u00f3rych plik\u00f3w dziennika powt\u00f3rze\u0144, jeste\u015bmy skazani na odtwarzanie niepe\u0142ne (Incomplete Recovery). Jednak nawet procedura odtwarzania niepe\u0142nego wymaga co najmniej obecno\u015bci archiwalnych plik\u00f3w dziennika powt\u00f3rze\u0144, kt\u00f3re powstawa\u0142y _w trakcie_ wykonywania kopii bezpiecze\u0144stwa (gor\u0105cej). Co zrobi\u0107 w niezwykle rzadkiej sytuacji utraty archiwalnych plik\u00f3w dziennika powt\u00f3rze\u0144 <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/11\/29\/odtwarzanie-bazy-danych-oracle-po-awarii-ostatnia-deska-ratunku\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Odtwarzanie bazy danych Oracle po awarii \u2013 ostatnia deska ratunku<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/11\/21\/oracle-database-indeks-b-drzewo-a-operator-like\/\">Oracle Database &#8211; indeks B*-drzewo a operator LIKE<\/a><time datetime=\"2012-11-21T15:32:02+01:00\" class=\"wp-block-latest-posts__post-date\">21 listopada 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Czy indeks B*-drzewo mo\u017ce by\u0107 u\u017cyty do wyszukiwania opartego na predykacie LIKE? To zale\u017cy. Przyjrzyjmy si\u0119 planom wykonania dw\u00f3ch zapyta\u0144 do przyk\u0142adowej tabeli DUZA_TEKSTOWA (16 tysi\u0119cy rekord\u00f3w, niepowtarzalne warto\u015bci w kolumnie tekstowej A). SQL&gt; create index demo_idx1 on duza_tekstowa(a); &#8230; SQL&gt; select * from duza_tekstowa where a like 'abcd%&#8217;; &#8230; Plan wykonywania &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; | Id | Operation\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | Name\u00a0\u00a0\u00a0\u00a0\u00a0 | Rows | Bytes | Cost (%CPU)| &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; | 0\u00a0 | SELECT STATEMENT |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 1 <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/11\/21\/oracle-database-indeks-b-drzewo-a-operator-like\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Oracle Database &#8211; indeks B*-drzewo a operator LIKE<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/11\/19\/indeks-b-drzewo-a-wyszukiwanie-wartosci-null\/\">Indeks B*-drzewo a wyszukiwanie warto\u015bci NULL<\/a><time datetime=\"2012-11-19T14:43:59+01:00\" class=\"wp-block-latest-posts__post-date\">19 listopada 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Nie ka\u017cdy programista pami\u0119ta, \u017ce struktura indeksu B*-drzewo pomija warto\u015bci NULL, czego efektem jest odmowa u\u017cycia takiego indeksu do realizacji predykatu IS NULL. \u0141atwo zaobserwowa\u0107 takie zjawisko wykonuj\u0105c prosty eksperyment. Poni\u017csza tabela DUZA_Z_NULLAMI(A,B) zawiera p\u00f3\u0142 miliona rekord\u00f3w, w\u015br\u00f3d kt\u00f3rych jeden rekord posiada warto\u015b\u0107 NULL w kolumnie A. Na kolumnie tej utworzony zosta\u0142 indeks DEMO_IDX1. Obejrzyjmy plany wykonania dw\u00f3ch zapyta\u0144 \u2013 jedno wyszukuje rekord wed\u0142ug konkretnej niepustej warto\u015bci kolumny A, drugie \u2013 wyszukuje rekord z warto\u015bci\u0105 <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/11\/19\/indeks-b-drzewo-a-wyszukiwanie-wartosci-null\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Indeks B*-drzewo a wyszukiwanie warto\u015bci NULL<\/span>[&hellip;]<\/a><\/div><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/explainit.pl\/wordpress\/2012\/10\/30\/wykonywanie-testow-wydajnosciowych-tpc-c-narzedzie-hammerdb\/\">Wykonywanie test\u00f3w wydajno\u015bciowych TPC-C: narz\u0119dzie HammerDB<\/a><time datetime=\"2012-10-30T21:49:46+01:00\" class=\"wp-block-latest-posts__post-date\">30 pa\u017adziernika 2012<\/time><div class=\"wp-block-latest-posts__post-excerpt\">Jednym z trudniejszych zada\u0144 wdro\u017ceniowych jest ocena i dob\u00f3r wydajnej platformy sprz\u0119towo-systemowej dla serwera bazy danych. Z powodu trudno\u015bci w analitycznym szacowaniu wydajno\u015bci serwera na planowanej platformie, powszechnie wykonujemy por\u00f3wnawcze testy wydajno\u015bciowe (benchmarki). Bardzo popularnym, standardowym benchmarkiem wydajno\u015bciowym jest TPC-C, opracowany we wrze\u015bniu 1992 roku przez organizacj\u0119 TPC. Benchmark TPC-C jest zorientowany na badanie wydajno\u015bci system\u00f3w przetwarzania transakcyjnego (OLTP) \u2013 z du\u017c\u0105 liczb\u0105 u\u017cytkownik\u00f3w oraz du\u017c\u0105 liczb\u0105 operacji wprowadzania i modyfikowania danych biznesowych (ostatnia, pi\u0105ta <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/10\/30\/wykonywanie-testow-wydajnosciowych-tpc-c-narzedzie-hammerdb\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Wykonywanie test\u00f3w wydajno\u015bciowych TPC-C: narz\u0119dzie HammerDB<\/span>[&hellip;]<\/a><\/div><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.2.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Blog Oracle\/Postgres - Explain IT<\/title>\n<meta name=\"description\" content=\"Tematyka blogu skupia si\u0119 na nietrywialnych problemach spotykanych przez administrator\u00f3w i deweloper\u00f3w pos\u0142uguj\u0105cych si\u0119 technologiami Oracle Database i PostgreSQL. Prezentowane rozwi\u0105zania oparte s\u0105 na do\u015bwiadczeniach zawodowych autora, dokumentacji technicznej, literaturze i zasobach sieciowych.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/explainit.pl\/wordpress\/blog\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Blog Oracle\/Postgres - Explain IT\" \/>\n<meta property=\"og:description\" content=\"Tematyka blogu skupia si\u0119 na nietrywialnych problemach spotykanych przez administrator\u00f3w i deweloper\u00f3w pos\u0142uguj\u0105cych si\u0119 technologiami Oracle Database i PostgreSQL. Prezentowane rozwi\u0105zania oparte s\u0105 na do\u015bwiadczeniach zawodowych autora, dokumentacji technicznej, literaturze i zasobach sieciowych.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/explainit.pl\/wordpress\/blog\/\" \/>\n<meta property=\"og:site_name\" content=\"Explain IT\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-24T10:58:27+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/blog\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/blog\/\",\"name\":\"Blog Oracle\/Postgres - Explain IT\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\"},\"datePublished\":\"2016-07-26T11:17:18+00:00\",\"dateModified\":\"2021-01-24T10:58:27+00:00\",\"description\":\"Tematyka blogu skupia si\u0119 na nietrywialnych problemach spotykanych przez administrator\u00f3w i deweloper\u00f3w pos\u0142uguj\u0105cych si\u0119 technologiami Oracle Database i PostgreSQL. Prezentowane rozwi\u0105zania oparte s\u0105 na do\u015bwiadczeniach zawodowych autora, dokumentacji technicznej, literaturze i zasobach sieciowych.\",\"breadcrumb\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/blog\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/blog\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/blog\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/explainit.pl\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog Oracle\/Postgres\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"name\":\"Explain IT\",\"description\":\"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.\",\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\",\"name\":\"Explain IT\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"contentUrl\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"width\":196,\"height\":64,\"caption\":\"Explain IT\"},\"image\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Blog Oracle\/Postgres - Explain IT","description":"Tematyka blogu skupia si\u0119 na nietrywialnych problemach spotykanych przez administrator\u00f3w i deweloper\u00f3w pos\u0142uguj\u0105cych si\u0119 technologiami Oracle Database i PostgreSQL. Prezentowane rozwi\u0105zania oparte s\u0105 na do\u015bwiadczeniach zawodowych autora, dokumentacji technicznej, literaturze i zasobach sieciowych.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/explainit.pl\/wordpress\/blog\/","og_locale":"pl_PL","og_type":"article","og_title":"Blog Oracle\/Postgres - Explain IT","og_description":"Tematyka blogu skupia si\u0119 na nietrywialnych problemach spotykanych przez administrator\u00f3w i deweloper\u00f3w pos\u0142uguj\u0105cych si\u0119 technologiami Oracle Database i PostgreSQL. Prezentowane rozwi\u0105zania oparte s\u0105 na do\u015bwiadczeniach zawodowych autora, dokumentacji technicznej, literaturze i zasobach sieciowych.","og_url":"https:\/\/explainit.pl\/wordpress\/blog\/","og_site_name":"Explain IT","article_modified_time":"2021-01-24T10:58:27+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/explainit.pl\/wordpress\/blog\/","url":"https:\/\/explainit.pl\/wordpress\/blog\/","name":"Blog Oracle\/Postgres - Explain IT","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/#website"},"datePublished":"2016-07-26T11:17:18+00:00","dateModified":"2021-01-24T10:58:27+00:00","description":"Tematyka blogu skupia si\u0119 na nietrywialnych problemach spotykanych przez administrator\u00f3w i deweloper\u00f3w pos\u0142uguj\u0105cych si\u0119 technologiami Oracle Database i PostgreSQL. Prezentowane rozwi\u0105zania oparte s\u0105 na do\u015bwiadczeniach zawodowych autora, dokumentacji technicznej, literaturze i zasobach sieciowych.","breadcrumb":{"@id":"https:\/\/explainit.pl\/wordpress\/blog\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/explainit.pl\/wordpress\/blog\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/explainit.pl\/wordpress\/blog\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/explainit.pl\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Blog Oracle\/Postgres"}]},{"@type":"WebSite","@id":"https:\/\/explainit.pl\/wordpress\/#website","url":"https:\/\/explainit.pl\/wordpress\/","name":"Explain IT","description":"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.","publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/explainit.pl\/wordpress\/#organization","name":"Explain IT","url":"https:\/\/explainit.pl\/wordpress\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/","url":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","contentUrl":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","width":196,"height":64,"caption":"Explain IT"},"image":{"@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/pages\/11"}],"collection":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":13,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/pages\/11\/revisions"}],"predecessor-version":[{"id":914,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/pages\/11\/revisions\/914"}],"wp:attachment":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}