{"id":37975,"date":"2019-10-31T22:20:56","date_gmt":"2019-10-31T19:20:56","guid":{"rendered":"https:\/\/prohoster.info\/blog\/apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost\/"},"modified":"2019-10-31T22:20:56","modified_gmt":"2019-10-31T19:20:56","slug":"apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost","title":{"rendered":"Ulepszanie dla leniwych: jak PostgreSQL 12 zwi\u0119ksza wydajno\u015b\u0107","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ulepszanie dla leniwych: jak PostgreSQL 12 zwi\u0119ksza wydajno\u015b\u0107\" src=\"\/wp-content\/uploads\/2019\/09\/59721c53412b5932a332bd6c687650e8.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/\">PostgreSQL 12<\/a><\/noindex>, najnowsza wersja \"najlepszej na \u015bwiecie relacyjnej bazy danych z otwartym \u017ar\u00f3d\u0142em\", zostanie wydana za kilka tygodni (je\u015bli wszystko p\u00f3jdzie zgodnie z planem). To pasuje do standardowego harmonogramu \u2014 nowa wersja z mn\u00f3stwem nowych funkcji wydawana jest raz w roku, a szczerze m\u00f3wi\u0105c, to robi wra\u017cenie. Dlatego sta\u0142em si\u0119 aktywnym cz\u0142onkiem spo\u0142eczno\u015bci PostgreSQL.<\/p>\n<p><\/p>\n<p>Moim zdaniem, w odr\u00f3\u017cnieniu od poprzednich wyda\u0144, PostgreSQL 12 nie zawiera jednej czy dw\u00f3ch rewolucyjnych funkcji (jak na przyk\u0142ad partycjonowanie czy r\u00f3wnoleg\u0142o\u015b\u0107 zapyta\u0144). \u017bartowa\u0142em, \u017ce g\u0142\u00f3wn\u0105 zalet\u0105 PostgreSQL 12 jest wi\u0119ksza stabilno\u015b\u0107. A czy nie tego potrzebujesz, gdy zarz\u0105dzasz krytycznymi danymi swojego biznesu?<\/p>\n<p><\/p>\n<p>Jednak PostgreSQL 12 na tym si\u0119 nie ko\u0144czy: nowe mo\u017cliwo\u015bci i udoskonalenia sprawi\u0105, \u017ce aplikacje b\u0119d\u0105 dzia\u0142a\u0107 lepiej, <em>a od Ciebie wystarczy jedynie wykona\u0107 aktualizacj\u0119!<\/em><\/p>\n<p><\/p>\n<p>(C\u00f3\u017c, mo\u017ce jeszcze przebudowa\u0107 indeksy, ale w tej wersji nie jest to takie straszne, jak si\u0119 przyzwyczaili\u015bmy.)<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>B\u0119dzie super \u2014 zaktualizowa\u0107 PostgreSQL i od razu cieszy\u0107 si\u0119 znacznymi poprawami bez zb\u0119dnych dzia\u0142a\u0144. Kilka lat temu analizowa\u0142em aktualizacj\u0119 z PostgreSQL 9.4 do PostgreSQL 10 i zauwa\u017cy\u0142em, jak zwi\u0119kszy\u0142a si\u0119 wydajno\u015b\u0107 aplikacji dzi\u0119ki lepszemu paralelizmowi zapyta\u0144 w PostgreSQL 10. I co najwa\u017cniejsze, niemal niczego ode mnie nie wymagano (tylko ustawienie parametru konfiguracyjnego) <code>max_parallel_workers<\/code>).<\/p>\n<p><\/p>\n<p>Zg\u00f3d\u017a si\u0119, \u017ce to wygodne, gdy aplikacje dzia\u0142aj\u0105 lepiej tu\u017c po aktualizacji. Bardzo staramy si\u0119 zadowoli\u0107 u\u017cytkownik\u00f3w, poniewa\u017c PostgreSQL ma ich coraz wi\u0119cej.<\/p>\n<p><\/p>\n<p>A jak zwyk\u0142a aktualizacja do PostgreSQL 12 uczyni ci\u0119 szcz\u0119\u015bliwym? Ju\u017c opowiem.<\/p>\n<p><\/p>\n<h3 id=\"sereznye-uluchsheniya-indeksirovaniya\">Powa\u017cne udoskonalenia w indeksowaniu<\/h3>\n<p><\/p>\n<p>Bez indeksowania baza danych daleko nie zajdzie. Jak inaczej szybko znajdowa\u0107 informacje? Fundamentalny system indeksowania PostgreSQL nazywa si\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/B-tree\">B-drzewo<\/a><\/noindex>. Ten typ indeksu jest zoptymalizowany dla system\u00f3w przechowywania.<\/p>\n<p><\/p>\n<p>Po prostu u\u017cywamy operatora <code>CREATE INDEX ON some_table (some_column)<\/code>, a PostgreSQL wykonuje du\u017c\u0105 cz\u0119\u015b\u0107 pracy, aby utrzyma\u0107 indeks aktualny, podczas gdy my ci\u0105gle wstawiamy, aktualizujemy i usuwamy warto\u015bci. Wszystko dzia\u0142a samo z siebie, jak za pomoc\u0105 magii.<\/p>\n<p><\/p>\n<p>Jednak indeksy PostgreSQL maj\u0105 jeden problem \u2014 s\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/checking-for-postgresql-bloat\">przerostowe<\/a><\/noindex> i zajmuj\u0105 dodatkowe miejsce na dysku, a wydajno\u015b\u0107 pobierania i aktualizacji danych jest obni\u017cona. Przez 'przerost' rozumiem nieefektywne zarz\u0105dzanie struktur\u0105 indeksu. Mo\u017ce to by\u0107 \u2014 a mo\u017ce i nie by\u0107 \u2014 zwi\u0105zane z usuni\u0119tymi krotkami, kt\u00f3re obs\u0142uguje <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/sql-vacuum.html\">VACUUM<\/a><\/noindex> (dzi\u0119ki za informacj\u0119 dla Petera Geoghegana (<noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/petervgeoghegan\">Peter Geoghegan<\/a><\/noindex>)). Przerost indeksu jest szczeg\u00f3lnie widoczny w obci\u0105\u017ceniach roboczych, gdzie indeks jest aktywnie zmieniany.<\/p>\n<p><\/p>\n<p>PostgreSQL 12 powa\u017cnie poprawia dzia\u0142anie indeks\u00f3w B-drzew i eksperymenty z testami typu TPC-C wykaza\u0142y, \u017ce wykorzystanie miejsca jest \u015brednio o 40% mniejsze. Teraz sp\u0119dzamy mniej czasu nie tylko na konserwacji indeks\u00f3w B-drzew (czyli operacjach zapisu), ale r\u00f3wnie\u017c na pobieraniu danych, poniewa\u017c indeksy sta\u0142y si\u0119 znacznie mniejsze.<\/p>\n<p><\/p>\n<p>Aplikacje aktywnie aktualizuj\u0105ce swoje tabele \u2014 zazwyczaj s\u0105 to aplikacje OLTP (<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Online_transaction_processing\">przetwarzanie transakcji w czasie rzeczywistym<\/a><\/noindex>) \u2014 b\u0119d\u0105 znacznie efektywniej wykorzystywa\u0107 dysk i przetwarza\u0107 zapytania. Im wi\u0119cej miejsca na dysku, tym wi\u0119cej przestrzeni ma baza danych na rozw\u00f3j bez aktualizacji infrastruktury.<\/p>\n<p><\/p>\n<p>Niekt\u00f3re strategie aktualizacji wymagaj\u0105 przebudowy indeks\u00f3w drzewa B, aby skorzysta\u0107 z tych zalet (na przyk\u0142ad, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/pgupgrade.html\">pg_upgrade<\/a><\/noindex> nie dokonuje automatycznej przebudowy indeks\u00f3w). W poprzednich wersjach PostgreSQL przebudowa du\u017cych indeks\u00f3w w tabelach prowadzi\u0142a do znacznych przestoj\u00f3w, poniewa\u017c w tym czasie nie mo\u017cna by\u0142o wprowadza\u0107 zmian. Jednak w PostgreSQL 12 jest jeszcze jedna niesamowita funkcja: teraz mo\u017cna przebudowa\u0107 indeksy r\u00f3wnolegle za pomoc\u0105 komendy <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/12\/sql-reindex.html\">REINDEX CONCURRENTLY<\/a><\/noindex>, aby ca\u0142kowicie unikn\u0105\u0107 przestoj\u00f3w.<\/p>\n<p><\/p>\n<p>W PostgreSQL 12 s\u0105 tak\u017ce inne ulepszenia infrastruktury indeksowania. Jeszcze jedna rzecz, w kt\u00f3rej nie zabrak\u0142o magii, to <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/wal-intro.html\">dziennik zapisu wst\u0119pnego<\/a><\/noindex>, znany jako WAL (write-ahead log). Dziennik zapisu wst\u0119pnego zapisuje ka\u017cd\u0105 transakcj\u0119 w PostgreSQL na wypadek awarii i replikacji. Aplikacje wykorzystuj\u0105 go do archiwizacji i <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/pgbackrest-point-in-time-recovery-using-crunchy-postgresql-operator\">przywracania do okre\u015blonego momentu<\/a><\/noindex>. Oczywi\u015bcie, dziennik zapisu wst\u0119pnego jest zapisywany na dysku, co mo\u017ce wp\u0142yn\u0105\u0107 na wydajno\u015b\u0107.<\/p>\n<p><\/p>\n<p>W PostgreSQL 12 zredukowano koszty zapis\u00f3w WAL generowanych przez indeksy GiST, GIN i SP-GiST podczas tworzenia indeksu. Przynosi to kilka zauwa\u017calnych korzy\u015bci: zapisy WAL zajmuj\u0105 mniej miejsca na dysku, a dane szybciej si\u0119 odtwarzaj\u0105, na przyk\u0142ad podczas przywracania po awarii lub przywracania do okre\u015blonego momentu. Je\u015bli w swoich aplikacjach korzystasz z takich indeks\u00f3w (na przyk\u0142ad aplikacje geoprzetwarzaj\u0105ce oparte na PostGIS cz\u0119sto u\u017cywaj\u0105 indeksu GiST), to dodatkowa funkcja, kt\u00f3ra znacznie poprawi dzia\u0142anie bez \u017cadnego wysi\u0142ku z Twojej strony.<\/p>\n<p><\/p>\n<h3 id=\"sekcionirovanie--bolshe-luchshe-bystree\">Partycjonowanie \u2014 wi\u0119cej, lepiej, szybciej<\/h3>\n<p><\/p>\n<p>W PostgreSQL 10 wprowadzono <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/ddl-partitioning.html\">deklaratywne partycjonowanie<\/a><\/noindex>. W PostgreSQL 11 jego u\u017cycie sta\u0142o si\u0119 znacznie \u0142atwiejsze. W PostgreSQL 12 mo\u017cna zmienia\u0107 skal\u0119 sekcji.<\/p>\n<p><\/p>\n<p>W PostgreSQL 12 wydajno\u015b\u0107 systemu partycjonowania znacz\u0105co si\u0119 poprawi\u0142a, szczeg\u00f3lnie gdy w tabeli znajduje si\u0119 tysi\u0105ce partycji. Na przyk\u0142ad, je\u015bli zapytanie dotyczy tylko kilku partycji w tabeli, gdzie jest ich tysi\u0105ce, jego wykonanie b\u0119dzie znacznie szybsze. Wydajno\u015b\u0107 zosta\u0142a poprawiona nie tylko dla tego typu zapyta\u0144. Ponadto zauwa\u017cysz, jak przyspieszy\u0142y operacje INSERT w tabelach z wieloma partycjami.<\/p>\n<p><\/p>\n<p>Wprowadzanie danych za pomoc\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/sql-copy.html\">COPY<\/a><\/noindex> \u2014 nawiasem m\u00f3wi\u0105c, to doskona\u0142y spos\u00f3b <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/fast-csv-and-json-ingestion-in-postgresql-with-copy\">na masowe wczytywanie danych<\/a><\/noindex> a oto przyk\u0142ad <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/fast-csv-and-json-ingestion-in-postgresql-with-copy\">przyj\u0119cia JSON<\/a><\/noindex> \u2014 w tabelach partycjonowanych w PostgreSQL 12 r\u00f3wnie\u017c sta\u0142o si\u0119 bardziej efektywne. Z COPY wszystko by\u0142o ju\u017c szybkie, a w PostgreSQL 12 dzia\u0142a jak szalony.<\/p>\n<p><\/p>\n<p>Dzi\u0119ki tym zaletom w PostgreSQL mo\u017cna przechowywa\u0107 jeszcze wi\u0119ksze zbiory danych, a ich wydobywanie sta\u0142o si\u0119 \u0142atwiejsze. I nie wymaga to \u017cadnego wysi\u0142ku z twojej strony. Je\u015bli twoja aplikacja ma wiele partycji, na przyk\u0142ad zapisuje dane szereg\u00f3w czasowych, prosty upgrade znacznie poprawi jej wydajno\u015b\u0107.<\/p>\n<p><\/p>\n<p>Cho\u0107 to poprawienie nie jest typowym 'ulepszeniem', w PostgreSQL 12 mo\u017cna tworzy\u0107 klucze obce, kt\u00f3re odwo\u0142uj\u0105 si\u0119 do tabel partycjonowanych, co sprawia, \u017ce praca z partycjonowaniem staje si\u0119 przyjemno\u015bci\u0105.<\/p>\n<p><\/p>\n<h3 id=\"zaprosy-with-stali-gorazdo-luchshe\">Zapytania WITH sta\u0142y si\u0119 znacznie lepsze.<\/h3>\n<p><\/p>\n<p>Kiedy <noindex><a rel=\"nofollow\" href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=608b167f9f9c4553c35bb1ec0eab9ddae643989b\">zastosowano poprawk\u0119 dla wbudowanych og\u00f3lnych wyra\u017ce\u0144 tabelarycznych<\/a><\/noindex> (zwanych r\u00f3wnie\u017c CTE, czyli zapytaniami WITH), nie mog\u0142em si\u0119 doczeka\u0107, aby napisa\u0107 artyku\u0142 na temat <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/with-queries-present-future-common-table-expressions\">jak aplikacje z PostgreSQL ucieszy\u0142y si\u0119 z tego.<\/a><\/noindex>To jedna z tych funkcji, kt\u00f3re przyspiesz\u0105 aplikacj\u0119. Oczywi\u015bcie, je\u015bli u\u017cywasz CTE.<\/p>\n<p><\/p>\n<p>Cz\u0119sto zauwa\u017cam, \u017ce nowicjusze w SQL lubi\u0105 korzysta\u0107 z CTE: je\u015bli napiszesz je w okre\u015blony spos\u00f3b, odczuwa si\u0119, \u017ce piszesz program imperatywny. Osobi\u015bcie lubi\u0142em przepisywa\u0107 te zapytania, aby obej\u015b\u0107 si\u0119 <em>bez<\/em> CTE i zwi\u0119kszy\u0107 wydajno\u015b\u0107. Teraz wszystko jest inaczej.<\/p>\n<p><\/p>\n<p>PostgreSQL 12 pozwala na wbudowanie okre\u015blonego rodzaju CTE bez efekt\u00f3w ubocznych (<code>SELECT<\/code>), kt\u00f3ry jest u\u017cywany tylko raz bli\u017cej ko\u0144ca zapytania. Gdybym prowadzi\u0142 statystyki zapyta\u0144 z CTE, kt\u00f3re przerabia\u0142em, wi\u0119kszo\u015b\u0107 z nich znalaz\u0142aby si\u0119 w tej kategorii. Pomaga to programistom pisa\u0107 zrozumia\u0142y kod, kt\u00f3ry teraz dzia\u0142a szybko.<\/p>\n<p><\/p>\n<p>Co wi\u0119cej, PostgreSQL 12 optymalizuje wykonywanie SQL samodzielnie, nie musisz nic robi\u0107. I chocia\u017c prawdopodobnie nie b\u0119d\u0119 musia\u0142 ju\u017c optymalizowa\u0107 takich zapyta\u0144, mi\u0142o, \u017ce PostgreSQL kontynuuje prac\u0119 nad optymalizacj\u0105 zapyta\u0144.<\/p>\n<p><\/p>\n<h3 id=\"just-in-time-jit--teper-po-umolchaniyu\">Just-in-Time (JIT) \u2014 teraz domy\u015blnie<\/h3>\n<p><\/p>\n<p>W systemach PostgreSQL 12 z obs\u0142ug\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/llvm.org\/\">LLVM<\/a><\/noindex> Kompilacja JIT jest w\u0142\u0105czona domy\u015blnie. Po pierwsze, zyskujesz wsparcie <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/jit.html\">JIT<\/a><\/noindex> dla niekt\u00f3rych wewn\u0119trznych operacji, a po drugie, zapytania z wyra\u017ceniami (najprostszy przyk\u0142ad \u2014 x + y) w listach wyboru (kt\u00f3re masz po SELECT), agregatach, wyra\u017ceniach w klauzulach WHERE i innych mog\u0105 korzysta\u0107 z JIT w celu zwi\u0119kszenia wydajno\u015bci.<\/p>\n<p><\/p>\n<p>Kiedy JIT jest domy\u015blnie w\u0142\u0105czony w PostgreSQL 12, wydajno\u015b\u0107 poprawi si\u0119 sama, ale zalecam przetestowanie aplikacji w PostgreSQL 11, gdzie JIT dopiero si\u0119 pojawi\u0142, aby zmierzy\u0107 wydajno\u015b\u0107 zapyta\u0144 i dowiedzie\u0107 si\u0119, czy potrzebne s\u0105 jakiekolwiek ustawienia.<\/p>\n<p><\/p>\n<h3 id=\"a-kak-zhe-ostalnye-novye-fichi-postgresql-12\">A co z pozosta\u0142ymi nowymi funkcjami PostgreSQL 12?<\/h3>\n<p><\/p>\n<p>W PostgreSQL 12 jest mn\u00f3stwo nowych, ciekawych funkcji \u2014 od mo\u017cliwo\u015bci pracy z danymi JSON za pomoc\u0105 standardowych wyra\u017ce\u0144 SQL\/JSON, po wielosk\u0142adnikow\u0105 autoryzacj\u0119 z parametrem <code>clientcert=verify-full<\/code>, kolumny wirtualne i wiele wi\u0119cej. To materia\u0142 na osobny wpis.<\/p>\n<p><\/p>\n<p>Podobnie jak PostgreSQL 10, PostgreSQL 12 poprawi og\u00f3ln\u0105 wydajno\u015b\u0107 zaraz po aktualizacji. Oczywi\u015bcie mo\u017cesz mie\u0107 swoj\u0105 metod\u0119 \u2014 przetestuj aplikacj\u0119 w podobnych warunkach w \u015brodowisku produkcyjnym przed w\u0142\u0105czeniem ulepsze\u0144, tak jak ja zrobi\u0142em z PostgreSQL 10. Nawet je\u015bli PostgreSQL 12 jest ju\u017c teraz stabilniejszy, ni\u017c si\u0119 spodziewa\u0142em, nie zapomnij starannie przetestowa\u0107 aplikacji, zanim wprowadzisz je do produkcji.<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/466727\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>PostgreSQL 12, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u00ab\u043b\u0443\u0447\u0448\u0435\u0439 \u0432 \u043c\u0438\u0440\u0435 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c\u00bb, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443-\u0442\u0440\u043e\u0439\u043a\u0443 \u043d\u0435\u0434\u0435\u043b\u044c (\u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u043e \u043f\u043b\u0430\u043d\u0443). \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u2014 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u0443\u0439\u043c\u043e\u0439 \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437 \u0432 \u0433\u043e\u0434, \u0438, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438 \u0441\u0442\u0430\u043b \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0447\u043b\u0435\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 PostgreSQL. \u041f\u043e-\u043c\u043e\u0435\u043c\u0443, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28500,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37975","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u043f\u0433\u0440\u0435\u0439\u0434 \u0434\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0445: \u043a\u0430\u043a PostgreSQL 12 \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:20:56+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:56+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Ulepszenie dla leniwych: jak PostgreSQL 12 zwi\u0119ksza wydajno\u015b\u0107 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u043f\u0433\u0440\u0435\u0439\u0434 \u0434\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0445: \u043a\u0430\u043a PostgreSQL 12 \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:20:56+00:00","article:modified_time":"2019-10-31T19:20:56+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37975","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:59:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:17:22","updated":"2026-01-23 19:59:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=37975"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37975\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/28500"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=37975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=37975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=37975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}