{"id":72875,"date":"2020-03-05T08:42:09","date_gmt":"2020-03-05T05:42:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika"},"modified":"2020-03-05T08:42:09","modified_gmt":"2020-03-05T05:42:09","slug":"zdorove-indeksov-v-postgresql-glazami-java-razrabotchika","status":"publish","type":"post","link":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika","title":{"rendered":"PostgreSQL indeksu vesel\u012bba Java izstr\u0101d\u0101t\u0101ja skat\u012bjum\u0101","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sveiki.<\/p>\n<p><\/p>\n<p>Mani sauc Vanya, un esmu Java izstr\u0101d\u0101t\u0101js. T\u0101 ir izn\u0101cis, ka es daudz str\u0101d\u0101ju ar PostgreSQL \u2013 nodarbojos ar datu b\u0101zu iestat\u012b\u0161anu, strukt\u016bras optimiz\u0113\u0161anu, veiktsp\u0113ju un nedaudz sp\u0113l\u0113ju DBA br\u012bvdien\u0101s.<\/p>\n<p><\/p>\n<p>P\u0113d\u0113j\u0101 laik\u0101 es esmu sak\u0101rtojis vair\u0101kas datu b\u0101zes m\u016bsu mikroservisos un uzrakst\u012bjis java bibliot\u0113ku <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\">pg-index-health<\/a><\/noindex>, kas atvieglo \u0161o darbu, ietaupa manu laiku un pal\u012bdz izvair\u012bties no da\u017e\u0101m tipisk\u0101m k\u013c\u016bd\u0101m, ko pie\u013cauj izstr\u0101d\u0101t\u0101ji. Par \u0161o bibliot\u0113ku \u0161odien ar\u012b b\u016bs runa.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL indeksu vesel\u012bba Java izstr\u0101d\u0101t\u0101ja skat\u012bjum\u0101\" src=\"\/wp-content\/uploads\/2020\/03\/e00bd48edf601f398bd7748754d48b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"disclaimer\">Atsauksme<\/h3>\n<p><\/p>\n<p>Galven\u0101 PostgreSQL versija, ar kur\u0101 es str\u0101d\u0101ju, ir 10. Visas SQL vaic\u0101jumi, kurus izmantoju, ir p\u0101rbaud\u012bti ar\u012b 11. versij\u0101. Minim\u0101l\u0101 atbalst\u012bt\u0101 versija ir 9.6.<\/p>\n<p><\/p>\n<h3 id=\"predystoriya\">Iepriek\u0161\u0113j\u0101 pieredze<\/h3>\n<p><\/p>\n<p>Viss s\u0101k\u0101s pirms gandr\u012bz gada ar d\u012bvainu situ\u0101ciju man: konkur\u0113jo\u0161a indeksa izveide beidz\u0101s ar k\u013c\u016bdu. Indekss, k\u0101 pierasts, palika neval\u012bdotaj\u0101 st\u0101vokl\u012b datu b\u0101z\u0113. Analiz\u0113jot \u017eurn\u0101lus, izr\u0101d\u012bj\u0101s, ka tr\u016bkst <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/runtime-config-resource\">temp_file_limit<\/a><\/noindex>. Un s\u0101k\u0101s... Iedzi\u013cinoties, es atkl\u0101ju veselu \u010dupi\u0146u probl\u0113mu datu b\u0101zes konfigur\u0101cij\u0101 un, sasliekot piedurknes, ar spo\u017eumu ac\u012bs \u0137\u0113ros pie labo\u0161anas.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"problema-pervaya--defoltnaya-konfiguraciya\">Pirm\u0101 probl\u0113ma \u2013 noklus\u0113juma konfigur\u0101cija.<\/h3>\n<p><\/p>\n<p>Dro\u0161i vien metafora par Postgres, kuru var uzs\u0101kt uz kafijas autom\u0101ta, visiem jau ir apnikusi, bet... noklus\u0113juma konfigur\u0101cija tie\u0161\u0101m rada virkni jaut\u0101jumu. Vismaz j\u0101piev\u0113r\u0161 uzman\u012bba <strong>maintenance_work_mem<\/strong>, <strong>temp_file_limit<\/strong>, <strong>statement_timeout<\/strong> un <strong>lock_timeout<\/strong>.<\/p>\n<p><\/p>\n<p>M\u016bsu gad\u012bjum\u0101 <strong>maintenance_work_mem<\/strong> bija noklus\u0113juma 64 MB, bet <strong>temp_file_limit<\/strong> apm\u0113ram 2 GB \u2013 mums vienk\u0101r\u0161i tr\u016bka atmi\u0146as, lai izveidotu indeksu liel\u0101 tabul\u0101.<\/p>\n<p><\/p>\n<p>T\u0101p\u0113c es <strong>pg-index-health<\/strong> saglab\u0101ju virkni <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/dfbc7a37fc9c5f82957eeacdacd29a713fff7f51\/src\/main\/java\/io\/github\/mfvanek\/pg\/settings\/ImportantParam.java#L14\">atsl\u0113gas<\/a><\/noindex>, manupr\u0101t, parametru, kurus v\u0113rts konfigur\u0113t katrai datu b\u0101zei.<\/p>\n<p><\/p>\n<h3 id=\"problema-vtoraya--dubliruyuschiesya-indeksy\">Otr\u0101 probl\u0113ma \u2013 dubl\u0113jo\u0161ie indeksi.<\/h3>\n<p><\/p>\n<p>M\u016bsu datu b\u0101zes dz\u012bvo uz SSD diskiem, un m\u0113s izmantojam <em>HA<\/em>-konfigur\u0101ciju ar vair\u0101kiem datu centriem, galveno resursu un <em>n<\/em>-skaitu replik\u0101ciju. Vieta disk\u0101 \u2013 \u013coti v\u0113rt\u012bgs resurss m\u016bsupr\u0101t; tas ir ne maz\u0101k svar\u012bgs par veiktsp\u0113ju un CPU pat\u0113ri\u0146u. T\u0101p\u0113c, no vienas puses, mums ir nepiecie\u0161ami indeksi \u0101trai las\u012b\u0161anai, bet no otras puses, m\u0113s nev\u0113lamies redz\u0113t datu b\u0101z\u0113 liekus indeksus, jo tie pat\u0113r\u0113 vietu un pal\u0113nina datu atjaunin\u0101\u0161anu.<\/p>\n<p><\/p>\n<p>Un nu, atjaunojot visus <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/invalid_indexes.sql\">neval\u012btiskos indeksus<\/a><\/noindex> un noskatoties <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=aaecM4wKdhY\">Olega Bartunova zi\u0146ojumus<\/a><\/noindex>, es nol\u0113mu veikt \u201clielu\u201d t\u012br\u012b\u0161anu. Izr\u0101d\u012bj\u0101s, ka izstr\u0101d\u0101t\u0101ji nepat\u012bk las\u012bt datu b\u0101zes dokument\u0101ciju. Vi\u0146i patie\u0161\u0101m nepat\u012bk. T\u0101p\u0113c rodas divas tipiskas k\u013c\u016bdas \u2013 manu\u0101li izveidots indekss uz prim\u0101ro atsl\u0113gu un l\u012bdz\u012bgs \u201crok\u0101m\u201d izveidots indekss uz unik\u0101lo kolonnu. Probl\u0113ma t\u0101da, ka tie nav nepiecie\u0161ami \u2013 Postgres visu izdar\u012bs pats. \u0160\u0101dus indeksus var dro\u0161i dz\u0113st, un t\u0101p\u0113c ir par\u0101d\u012bjusies diagnostika <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/duplicated_indexes.sql\">duplicated_indexes<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-tretya--peresekayuschiesya-indeksy\">Tre\u0161\u0101 probl\u0113ma \u2013 p\u0101rkl\u0101jo\u0161i indeksi<\/h3>\n<p><\/p>\n<p>Liel\u0101k\u0101 da\u013ca ies\u0101c\u0113ju izstr\u0101d\u0101t\u0101ju izveido indeksus uz vienu kolonnu. Pak\u0101peniski, iepaz\u012bstoties ar \u0161o procesu, cilv\u0113ki s\u0101k optimiz\u0113t savus vaic\u0101jumus un pievienot sare\u017e\u0123\u012bt\u0101kus indeksus, kas ietver vair\u0101kas kolonnas. T\u0101 tiek izveidoti indeksi uz kolonn\u0101m <em>A<\/em>, <em>A+B<\/em>, <em>A+B+C<\/em> utt. Pirmajos divos no \u0161iem indeksiem var dro\u0161i izmest, jo tie ir tre\u0161\u0101 prefiksi. Tas ar\u012b iev\u0113rojami ietaupa vietu disk\u0101, un tam ir diagnostika <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/intersected_indexes.sql\">intersected_indexes<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-chetvertaya--vneshnie-klyuchi-bez-indeksov\">Ceturt\u0101 probl\u0113ma \u2013 \u0101r\u0113j\u0101s atsl\u0113gas bez indeksiem<\/h3>\n<p><\/p>\n<p>Postgres \u013cauj izveidot \u0101r\u0113jo atsl\u0113gu ierobe\u017eojumus bez atbalsta indeksa nor\u0101d\u012b\u0161anas. Daudz\u0101s situ\u0101cij\u0101s tas nav probl\u0113ma un pat neizpau\u017eas\u2026 L\u012bdz k\u0101dam br\u012bdim\u2026<\/p>\n<p><\/p>\n<p>T\u0101 bija ar\u012b pie mums: vienk\u0101r\u0161i k\u0101d\u0101 br\u012bd\u012b ned\u0113\u013cas darbs, kas tika veikts p\u0113c grafika un att\u012br\u012bja datu b\u0101zi no test\u0113\u0161anas pas\u016bt\u012bjumiem, s\u0101ka \u201cuzkr\u0101t\u201d mums m\u0101jas hostu. CPU un IO uzl\u0113ca debes\u012bs, vaic\u0101jumi pal\u0113nin\u0101j\u0101s un tika p\u0101rtraukta laika ierobe\u017eojuma d\u0113\u013c, pakalpojums sniedza pieci simti. \u0100tra anal\u012bze <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/monitoring-stats\">pg_stat_activity<\/a><\/noindex> par\u0101d\u012bja, ka iestr\u0113gusi vaic\u0101jumi veid\u0101:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">dz\u0113st no &lt;table&gt; kur id ir (&hellip;)<\/code><\/pre>\n<p><\/p>\n<p>K\u0101 jau bija gaid\u012bts, indekss p\u0113c id m\u0113r\u0137a tabul\u0101, protams, bija, un ieraksti tika izdz\u0113sti p\u0113c nosac\u012bjuma pavisam maz. Izskat\u012bj\u0101s, ka viss j\u0101str\u0101d\u0101, bet, diem\u017e\u0113l, nestr\u0101d\u0101ja.<\/p>\n<p><\/p>\n<p>Pal\u012bdzi n\u0101ca br\u012bni\u0161\u0137\u012bg\u0101 <strong>explain analyze<\/strong> un past\u0101st\u012bja, ka papildus ierakstu dz\u0113\u0161anai m\u0113r\u0137a tabul\u0101 notiek ar\u012b atsauces integrit\u0101tes p\u0101rbaude, un k\u0101d\u0101 no saist\u012btaj\u0101m tabul\u0101m \u0161\u012b p\u0101rbaude p\u0101rv\u0113r\u0161as par <em>sequential scan<\/em> sakar\u0101 ar piem\u0113rot\u0101 indeksa tr\u016bkumu. T\u0101 rad\u0101s diagnostika <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/foreign_keys_without_index.sql\">foreign_keys_without_index<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-pyataya--null-value-v-indeksah\">Piec\u0101 probl\u0113ma \u2013 null v\u0113rt\u012bba indeksos<\/h3>\n<p><\/p>\n<p>P\u0113c noklus\u0113juma Postgres iek\u013cauj null v\u0113rt\u012bbas btree-indeksos, bet parasti t\u0101s tur nav nepiecie\u0161amas. T\u0101p\u0113c es cent\u012bgi cen\u0161os \u0161os null izn\u012bcin\u0101t (diagnostika <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/indexes_with_null_values.sql\">indexes_with_null_values<\/a><\/noindex>), izveidojot da\u013c\u0113jos indeksus uz nullable-kolon\u0101m, piem\u0113ram <code>where <A> is not null<\/code>. \u0160\u0101d\u0101 veid\u0101 man izdev\u0101s samazin\u0101t viena no m\u016bsu indeksiem lielumu no 1877 MB l\u012bdz 16 KB. Turkl\u0101t vien\u0101 no pakalpojumiem datu b\u0101zes lielums kopum\u0101 samazin\u0101j\u0101s par 16% (par 4.3 GB absol\u016btaj\u0101s skait\u013cos) izsl\u0113dzot null v\u0113rt\u012bbas no indeksiem. Kolos\u0101la diska vietas ekonomija, veicot diezgan vienk\u0101r\u0161as izmai\u0146as. \ud83d\ude42 <\/p>\n<p><\/p>\n<h3 id=\"problema-shestaya--otsutstvie-pervichnyh-klyuchey\">Sest\u0101 probl\u0113ma \u2013 prim\u0101ro atsl\u0113gu tr\u016bkums<\/h3>\n<p><\/p>\n<p>Nepiecie\u0161am\u012bbu <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/442804\/\">MVCC Postgres\u2019\u0101<\/a><\/noindex> var rasties t\u0101da situ\u0101cija k\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/169939\/\">bloat<\/a><\/noindex>, kad j\u016bsu tabulas lielums strauji pieaug liela skaita miru\u0161o ierakstu d\u0113\u013c. Es naivi uzskat\u012bju, ka tas m\u016bs neskars, un ka ar m\u016bsu datu b\u0101zi t\u0101 nenotiks, jo m\u0113s, ak vai!!!, esam norm\u0101li izstr\u0101d\u0101t\u0101ji\u2026 Cik mu\u013c\u0137\u012bgi un naivi es biju\u2026<\/p>\n<p><\/p>\n<p>Vien\u0101 jauk\u0101 dien\u0101 viena br\u012bni\u0161\u0137\u012bga migr\u0101cija pa\u0146\u0113ma un atjaunoja visus ierakstus liel\u0101 un akt\u012bvi izmantot\u0101 tabul\u0101. M\u0113s ieguv\u0101m +100 GB tabulas lielumam no nekurienes. Tas bija \u0101rk\u0101rt\u012bgi nom\u0101co\u0161i, bet m\u016bsu likte\u0146i uz to nebeidz\u0101s. P\u0113c tam, kad p\u0113c 15 stund\u0101m autom\u0101tisk\u0101 vakuuma process \u0161aj\u0101 tabul\u0101 beidz\u0101s, k\u013cuva skaidrs, ka fizisk\u0101 vieta neatgriez\u012bsies. Aptur\u0113t pakalpojumu un veikt VACUUM FULL m\u0113s nevar\u0113j\u0101m, t\u0101p\u0113c tika pie\u0146emts l\u0113mums izmantot <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/reorg\/pg_repack\">pg_repack<\/a><\/noindex>. Un te izr\u0101d\u012bj\u0101s, ka <em>pg_repack<\/em> nezina, k\u0101 apstr\u0101d\u0101t tabulas bez prim\u0101r\u0101s atsl\u0113gas vai citas unikalit\u0101tes ierobe\u017eojuma, un m\u016bsu tabul\u0101 nebija prim\u0101r\u0101s atsl\u0113gas. T\u0101 rad\u0101s diagnostika <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/tables_without_primary_key.sql\">tables_without_primary_key<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Bibliot\u0113kas versij\u0101 <strong>0.1.5<\/strong> tika iek\u013cauta iesp\u0113ja v\u0101kt datus par tabulu un indeksu bloat un savlaic\u012bgi rea\u0123\u0113t uz to.<\/p>\n<p><\/p>\n<h3 id=\"problemy-sem-i-vosem--nehvatka-indeksov-i-neispolzuemye-indeksy\">Sept\u012bt\u0101 un astot\u0101 probl\u0113ma \u2013 indeksu tr\u016bkums un neizmantotie indeksi<\/h3>\n<p><\/p>\n<p>Divas n\u0101kam\u0101s diagnostikas \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/tables_with_missing_indexes.sql\">tables_with_missing_indexes<\/a><\/noindex> un <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/unused_indexes.sql\">unused_indexes<\/a><\/noindex> \u2013 sav\u0101 gal\u012bgaj\u0101 form\u0101 rad\u0101s sal\u012bdzino\u0161i nesen. Lieta t\u0101da, ka t\u0101s nevar\u0113ja vienk\u0101r\u0161i t\u0101 \u0146emt un pievienot.<\/p>\n<p><\/p>\n<p>K\u0101 jau rakst\u012bju, m\u0113s izmantojam konfigur\u0101ciju ar vair\u0101kiem replik\u0101tiem, un las\u012b\u0161anas slodze da\u017e\u0101dos hostos ir principi\u0101li at\u0161\u0137ir\u012bga. Rezult\u0101t\u0101 rodas situ\u0101cija, ka da\u017eas tabulas un indeksi da\u017eos hostos praktiski nav izmantoti, un anal\u012bzei ir nepiecie\u0161ams v\u0101kt statistiku no visiem hostiem klaster\u012b. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/dfbc7a37fc9c5f82957eeacdacd29a713fff7f51\/src\/main\/java\/io\/github\/mfvanek\/pg\/index\/health\/IndexesHealth.java#L165\">Statistiku<\/a><\/noindex> ar\u012b ir j\u0101samaks\u0101 katr\u0101 host\u0101 klaster\u012b, nevar to izdar\u012bt tikai uz meistaru.<\/p>\n<p><\/p>\n<p>\u0160\u0101ds pieg\u0101jiens \u013c\u0101va mums ietaup\u012bt vair\u0101kus desmitus gigabaitu, no\u0146emot indeksus, kas nekad netika izmantoti, k\u0101 ar\u012b pievienojot nepietiekamos indeksus ret\u0101k izmantotaj\u0101m tabul\u0101m.<\/p>\n<p><\/p>\n<h3 id=\"v-kachestve-zaklyucheniya\">Nosl\u0113gum\u0101<\/h3>\n<p><\/p>\n<p>Protams, praktiski vis\u0101m diagnostik\u0101m var iestat\u012bt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/dfbc7a37fc9c5f82957eeacdacd29a713fff7f51\/src\/main\/java\/io\/github\/mfvanek\/pg\/index\/health\/logger\/Exclusions.java#L26\">iz\u0146\u0113mumu sarakstu<\/a><\/noindex>. T\u0101d\u0101 veid\u0101 var \u0101tri ieviest p\u0101rbaudes j\u016bsu lietojumprogramm\u0101, nov\u0113r\u0161ot jaunu k\u013c\u016bdu par\u0101d\u012b\u0161anos, un p\u0113c tam pak\u0101peniski labot vec\u0101s.<\/p>\n<p><\/p>\n<p>Da\u013ca diagnostiku var tikt veikta jau funkcion\u0101lajos testos t\u016bl\u012bt p\u0113c datu b\u0101zes migr\u0101ciju uzlik\u0161anas. Un, iesp\u0113jams, t\u0101 ir viena no sp\u0113c\u012bg\u0101kaj\u0101m manas bibliot\u0113kas iesp\u0113j\u0101m. Piem\u0113ru var apskat\u012bt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health-demo\/blob\/master\/src\/test\/java\/io\/github\/mfvanek\/pg\/index\/health\/demo\/IndexesMaintenanceTest.java\">demo<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>P\u0101rbaudes par neizmantotiem vai tr\u016bksto\u0161iem indeksiem, k\u0101 ar\u012b par bloat, ir j\u0113gpilns veikt tikai uz re\u0101las datu b\u0101zes. Sav\u0101kt\u0101s v\u0113rt\u012bbas var ierakst\u012bt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClickHouse\/ClickHouse\">ClickHouse<\/a><\/noindex> vai nos\u016bt\u012bt uz monitoringa sist\u0113mu.<\/p>\n<p><\/p>\n<p>Es \u013coti ceru, ka <strong>pg-index-health<\/strong> b\u016bs noder\u012bga un piepras\u012bta. J\u016bs ar\u012b varat veicin\u0101t bibliot\u0113kas att\u012bst\u012bbu, zi\u0146ojot par atkl\u0101taj\u0101m probl\u0113m\u0101m un pied\u0101v\u0101jot jaunas diagnostikas.<\/p>\n<p>Avots: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/490824\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0430\u043d\u044f, \u0438 \u044f Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044f \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 PostgreSQL \u2013 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0411\u0414, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0433\u0440\u0430\u044e \u0432 DBA \u043f\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u043c. \u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u043f\u0440\u0438\u0432\u0451\u043b \u0432 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0430\u0448\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b java-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 pg-index-health, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443, \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043c\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":72876,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-72875","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0430\u043d\u044f, \u0438 \u044f Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.\" \/>\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\/lv\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 PostgreSQL \u0433\u043b\u0430\u0437\u0430\u043c\u0438 Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0430\u043d\u044f, \u0438 \u044f Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika\" \/>\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=\"2020-03-05T05:42:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-05T05:42:09+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\udd47Indeksu vesel\u012bba PostgreSQL caur Java izstr\u0101d\u0101t\u0101ja ac\u012bm | ProHoster","description":"Sveiki. Mani sauc Ivans, un es esmu Java izstr\u0101d\u0101t\u0101js.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 PostgreSQL \u0433\u043b\u0430\u0437\u0430\u043c\u0438 Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0430\u043d\u044f, \u0438 \u044f Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.","og:url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika","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":"2020-03-05T05:42:09+00:00","article:modified_time":"2020-03-05T05:42:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"72875","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:43:29","updated":"2022-09-27 23:10:08","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/72875","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=72875"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/72875\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/72876"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=72875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=72875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=72875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}