{"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\/sq\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika","title":{"rendered":"Sh\u00ebndeti i indekseve n\u00eb PostgreSQL nga k\u00ebndv\u00ebshtrimi i nj\u00eb zhvilluesi Java","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>P\u00ebrsh\u00ebndetje.<\/p>\n<p><\/p>\n<p>M\u00eb quajn\u00eb Vania dhe un\u00eb jam nj\u00eb zhvillues Java. Rast\u00ebsisht, punoj shum\u00eb me PostgreSQL \u2013 merrem me konfigurimin e BDs, optimizimin e struktur\u00ebs, performanc\u00ebs dhe pak edhe me DBA n\u00eb fundjav\u00eb.<\/p>\n<p><\/p>\n<p>Koh\u00ebt e fundit kam rregulluar disa baza t\u00eb dh\u00ebnash n\u00eb sh\u00ebrbimet tona mikro dhe kam shkruar nj\u00eb bibliotek\u00eb java <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\">pg-index-health<\/a><\/noindex>, e cila leht\u00ebson k\u00ebt\u00eb pun\u00eb, kursen koh\u00ebn time dhe ndihmon t\u00eb shmang disa gabime tipike q\u00eb zhvilluesit b\u00ebjn\u00eb. Pik\u00ebrisht p\u00ebr k\u00ebt\u00eb bibliotek\u00eb do t\u00eb flasim sot.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sh\u00ebndeti i indekseve n\u00eb PostgreSQL nga k\u00ebndv\u00ebshtrimi i nj\u00eb zhvilluesi Java\" src=\"\/wp-content\/uploads\/2020\/03\/e00bd48edf601f398bd7748754d48b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"disclaimer\">Kufizimi<\/h3>\n<p><\/p>\n<p>Versioni kryesor i PostgreSQL q\u00eb po p\u00ebrdor \u00ebsht\u00eb 10. T\u00eb gjitha SQL pyetjet q\u00eb p\u00ebrdor jan\u00eb gjithashtu verifikuar n\u00eb versionin 11. Versioni minimal i mb\u00ebshtetur \u00ebsht\u00eb 9.6.<\/p>\n<p><\/p>\n<h3 id=\"predystoriya\">Historia e m\u00ebparshme<\/h3>\n<p><\/p>\n<p>T\u00eb gjitha filloi gati nj\u00eb vit m\u00eb par\u00eb me nj\u00eb situat\u00eb t\u00eb \u00e7uditshme p\u00ebr mua: krijimi konkurrues i indekseve nga asgj\u00eb p\u00ebrfundoi me nj\u00eb gabim. Indeksi vet\u00eb, si zakonisht, mbeti n\u00eb nj\u00eb gjendje jo valide n\u00eb baz\u00eb t\u00eb t\u00eb dh\u00ebnave. Analiza e logeve tregoi munges\u00ebn e <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/runtime-config-resource\">temp_file_limit<\/a><\/noindex>. Dhe filluan problemet... Duke shkuar m\u00eb thell\u00eb, zbulova nj\u00eb mori problemesh n\u00eb konfigurimin e BDs dhe, duke rrokur duar\u00ebt, fillova t'i rregulloj me entuziaz\u00ebm.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"problema-pervaya--defoltnaya-konfiguraciya\">Problemi i par\u00eb \u2013 konfigurimi i paracaktuar<\/h3>\n<p><\/p>\n<p>Nj\u00eb metafor\u00eb p\u00ebr Postgres, q\u00eb mund t\u00eb funksionoj\u00eb n\u00eb nj\u00eb kafematik\u00eb, tashm\u00eb ka filluar t\u00eb bezdis\u00eb shum\u00eb, por\u2026 konfigurimi i paracaktuar t\u00eb v\u00ebrtet\u00eb ngre disa pyetje. T\u00eb pakt\u00ebn, duhet t\u00eb kushtojm\u00eb v\u00ebmendje p\u00ebr <strong>maintenance_work_mem<\/strong>, <strong>temp_file_limit<\/strong>, <strong>statement_timeout<\/strong> dhe <strong>lock_timeout<\/strong>.<\/p>\n<p><\/p>\n<p>N\u00eb rastin ton\u00eb <strong>maintenance_work_mem<\/strong> ishte si parazgjedhje 64 MByte, por <strong>temp_file_limit<\/strong> n\u00eb fakt, rreth 2 GByte \u2013 na mungonin memorie e mjaftueshme p\u00ebr krijimin e indekseve n\u00eb nj\u00eb tabel\u00eb t\u00eb madhe.<\/p>\n<p><\/p>\n<p>Prandaj, n\u00eb <strong>pg-index-health<\/strong> kam mbledhur disa <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\">parametra kryesor\u00eb<\/a><\/noindex>, sipas mendimit tim, q\u00eb duhet t\u00eb konfigurohen p\u00ebr secil\u00ebn BD.<\/p>\n<p><\/p>\n<h3 id=\"problema-vtoraya--dubliruyuschiesya-indeksy\">Problemi i dyt\u00eb \u2013 indekse t\u00eb dyfishta<\/h3>\n<p><\/p>\n<p>Baza e t\u00eb dh\u00ebnave tona jetojn\u00eb n\u00eb disqe SSD, dhe ne p\u00ebrdorim <em>HA<\/em>-konfigurimin me disa qendra t\u00eb dh\u00ebnash, host-master dhe <em>n<\/em>-numri i replikave. Hapsira n\u00eb disk \u2013 nj\u00eb burim shum\u00eb i \u00e7muar p\u00ebr ne; ai \u00ebsht\u00eb po aq i r\u00ebnd\u00ebsish\u00ebm sa performanca dhe p\u00ebrdorimi i CPU. Prandaj, nga nj\u00ebra an\u00eb na duhen indekse p\u00ebr lexime t\u00eb shpejta, nd\u00ebrsa nga ana tjet\u00ebr, nuk duam t\u00eb shohim indekse t\u00eb pa nevojshme n\u00eb BD, pasi ato han\u00eb hapsir\u00eb dhe ngadal\u00ebsojn\u00eb p\u00ebrdit\u00ebsimin e t\u00eb dh\u00ebnave.<\/p>\n<p><\/p>\n<p>Dhe k\u00ebshtu, pasi rikuperuam t\u00eb gjitha <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/invalid_indexes.sql\">indekset jo valide<\/a><\/noindex> dhe shiqova <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=aaecM4wKdhY\">prezantimet e Oleg Bartunov<\/a><\/noindex>, un\u00eb vendosa t\u00eb b\u00ebj nj\u00eb \"pastrim t\u00eb madh\". Doli se zhvilluesit nuk ua p\u00eblqejn\u00eb t\u00eb lexojn\u00eb dokumentacionin e DB. Aspak. P\u00ebr k\u00ebt\u00eb arsye, lindin dy gabime tipike \u2013 nj\u00eb indeks i krijuar manualisht mbi \u00e7el\u00ebsin primar dhe nj\u00eb indeks i ngjash\u00ebm \"me dor\u00eb\" mbi nj\u00eb kolon\u00eb unike. Problemi \u00ebsht\u00eb se k\u00ebta nuk jan\u00eb t\u00eb nevojsh\u00ebm \u2013 Postgres e b\u00ebn vet\u00eb. T\u00eb till\u00eb indekse mund t\u00eb fshihen pa asnj\u00eb shqet\u00ebsim dhe p\u00ebr k\u00ebt\u00eb ka nj\u00eb diagnostikim <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/duplicated_indexes.sql\">indekse_t\u00eb_duplikuara<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-tretya--peresekayuschiesya-indeksy\">Problemi i tret\u00eb \u2013 indekse q\u00eb nd\u00ebrthuren<\/h3>\n<p><\/p>\n<p>Shumica e zhvilluesve fillestar\u00eb krijojn\u00eb indekse mbi nj\u00eb kolon\u00eb. Me kalimin e koh\u00ebs, pasi e shijojn\u00eb k\u00ebt\u00eb proces, njer\u00ebzit fillojn\u00eb t\u00eb optimizojn\u00eb k\u00ebrkesat e tyre dhe shtojn\u00eb indekse m\u00eb t\u00eb nd\u00ebrlikuara q\u00eb p\u00ebrfshijn\u00eb disa kolona. K\u00ebshtu lindin indekset mbi kolonat <em>A<\/em>, <em>A+B<\/em>, <em>A+B+C<\/em> etj. Dy t\u00eb par\u00ebt e k\u00ebtyre indekseve mund t\u00eb fshihen pa asnj\u00eb shqet\u00ebsim, sepse jan\u00eb prefikse t\u00eb t\u00eb tretit. Kjo gjithashtu kursen shum\u00eb hap\u00ebsir\u00eb n\u00eb disk dhe p\u00ebr k\u00ebt\u00eb ka nj\u00eb diagnostikim <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/intersected_indexes.sql\">indekse_t\u00eb_nd\u00ebrthurura<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-chetvertaya--vneshnie-klyuchi-bez-indeksov\">Problemi i kat\u00ebrt \u2013 \u00e7el\u00ebsa t\u00eb jasht\u00ebm pa indekse<\/h3>\n<p><\/p>\n<p>Postgres lejon krijimin e kufizimeve t\u00eb \u00e7el\u00ebsit t\u00eb jasht\u00ebm pa specifikuar nj\u00eb indeks mb\u00ebshtet\u00ebs. N\u00eb shum\u00eb situata, kjo nuk \u00ebsht\u00eb nj\u00eb problem, dhe madje nuk mund t\u00eb shfaqet... Deri n\u00eb nj\u00eb moment...<\/p>\n<p><\/p>\n<p>K\u00ebshtu ndodhi edhe me ne: thjesht n\u00eb nj\u00eb moment, nj\u00eb pun\u00eb q\u00eb ekzekutohej sipas nj\u00eb programi dhe pastronte baz\u00ebn nga porosit\u00eb testuese, filloi t\u00eb \"shkonte\" n\u00eb master host-in. CPU dhe IO u rrit\u00ebn n\u00eb maksimum, k\u00ebrkesat u ngadal\u00ebsuan dhe u nd\u00ebrpren\u00eb p\u00ebr shkak t\u00eb skadimit t\u00eb koh\u00ebs, sh\u00ebrbimi u uzurpua. Nj\u00eb analiz\u00eb e shpejt\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/monitoring-stats\">pg_stat_activity<\/a><\/noindex> tregoi se k\u00ebrkesat e typit:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">fshij nga &lt;table&gt; ku ku &euml;sht&euml; n&euml; (&hellip;)<\/code><\/pre>\n<p><\/p>\n<p>N\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, indeksi mbi id n\u00eb tabel\u00ebn e synuar, natyrisht, ishte aty, dhe rekordet fshiheshin sipas kushteve fare pak. Dukej se gjith\u00e7ka duhet t\u00eb funksiononte, por, p\u00ebr fat t\u00eb keq, nuk funksiononte.<\/p>\n<p><\/p>\n<p>M\u00eb ndihmoi e mrekullueshme <strong>shpjego analiz\u00eb<\/strong> dhe tregoi se p\u00ebrve\u00e7 fshirjes s\u00eb rekord\u00ebve n\u00eb tabel\u00ebn e synuar, gjithashtu zhvillohet nj\u00eb kontroll mbi integritetin referencial, dhe n\u00eb nj\u00eb nga tabelat e lidhura ky kontroll d\u00ebshtonte n\u00eb <em>skanimin sekondar<\/em> p\u00ebr shkak t\u00eb munges\u00ebs s\u00eb nj\u00eb indeksi t\u00eb p\u00ebrshtatsh\u00ebm. K\u00ebshtu lindi diagnostikimi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/foreign_keys_without_index.sql\">\u00e7el\u00ebsa_t\u00eb_jasht\u00ebm_pa_indekse<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-pyataya--null-value-v-indeksah\">Problemi i pest\u00eb \u2013 vlera null n\u00eb indekse<\/h3>\n<p><\/p>\n<p>Sipas parazgjedhjes, Postgres p\u00ebrfshin vlerat null n\u00eb indekset btree, por ato zakonisht nuk jan\u00eb t\u00eb nevojshme. Prandaj, un\u00eb mundohesha me zjarr t'i heq k\u00ebto null (diagnostikimi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/indexes_with_null_values.sql\">indekse_me_vlera_null<\/a><\/noindex>), duke krijuar indekse t\u00eb pjesshme mbi kolonat nullable si <code>ku <A> nuk \u00ebsht\u00eb null<\/code>. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, m\u00eb \u00ebsht\u00eb arritur t\u00eb reduktoj madh\u00ebsin\u00eb e nj\u00ebrit prej indekseve tan\u00eb nga 1877 MB n\u00eb 16 KB. N\u00eb nj\u00eb nga sh\u00ebrbimet, madh\u00ebsia totale e DB u ul me 16% (me 4.3 GB n\u00eb numra absolut\u00eb) p\u00ebr shkak t\u00eb p\u00ebrjashtimit t\u00eb vlerave null nga indext. Nj\u00eb kursim kolosal i hap\u00ebsir\u00ebs s\u00eb diskut p\u00ebrmes disa modifikimeve relativisht t\u00eb thjeshta. \ud83d\ude42 <\/p>\n<p><\/p>\n<h3 id=\"problema-shestaya--otsutstvie-pervichnyh-klyuchey\">Problemi i gjasht\u00eb \u2013 mungesa e \u00e7el\u00ebsave primar\u00eb<\/h3>\n<p><\/p>\n<p>P\u00ebr shkak t\u00eb ve\u00e7orive t\u00eb mekanizmit <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/442804\/\">MVCC n\u00eb Postgres<\/a><\/noindex> mund t\u00eb ndodh\u00eb nj\u00eb situat\u00eb si <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/169939\/\">bloat<\/a><\/noindex>, kur madh\u00ebsia e tabel\u00ebs tuaj rritet shpejt p\u00ebr shkak t\u00eb nj\u00eb numri t\u00eb madh t\u00eb regjistrimeve t\u00eb vdekura. Un\u00eb naivisht mendoja se kjo nuk do t\u00eb na ndodhte, sepse ne ishim, oh wow!!!, zhvillues t\u00eb normalizuar\u2026 Sa budalla dhe naiv isha\u2026<\/p>\n<p><\/p>\n<p>Nj\u00eb dit\u00eb t\u00eb bukur, nj\u00eb migrim i mrekulluesh\u00ebm azhurnoi t\u00eb gjitha regjistrimet n\u00eb nj\u00eb tabel\u00eb t\u00eb madhe dhe aktivisht t\u00eb p\u00ebrdorur. Ne mor\u00ebm +100 GB n\u00eb madh\u00ebsin\u00eb e tabel\u00ebs pa ndonj\u00eb arsye. Ishte jasht\u00ebzakonisht e m\u00ebrzitshme, por ndodhit\u00eb tona nuk p\u00ebrfunduan k\u00ebtu. Pas 15 or\u00ebsh p\u00ebrfundoi avakuumi automatik n\u00eb k\u00ebt\u00eb tabel\u00eb dhe u b\u00eb e qart\u00eb se vendi fizik nuk do t\u00eb rikthehej. Nuk mund\u00ebm ta ndalonim sh\u00ebrbimin dhe t\u00eb b\u00ebnim VACUUM FULL, prandaj u mor vendimi p\u00ebr t\u00eb p\u00ebrdorur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/reorg\/pg_repack\">pg_repack<\/a><\/noindex>. Dhe k\u00ebtu rezultoi se <em>pg_repack<\/em> nuk arrin t\u00eb p\u00ebrpunoj\u00eb tabelat pa \u00e7el\u00ebs primar ose ndonj\u00eb kufizim unik, dhe n\u00eb tabel\u00ebn ton\u00eb nuk kishte nj\u00eb \u00e7el\u00ebs primar. K\u00ebshtu lindi 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>N\u00eb versionin e bibliotek\u00ebs <strong>0.1.5<\/strong> u shtua mund\u00ebsia p\u00ebr t\u00eb mbledhur t\u00eb dh\u00ebna mbi bloat-in e tabelave dhe indekseve dhe p\u00ebr t\u00eb reaguar n\u00eb koh\u00eb ndaj tij.<\/p>\n<p><\/p>\n<h3 id=\"problemy-sem-i-vosem--nehvatka-indeksov-i-neispolzuemye-indeksy\">Problemet shtat\u00eb dhe tet\u00eb \u2013 mungesa e indekseve dhe indekse t\u00eb pab\u00ebr\u00eb<\/h3>\n<p><\/p>\n<p>Dy diagnostika t\u00eb ardhshme \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> dhe <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 n\u00eb form\u00ebn e tyre p\u00ebrfundimtare u shfaq\u00ebn relativisht s\u00eb fundmi. \u00c7\u00ebshtja \u00ebsht\u00eb se ato nuk mund t\u00eb shtohen leht\u00eb.<\/p>\n<p><\/p>\n<p>Si\u00e7 kam th\u00ebn\u00eb m\u00eb par\u00eb, ne p\u00ebrdorim nj\u00eb konfigurim me disa replika, dhe ngarkesa lexuese n\u00eb hoste t\u00eb ndryshme \u00ebsht\u00eb esencialisht e ndryshme. Si rezultat, krijohet nj\u00eb situat\u00eb n\u00eb t\u00eb cil\u00ebn disa tabela dhe indekse n\u00eb disa hoste praktikisht nuk p\u00ebrdoren, dhe p\u00ebr analiz\u00eb \u00ebsht\u00eb e nevojshme t\u00eb mblidhen statistika nga t\u00eb gjith\u00eb hostet n\u00eb kluster. <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\">Rikthimi i statistikave<\/a><\/noindex> nuk \u00ebsht\u00eb gjithashtu i nevojsh\u00ebm n\u00eb \u00e7do host n\u00eb kluster, nuk mund t\u00eb b\u00ebhet vet\u00ebm n\u00eb master.<\/p>\n<p><\/p>\n<p>Kjo qasje na lejoi t\u00eb kursejm\u00eb disa dhjet\u00ebra gigabajt duke hequr indeks\u00eb q\u00eb kurr\u00eb nuk jan\u00eb p\u00ebrdorur, si dhe t\u00eb shtojm\u00eb indekse t\u00eb munguar n\u00eb tabela me p\u00ebrdorim t\u00eb rrall\u00eb.<\/p>\n<p><\/p>\n<h3 id=\"v-kachestve-zaklyucheniya\">N\u00eb p\u00ebrfundim<\/h3>\n<p><\/p>\n<p>Sigurisht, p\u00ebr shumic\u00ebn e diagnostikimeve \u00ebsht\u00eb e mundur t\u00eb konfigurohet <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\">lista e p\u00ebrjashtimeve<\/a><\/noindex>. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, mund t\u00eb implementoni shpejt kontrollin n\u00eb aplikacionin tuaj, duke parandaluar shfaqjen e gabimeve t\u00eb reja dhe m\u00eb pas duke korrigjuar gradualisht ato t\u00eb vjetra.<\/p>\n<p><\/p>\n<p>Disa diagnostikime mund t\u00eb kryhen tashm\u00eb n\u00eb testet funksionale menj\u00ebher\u00eb pas aplikimit t\u00eb migrimeve t\u00eb DB. Dhe kjo, ndoshta, \u00ebsht\u00eb nj\u00eb nga mund\u00ebsit\u00eb m\u00eb t\u00eb fuqishme t\u00eb bibliotek\u00ebs sime. Nj\u00eb shembull p\u00ebrdorimi mund t\u00eb shihet n\u00eb <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>Kontrollet p\u00ebr indeks\u00eb t\u00eb pap\u00ebrdorur ose t\u00eb munguar, si dhe p\u00ebr bloat, ka kuptim t\u00eb kryhen vet\u00ebm n\u00eb nj\u00eb DB real. Vlerat e grumbulluara mund t\u00eb regjistrohen n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClickHouse\/ClickHouse\">ClickHouse<\/a><\/noindex> ose t\u00eb d\u00ebrgohen n\u00eb sistemin e monitorimit.<\/p>\n<p><\/p>\n<p>Shpresoj shum\u00eb q\u00eb <strong>pg-index-health<\/strong> do t\u00eb jet\u00eb e dobishme dhe e k\u00ebrkuar. Ju gjithashtu mund t\u00eb kontribuoni n\u00eb zhvillimin e bibliotek\u00ebs duke raportuar p\u00ebr problemet e zbuluara dhe duke propozuar diagnostika t\u00eb reja.<\/p>\n<p>Burimi: <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.2 - 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\/sq\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47Sh\u00ebndeti i indekseve n\u00eb PostgreSQL nga perspektiva e nj\u00eb zhvilluesi Java | ProHoster","description":"P\u00ebrsh\u00ebndetje. Emri im \u00ebsht\u00eb Vanja, dhe un\u00eb jam zhvillues Java.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/72875","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=72875"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/72875\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/72876"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=72875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=72875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=72875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}