{"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\/cs\/blog\/administrirovanie\/apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost","title":{"rendered":"Upgrade pro lenochy: jak PostgreSQL 12 zvy\u0161uje v\u00fdkon","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Upgrade pro lenochy: jak PostgreSQL 12 zvy\u0161uje v\u00fdkon\" 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>, posledn\u00ed verze \u201enejlep\u0161\u00ed na sv\u011bt\u011b rela\u010dn\u00ed datab\u00e1ze s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem\u201c vyjde za p\u00e1r t\u00fddn\u016f (pokud v\u0161e p\u016fjde podle pl\u00e1nu). To odpov\u00edd\u00e1 b\u011b\u017en\u00e9mu harmonogramu \u2014 nov\u00e1 verze s \u0159adou nov\u00fdch funkc\u00ed vych\u00e1z\u00ed ka\u017edoro\u010dn\u011b a, up\u0159\u00edmn\u011b \u0159e\u010deno, to je p\u016fsobiv\u00e9. Proto jsem se stal aktivn\u00edm \u010dlenem komunity PostgreSQL.<\/p>\n<p><\/p>\n<p>Podle m\u011b se PostgreSQL 12 od p\u0159edchoz\u00edch vyd\u00e1n\u00ed li\u0161\u00ed t\u00edm, \u017ee neobsahuje jednu nebo dv\u011b revolu\u010dn\u00ed funkce (jako nap\u0159\u00edklad partitioning nebo paralelismus dotaz\u016f). Jednou jsem si srandu, \u017ee hlavn\u00ed vtip PostgreSQL 12 spo\u010d\u00edv\u00e1 ve v\u011bt\u0161\u00ed stabilit\u011b. A nen\u00ed to pr\u00e1v\u011b to, co pot\u0159ebujete p\u0159i spr\u00e1v\u011b kritick\u00fdch dat va\u0161eho podnik\u00e1n\u00ed?<\/p>\n<p><\/p>\n<p>Ale PostgreSQL 12 se t\u00edmto zdaleka neomezuje: s nov\u00fdmi mo\u017enostmi a vylep\u0161en\u00edmi budou aplikace fungovat l\u00e9pe, <em>a od v\u00e1s se vy\u017eaduje jen prov\u00e9st upgrade!<\/em><\/p>\n<p><\/p>\n<p>(No, mo\u017en\u00e1 je\u0161t\u011b p\u0159estav\u011bt indexy, ale v t\u00e9to verzi to nen\u00ed tak hrozn\u00e9, jak jsme zvykl\u00ed.)<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>To bude skv\u011bl\u00e9 \u2014 upgradovat PostgreSQL a rovnou si u\u017e\u00edvat v\u00fdrazn\u00e1 zlep\u0161en\u00ed bez zbyte\u010dn\u00fdch pohyb\u016f. P\u0159ed n\u011bkolika lety jsem analyzoval aktualizaci z PostgreSQL 9.4 na PostgreSQL 10 a vid\u011bl, jak se aplikace zrychlila d\u00edky vylep\u0161en\u00e9mu paralelismu dotaz\u016f v PostgreSQL 10. A co je nejd\u016fle\u017eit\u011bj\u0161\u00ed, od m\u011b se t\u00e9m\u011b\u0159 nic nevy\u017eadovalo (jen jsem nastavil parametr konfigurace. <code>max_parallel_workers<\/code>).<\/p>\n<p><\/p>\n<p>Souhlas\u00edte, \u017ee je pohodln\u00e9, kdy\u017e aplikace funguj\u00ed l\u00e9pe hned po upgradu. A my se opravdu sna\u017e\u00edme pot\u011b\u0161it u\u017eivatele, proto\u017ee jich s PostgreSQL p\u0159ib\u00fdv\u00e1.<\/p>\n<p><\/p>\n<p>A jak jednoduch\u00fd upgrade na PostgreSQL 12 v\u00e1s u\u010din\u00ed \u0161\u0165astn\u00fdmi? Te\u010f v\u00e1m to pov\u00edm.<\/p>\n<p><\/p>\n<h3 id=\"sereznye-uluchsheniya-indeksirovaniya\">Z\u00e1va\u017en\u00e1 vylep\u0161en\u00ed indexov\u00e1n\u00ed<\/h3>\n<p><\/p>\n<p>Bez indexov\u00e1n\u00ed se datab\u00e1ze daleko nedostane. Jak jinak rychle naj\u00edt informace? Z\u00e1kladn\u00ed syst\u00e9m indexov\u00e1n\u00ed PostgreSQL se naz\u00fdv\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/B-tree\">B-strom<\/a><\/noindex>. Tento typ indexu je optimalizov\u00e1n pro syst\u00e9my ukl\u00e1d\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p>Prost\u011b pou\u017eijeme p\u0159\u00edkaz <code>CREATE INDEX ON some_table (some_column)<\/code>, a PostgreSQL odv\u00e1d\u00ed v\u011bt\u0161inu pr\u00e1ce, aby udr\u017eovalo index aktu\u00e1ln\u00ed, zat\u00edmco my neust\u00e1le vkl\u00e1d\u00e1me, aktualizujeme a odstra\u0148ujeme hodnoty. V\u0161e funguje samo od sebe, jako kouzlem.<\/p>\n<p><\/p>\n<p>Ale indexy PostgreSQL maj\u00ed jeden probl\u00e9m \u2014 ony <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/checking-for-postgresql-bloat\">se nafukuj\u00ed<\/a><\/noindex> a zab\u00edraj\u00ed zbyte\u010dn\u00e9 m\u00edsto na disku, zat\u00edmco v\u00fdkonnost extrakce a aktualizace dat kles\u00e1. Pod pojmem \u201ezv\u011bt\u0161ov\u00e1n\u00ed\u201c m\u00e1m na mysli neefektivn\u00ed udr\u017eov\u00e1n\u00ed indexov\u00e9 struktury. To m\u016f\u017ee \u2014 ale tak\u00e9 nemus\u00ed \u2014 souviset s nepou\u017eiteln\u00fdmi \u0159\u00e1dky, kter\u00e9 se odstra\u0148uj\u00ed. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/sql-vacuum.html\">VACUUM<\/a><\/noindex> (d\u011bkujeme za informace Peteru Geogheganovi (<noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/petervgeoghegan\">Peter Geoghegan<\/a><\/noindex>)). Zv\u011bt\u0161ov\u00e1n\u00ed indexu je zvl\u00e1\u0161t\u011b patrn\u00e9 u pracovn\u00edch z\u00e1t\u011b\u017e\u00ed, kde se index aktivn\u011b m\u011bn\u00ed.<\/p>\n<p><\/p>\n<p>PostgreSQL 12 v\u00fdrazn\u011b zlep\u0161uje v\u00fdkon B-stromov\u00fdch index\u016f a experimenty s testy typu TPC-C uk\u00e1zaly, \u017ee m\u00edsto je nyn\u00ed vyu\u017e\u00edv\u00e1no v pr\u016fm\u011bru o 40 % m\u00e9n\u011b. Nyn\u00ed tr\u00e1v\u00edme m\u00e9n\u011b \u010dasu nejen \u00fadr\u017ebou B-stromov\u00fdch index\u016f (tj. p\u0159i z\u00e1pisov\u00fdch operac\u00edch), ale tak\u00e9 p\u0159i extrakci dat, proto\u017ee indexy jsou nyn\u00ed mnohem men\u0161\u00ed.<\/p>\n<p><\/p>\n<p>Aplikace, kter\u00e9 aktivn\u011b aktualizuj\u00ed sv\u00e9 tabulky \u2014 obvykle OLTP aplikace (<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Online_transaction_processing\">zpracov\u00e1n\u00ed transakc\u00ed v re\u00e1ln\u00e9m \u010dase<\/a><\/noindex>) \u2014 budou mnohem efektivn\u011bji vyu\u017e\u00edvat disk a zpracov\u00e1vat dotazy. \u010c\u00edm v\u00edce m\u00edsta na disku, t\u00edm v\u00edce m\u00e1 datab\u00e1ze prostoru pro r\u016fst bez upgradu infrastruktury.<\/p>\n<p><\/p>\n<p>N\u011bkter\u00e9 strategie upgradu vy\u017eaduj\u00ed p\u0159estavbu B-stromov\u00fdch index\u016f, aby bylo mo\u017en\u00e9 vyu\u017e\u00edt t\u011bchto v\u00fdhod (nap\u0159\u00edklad, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/pgupgrade.html\">pg_upgrade<\/a><\/noindex> nep\u0159estav\u00ed indexy automaticky). V p\u0159edchoz\u00edch verz\u00edch PostgreSQL vedla p\u0159estavba velk\u00fdch index\u016f v tabulk\u00e1ch k v\u00fdznamn\u00e9mu prostoji, proto\u017ee v t\u00e9 dob\u011b nebylo mo\u017en\u00e9 prov\u00e1d\u011bt zm\u011bny. Ale v PostgreSQL 12 je zde dal\u0161\u00ed skv\u011bl\u00e1 funkce: nyn\u00ed je mo\u017en\u00e9 p\u0159estavovat indexy paraleln\u011b pomoc\u00ed p\u0159\u00edkazu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/12\/sql-reindex.html\">REINDEX CONCURRENTLY<\/a><\/noindex>, aby se zcela vyhnulo prostoji.<\/p>\n<p><\/p>\n<p>V PostgreSQL 12 jsou tak\u00e9 dal\u0161\u00ed vylep\u0161en\u00ed infrastruktury indexov\u00e1n\u00ed. Dal\u0161\u00ed v\u011bc, kde se to neobe\u0161lo bez magie, je <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/wal-intro.html\">\u017eurnal p\u0159edb\u011b\u017en\u00e9ho z\u00e1pisu<\/a><\/noindex>, tak\u00e9 zn\u00e1m\u00fd jako WAL (write-ahead log). \u017durnal p\u0159edb\u011b\u017en\u00e9ho z\u00e1pisu zaznamen\u00e1v\u00e1 ka\u017edou transakci v PostgreSQL pro p\u0159\u00edpad selh\u00e1n\u00ed a replikace. Aplikace ho vyu\u017e\u00edvaj\u00ed pro archivaci a <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/pgbackrest-point-in-time-recovery-using-crunchy-postgresql-operator\">obnoven\u00ed do ur\u010dit\u00e9ho okam\u017eiku<\/a><\/noindex>. Samoz\u0159ejm\u011b, \u017ee \u017eurnal p\u0159edb\u011b\u017en\u00e9ho z\u00e1pisu se zapisuje na disk, co\u017e m\u016f\u017ee ovlivnit v\u00fdkon.<\/p>\n<p><\/p>\n<p>Ve PostgreSQL 12 se sn\u00ed\u017eily n\u00e1klady na z\u00e1znamy WAL, kter\u00e9 vytv\u00e1\u0159ej\u00ed indexy GiST, GIN a SP-GiST p\u0159i vytv\u00e1\u0159en\u00ed indexu. To p\u0159in\u00e1\u0161\u00ed n\u011bkolik v\u00fdznamn\u00fdch v\u00fdhod: z\u00e1znamy WAL zab\u00edraj\u00ed m\u00e9n\u011b m\u00edsta na disku a data se rychleji obnovuj\u00ed, nap\u0159\u00edklad p\u0159i obnoven\u00ed po selh\u00e1n\u00ed nebo p\u0159i n\u00e1vratu k ur\u010dit\u00e9mu bodu v \u010dase. Pokud tyto indexy pou\u017e\u00edv\u00e1te ve sv\u00fdch aplikac\u00edch (nap\u0159\u00edklad geoprostorov\u00e9 aplikace zalo\u017een\u00e9 na PostGIS \u010dasto vyu\u017e\u00edvaj\u00ed index GiST), je to dal\u0161\u00ed funkce, kter\u00e1 v\u00fdrazn\u011b zlep\u0161\u00ed v\u00fdkon s minim\u00e1ln\u00edm \u00fasil\u00edm z va\u0161\u00ed strany.<\/p>\n<p><\/p>\n<h3 id=\"sekcionirovanie--bolshe-luchshe-bystree\">Rozd\u011blen\u00ed \u2014 v\u00edce, l\u00e9pe, rychleji<\/h3>\n<p><\/p>\n<p>Ve PostgreSQL 10 se objevilo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/ddl-partitioning.html\">deklarativn\u00ed rozd\u011blen\u00ed<\/a><\/noindex>. Ve PostgreSQL 11 se v\u00fdrazn\u011b zjednodu\u0161ilo jeho pou\u017eit\u00ed. V PostgreSQL 12 lze m\u011bnit m\u011b\u0159\u00edtko sekc\u00ed.<\/p>\n<p><\/p>\n<p>Ve PostgreSQL 12 se v\u00fdkon syst\u00e9mu sekc\u00ed v\u00fdrazn\u011b zlep\u0161il, zejm\u00e9na pokud m\u00e1 tabulka tis\u00edce sekc\u00ed. Nap\u0159\u00edklad, pokud dotaz zas\u00e1hne pouze n\u011bkolik sekc\u00ed v tabulce s tis\u00edci sekcemi, bude se prov\u00e1d\u011bt mnohem rychleji. Zlep\u0161en\u00ed v\u00fdkonu se net\u00fdk\u00e1 pouze t\u011bchto typ\u016f dotaz\u016f. Tak\u00e9 si v\u0161imnete, \u017ee operace INSERT v tabulk\u00e1ch s mnoha sekcemi se zrychlily.<\/p>\n<p><\/p>\n<p>Zapisov\u00e1n\u00ed dat pomoc\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/sql-copy.html\">COPY<\/a><\/noindex> \u2014 mimochodem, je to skv\u011bl\u00fd zp\u016fsob <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/fast-csv-and-json-ingestion-in-postgresql-with-copy\">hromadn\u00e9ho nahr\u00e1v\u00e1n\u00ed dat<\/a><\/noindex> a zde je p\u0159\u00edklad <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/fast-csv-and-json-ingestion-in-postgresql-with-copy\">zpracov\u00e1n\u00ed JSON<\/a><\/noindex> \u2014 do rozd\u011blen\u00fdch tabulek ve PostgreSQL 12 se tak\u00e9 stalo efektivn\u011bj\u0161\u00ed. S COPY to bylo rychl\u00e9, ale ve PostgreSQL 12 se to doslova let\u00ed.<\/p>\n<p><\/p>\n<p>D\u00edky t\u011bmto v\u00fdhod\u00e1m lze v PostgreSQL uchov\u00e1vat soubory dat je\u0161t\u011b v\u011bt\u0161\u00ed velikosti a jejich extrakce se stala snadn\u011bj\u0161\u00ed. A bez jak\u00fdchkoli snah z va\u0161\u00ed strany. Pokud m\u00e1 aplikace mnoho sekc\u00ed, nap\u0159\u00edklad kdy\u017e zapisuje data \u010dasov\u00fdch \u0159ad, jednoduch\u00e1 aktualizace v\u00fdrazn\u011b zlep\u0161\u00ed jej\u00ed v\u00fdkon.<\/p>\n<p><\/p>\n<p>A i kdy\u017e toto zlep\u0161en\u00ed nep\u0159ipad\u00e1 p\u0159\u00edmo do kategorie \u201eupla\u0165te a radujte se\u201c, v PostgreSQL 12 lze vytv\u00e1\u0159et ciz\u00ed kl\u00ed\u010de, kter\u00e9 odkazuj\u00ed na rozd\u011blen\u00e9 tabulky, tak\u017ee pr\u00e1ce s d\u011blen\u00edm je radost\u00ed.<\/p>\n<p><\/p>\n<h3 id=\"zaprosy-with-stali-gorazdo-luchshe\">Dotazy WITH se v\u00fdrazn\u011b zlep\u0161ily<\/h3>\n<p><\/p>\n<p>Kdy\u017e <noindex><a rel=\"nofollow\" href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=608b167f9f9c4553c35bb1ec0eab9ddae643989b\">byl aplikov\u00e1n patch pro vlo\u017een\u00e9 generick\u00e9 tabulkov\u00e9 v\u00fdrazy<\/a><\/noindex> (tak\u00e9 zn\u00e1m\u00e9 jako CTE, tak\u00e9 zn\u00e1m\u00e9 jako dotazy WITH), nedok\u00e1zal jsem se do\u010dkat, a\u017e nap\u00ed\u0161u \u010dl\u00e1nek o tom, <noindex><a rel=\"nofollow\" href=\"https:\/\/info.crunchydata.com\/blog\/with-queries-present-future-common-table-expressions\">jak se v\u00fdvoj\u00e1\u0159i aplikac\u00ed s PostgreSQL radovali.<\/a><\/noindex>. To je jedna z t\u011bch funkc\u00ed, kter\u00e9 urychl\u00ed aplikaci. Pokud tedy pou\u017e\u00edv\u00e1te CTE.<\/p>\n<p><\/p>\n<p>\u010casto si v\u0161\u00edm\u00e1m, \u017ee nov\u00e1\u010dci v SQL r\u00e1di pou\u017e\u00edvaj\u00ed CTE: pokud je nap\u00ed\u0161ete ur\u010dit\u00fdm zp\u016fsobem, c\u00edt\u00edte, \u017ee p\u00ed\u0161ete imperativn\u00ed program. Osobn\u011b jsem m\u011bl r\u00e1d p\u0159episov\u00e1n\u00ed t\u011bchto dotaz\u016f, abych se obe\u0161el <em>bez<\/em> CTE a zv\u00fd\u0161il tak v\u00fdkon. Te\u010f je v\u0161echno jinak.<\/p>\n<p><\/p>\n<p>PostgreSQL 12 umo\u017e\u0148uje vkl\u00e1dat ur\u010dit\u00fd typ CTE bez vedlej\u0161\u00edch efekt\u016f (<code>nebude prov\u00e1d\u011bn p\u0159i nepravdivosti prvn\u00ed podm\u00ednky. Opravy pomoc\u00ed<\/code>), kter\u00fd se pou\u017e\u00edv\u00e1 pouze jednou, bl\u00ed\u017ee ke konci dotazu. Kdybych vedl statistiku dotaz\u016f s CTE, kter\u00e9 jsem p\u0159episoval, v\u011bt\u0161ina z nich by spadala do t\u00e9to kategorie. Pom\u00e1h\u00e1 to v\u00fdvoj\u00e1\u0159\u016fm ps\u00e1t srozumiteln\u00fd k\u00f3d, kter\u00fd nyn\u00ed tak\u00e9 rychle b\u011b\u017e\u00ed.<\/p>\n<p><\/p>\n<p>Nav\u00edc PostgreSQL 12 optimalizuje prov\u00e1d\u011bn\u00ed SQL automaticky, nemus\u00edte s t\u00edm v\u016fbec nic d\u011blat. A\u010dkoliv te\u010f pravd\u011bpodobn\u011b u\u017e nebudu muset tyto dotazy optimalizovat, je skv\u011bl\u00e9, \u017ee PostgreSQL pokra\u010duje v optimalizaci dotaz\u016f.<\/p>\n<p><\/p>\n<h3 id=\"just-in-time-jit--teper-po-umolchaniyu\">Just-in-Time (JIT) \u2014 nyn\u00ed jako v\u00fdchoz\u00ed nastaven\u00ed<\/h3>\n<p><\/p>\n<p>V syst\u00e9mech PostgreSQL 12 s podporou <noindex><a rel=\"nofollow\" href=\"https:\/\/llvm.org\/\">LLVM<\/a><\/noindex> JIT-kompilace je aktivov\u00e1na jako v\u00fdchoz\u00ed nastaven\u00ed. Za prv\u00e9, dostanete podporu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/jit.html\">JIT<\/a><\/noindex> pro n\u011bkter\u00e9 intern\u00ed operace, a za druh\u00e9, dotazy s v\u00fdrazy (nejjednodu\u0161\u0161\u00ed p\u0159\u00edklad \u2014 x + y) v seznamech v\u00fdb\u011bru (kter\u00e9 m\u00e1te po SELECT), agreg\u00e1tech, v\u00fdrazy v podm\u00ednk\u00e1ch WHERE a dal\u0161\u00ed mohou vyu\u017e\u00edt JIT pro zv\u00fd\u0161en\u00ed v\u00fdkonu.<\/p>\n<p><\/p>\n<p>Jakmile je JIT v PostgreSQL 12 jako v\u00fdchoz\u00ed nastaven\u00ed, v\u00fdkon se zlep\u0161\u00ed s\u00e1m o sob\u011b, ale doporu\u010duji otestovat aplikaci v PostgreSQL 11, kde JIT pr\u00e1v\u011b vznikl, abyste zm\u011b\u0159ili v\u00fdkon dotaz\u016f a zjistili, zda je pot\u0159eba n\u011bco nastavit.<\/p>\n<p><\/p>\n<h3 id=\"a-kak-zhe-ostalnye-novye-fichi-postgresql-12\">A co ostatn\u00ed nov\u00e9 funkce PostgreSQL 12?<\/h3>\n<p><\/p>\n<p>V PostgreSQL 12 je spousta nov\u00fdch skv\u011bl\u00fdch funkc\u00ed \u2014 od mo\u017enosti zkoumat data JSON pomoc\u00ed standardn\u00edch SQL\/JSON dotaz\u016f, a\u017e po v\u00edcefaktorovou autentizaci s parametrem <code>clientcert=verify-full<\/code>, generovan\u00fdch sloupc\u016f a mnoho dal\u0161\u00edho. To by zaslou\u017eilo samostatn\u00fd p\u0159\u00edsp\u011bvek.<\/p>\n<p><\/p>\n<p>Stejn\u011b jako PostgreSQL 10, PostgreSQL 12 zv\u00fd\u0161\u00ed celkov\u00fd v\u00fdkon ihned po upgradu. Samoz\u0159ejm\u011b m\u00e1te sv\u016fj zp\u016fsob \u2014 otestujte aplikaci za podobn\u00fdch podm\u00ednek v provozn\u00edm syst\u00e9mu, ne\u017e zapnete vylep\u0161en\u00ed, jak jsem to ud\u011blal j\u00e1 s PostgreSQL 10. I kdy\u017e je PostgreSQL 12 u\u017e nyn\u00ed stabiln\u011bj\u0161\u00ed, ne\u017e jsem p\u0159edpokl\u00e1dal, nebojte se kvalitn\u011b testovat aplikace p\u0159ed jejich uveden\u00edm do produkce.<\/p>\n<p>Zdroj: <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.3 - 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\/cs\/blog\/administrirovanie\/apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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\udd47Upgrade pro l\u00edn\u00e9: jak PostgreSQL 12 zvy\u0161uje v\u00fdkon | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/apgrejd-dlya-lenivyh-kak-postgresql-12-povyshaet-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/37975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=37975"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/37975\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/28500"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=37975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=37975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=37975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}