{"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 syt\u00eb e 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 Vanja, dhe jam zhvillues Java. M\u00eb ka ndodhur t\u00eb punoj shum\u00eb me PostgreSQL \u2013 merrem me konfigurimin e databaz\u00ebs, optimizimin e struktur\u00ebs, performanc\u00ebs dhe pak luaj si DBA gjat\u00eb fundjav\u00ebs.<\/p>\n<p><\/p>\n<p>Kohet e fundit kam organizuar disa baza t\u00eb dh\u00ebnash n\u00eb sh\u00ebrbimet tona mikrosherbimesh dhe kam shkruar nj\u00eb lib\u00ebr java <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\">pg-index-health<\/a><\/noindex>, i cili e leht\u00ebson k\u00ebt\u00eb pun\u00eb, kursen koh\u00ebn time dhe ndihmon n\u00eb shmangien e disa gabimeve tipike nga zhvilluesit. Pik\u00ebrisht p\u00ebr k\u00ebt\u00eb lib\u00ebr do t\u00eb flasim sot.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sh\u00ebndeti i indekseve n\u00eb PostgreSQL nga syt\u00eb e 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\">Sh\u00ebnim ligjor<\/h3>\n<p><\/p>\n<p>Versioni kryesor i PostgreSQL me t\u00eb cilin punoj \u00ebsht\u00eb 10-\u00eb. T\u00eb gjitha k\u00ebrkesat SQL q\u00eb p\u00ebrdor gjithashtu jan\u00eb testuar n\u00eb versionin 11. Versioni minimal i mb\u00ebshtetur \u00ebsht\u00eb 9.6.<\/p>\n<p><\/p>\n<h3 id=\"predystoriya\">Pas historia<\/h3>\n<p><\/p>\n<p>E gjitha filloi gati nj\u00eb vit m\u00eb par\u00eb me nj\u00eb situat\u00eb t\u00eb \u00e7uditshme p\u00ebr mua: krijimi kompetitiv i nj\u00eb indeksi n\u00eb vend t\u00eb papritur p\u00ebrfundoi me nj\u00eb gabim. Indeksi vet\u00eb, si\u00e7 ndodh zakonisht, mbeti n\u00eb nj\u00eb gjendje t\u00eb pavlefshme n\u00eb databaz\u00eb. Analiza e log\u00ebve tregoi munges\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/runtime-config-resource\">temp_file_limit<\/a><\/noindex>. Dhe pastaj filloi\u2026 Pasi hinqa thell\u00eb, zbulova nj\u00eb mori problemesh n\u00eb konfigurimin e databaz\u00ebs dhe, duke rrotulluar m\u00ebng\u00ebt, fillova t'i rregulloj me kujdes.<\/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 default<\/h3>\n<p><\/p>\n<p>Ndoshta metafora p\u00ebr Postgres, q\u00eb mund t\u00eb startohet n\u00eb nj\u00eb kafetier, \u00ebsht\u00eb mjaft e lodhshme p\u00ebr t\u00eb gjith\u00eb, por... konfigurimi p\u00ebr default v\u00ebrtet e ngre nj\u00eb s\u00ebr\u00eb pyetjesh. S\u00eb paku, \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb theksohet <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 p\u00ebr standard 64 MB, kurse <strong>temp_file_limit<\/strong> rreth 2 GB \u2013 na mungonte thjesht memoria p\u00ebr t\u00eb krijuar nj\u00eb indeks 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 nj\u00eb s\u00ebr\u00eb <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\">parameteresh<\/a><\/noindex>, sipas mendimit tim, q\u00eb duhet t\u00eb konfigurohen p\u00ebr \u00e7do DB.<\/p>\n<p><\/p>\n<h3 id=\"problema-vtoraya--dubliruyuschiesya-indeksy\">Problemi i dyt\u00eb \u2013 indekset e p\u00ebrs\u00ebritura<\/h3>\n<p><\/p>\n<p>Baza jon\u00eb jeton n\u00eb disqe SSD, dhe ne p\u00ebrdorim <em>HA<\/em>-konfigurimin me disa qendra t\u00eb t\u00eb dh\u00ebnave, nj\u00eb host master dhe <em>n<\/em>-n\u00eb num\u00ebr t\u00eb replikave. Hap\u00ebsira n\u00eb disk \u00ebsht\u00eb nj\u00eb burim shum\u00eb i \u00e7muar p\u00ebr ne; ajo \u00ebsht\u00eb po aq e r\u00ebnd\u00ebsishme sa performanca dhe konsumimi i CPU. Prandaj, nga nj\u00ebra an\u00eb, na duhen indekse p\u00ebr lexim t\u00eb shpejt\u00eb, nd\u00ebrsa nga ana tjet\u00ebr, ne nuk duam t\u00eb shohim indekse t\u00eb tep\u00ebrta n\u00eb DB, pasi ato konsumojn\u00eb hap\u00ebsir\u00eb dhe ngadal\u00ebsojn\u00eb p\u00ebrdit\u00ebsimin e t\u00eb dh\u00ebnave.<\/p>\n<p><\/p>\n<p>Dhe k\u00ebshtu, pasi fshim\u00eb 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 e pavlefshme<\/a><\/noindex> dhe duke par\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=aaecM4wKdhY\">raportet e Oleg Bartunov<\/a><\/noindex>, un\u00eb vendosa t\u00eb b\u00ebj nj\u00eb \"pastrim t\u00eb madh\". Doli se zhvilluesit nuk e p\u00eblqejn\u00eb t\u00eb lexojn\u00eb dokumentacionin e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. Shum\u00eb nuk e p\u00eblqejn\u00eb. Si rezultat, lindin dy gabime tipike \u2013 nj\u00eb indeks i krijuar manualisht mbi \u00e7el\u00ebsin primar dhe nj\u00eb indeks i ngjash\u00ebm \"manual\" mbi nj\u00eb kolon\u00eb unike. Problemi \u00ebsht\u00eb se nuk jan\u00eb t\u00eb nevojshme \u2013 Postgres do t'i b\u00ebj\u00eb vet\u00eb. T\u00eb tilla indekse mund t\u00eb hiqen me besim, 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\">duplicated_indexes<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-tretya--peresekayuschiesya-indeksy\">Problemi i tret\u00eb \u2013 indekset e mbivendosura<\/h3>\n<p><\/p>\n<p>Shumica e zhvilluesve t\u00eb rinj krijojn\u00eb indekse mbi nj\u00eb kolon\u00eb. Me kalimin e koh\u00ebs, pasi e provojn\u00eb k\u00ebt\u00eb gj\u00eb, fillojn\u00eb t\u00eb optimizojn\u00eb k\u00ebrkesat e tyre dhe t\u00eb shtojn\u00eb indekse m\u00eb t\u00eb nd\u00ebrlikuara q\u00eb p\u00ebrfshijn\u00eb disa kolona. K\u00ebshtu fillojn\u00eb t\u00eb shfaqen indekset mbi kolonat <em>A<\/em>, <em>A+B<\/em>, <em>A+B+C<\/em> etj. T\u00eb parat dy nga k\u00ebto indekse mund t\u00eb hidhen pa pasoja, pasi jan\u00eb prefikse t\u00eb t\u00eb tretit. Kjo gjithashtu kursen ndjesh\u00ebm hap\u00ebsir\u00ebn 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\">intersected_indexes<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-chetvertaya--vneshnie-klyuchi-bez-indeksov\">Problemi i kat\u00ebrt \u2013 \u00e7el\u00ebsat e jasht\u00ebm pa indekse<\/h3>\n<p><\/p>\n<p>Postgres lejon t\u00eb krijoj\u00eb kufizime t\u00eb \u00e7el\u00ebsit t\u00eb jasht\u00ebm pa sh\u00ebnimin e indeksit mb\u00ebshtet\u00ebs. N\u00eb shum\u00eb situata, kjo nuk \u00ebsht\u00eb nj\u00eb problem dhe madje mund t\u00eb mos shfaqet fare\u2026 Deri n\u00eb nj\u00eb moment\u2026<\/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 orarit dhe pastronte baz\u00ebn nga porosit\u00eb testuese, filloi t\u00eb na \u201engrej\u00eb\u201c master hostin. CPU dhe IO shkonin n\u00eb plafon, k\u00ebrkesat ndalonin dhe prisnin p\u00ebr fund. 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> tregon se ishin t\u00eb bllokuara k\u00ebrkesat e llojit:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">fshi nga &lt;table&gt; ku ku id n&euml; (&hellip;)<\/code><\/pre>\n<p><\/p>\n<p>K\u00ebtu, ndoshta, indeksi i id n\u00eb tabel\u00ebn p\u00ebrkat\u00ebse ishte aty, dhe t\u00eb dh\u00ebnat fshiheshin n\u00eb kushtet q\u00eb ishin shum\u00eb t\u00eb pakta. Dukej se gjith\u00e7ka duhej t\u00eb funksiononte, por, fatkeq\u00ebsisht, nuk funksiononte.<\/p>\n<p><\/p>\n<p>N\u00eb ndihm\u00eb erdhi nj\u00eb mrekulli <strong>explain analyze<\/strong> dhe tregoi se, p\u00ebrve\u00e7 fshirjes s\u00eb t\u00eb dh\u00ebnave n\u00eb tabel\u00ebn p\u00ebrkat\u00ebse, po b\u00ebhet edhe nj\u00eb kontroll i integritetit referencial, dhe n\u00eb nj\u00eb nga tabelat e lidhura, ky kontroll kalon 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 filloi diagnoza <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\">Problemi i pest\u00eb \u2013 vlera null n\u00eb indekse<\/h3>\n<p><\/p>\n<p>S\u00eb norma, Postgres p\u00ebrfshin vlerat null n\u00eb indeksat btree, por ato zakonisht nuk kan\u00eb nevoj\u00eb atje. Prandaj un\u00eb punoj shum\u00eb p\u00ebr t'i hequr k\u00ebto null\u00eb (diagnostik\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/indexes_with_null_values.sql\">indeksat_me_vlera_null<\/a><\/noindex>), duke krijuar indekse t\u00eb pjesshme mbi kolonat e nullable, t\u00eb tipit <code>ku &lt;A&gt; nuk \u00ebsht\u00eb null<\/code>. K\u00ebshtu kam arritur t\u00eb zvog\u00ebloj p\u00ebrmasat e nj\u00eb prej indekseve tona nga 1877 Mbyte n\u00eb 16 Kbyte. N\u00eb nj\u00eb nga sh\u00ebrbimet tona, p\u00ebrmasa totale e DB-s\u00eb u ul me 16% (me 4.3 Gbyte n\u00eb numra absolut\u00eb) p\u00ebr shkak t\u00eb p\u00ebrjashtimit t\u00eb vlerave null nga indeksat. Nj\u00eb kursim colossal hap\u00ebsire diskus, me disa p\u00ebrmir\u00ebsime t\u00eb thjeshta. \ud83d\ude42 <\/p>\n<p><\/p>\n<h3 id=\"problema-shestaya--otsutstvie-pervichnyh-klyuchey\">Problemi i gjasht\u00eb \u2013 mungesa e \u00e7elqeve 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 p\u00ebrmasat e tabel\u00ebs tuaj rriten shpejt p\u00ebr shkak t\u00eb numrit t\u00eb madh t\u00eb regjistrimeve t\u00eb vdekura. E mendova naiv se kjo nuk do t\u00eb na ndodhte dhe se baza jon\u00eb nuk do e kishte k\u00ebt\u00eb fat, sepse ne, oh wow!!!, jemi zhvillues normal\u00eb\u2026 Sa naiv dhe budalla 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 rekordet n\u00eb nj\u00eb tabel\u00eb t\u00eb madhe dhe t\u00eb p\u00ebrdorur n\u00eb m\u00ebnyr\u00eb aktive. Ne mor\u00ebm +100 GB shtes\u00eb n\u00eb madh\u00ebsin\u00eb e tabel\u00ebs nga asgj\u00eb. Ishte mjaft e pad\u00ebshirueshme, por aventurat tona nuk p\u00ebrfunduan k\u00ebtu. Pas 15 or\u00ebsh q\u00eb avakuumi automatik p\u00ebr k\u00ebt\u00eb tabel\u00eb u p\u00ebrfundua, u kuptua se vendi fizik nuk do t\u00eb kthehej. Nuk mund\u00ebm t\u00eb ndalonim sh\u00ebrbimin dhe t\u00eb b\u00ebnim nj\u00eb 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 doli se <em>pg_repack<\/em> nuk di t\u00eb p\u00ebrpunoj\u00eb tabelat pa \u00e7el\u00ebs primar ose ndonj\u00eb kufizim unikal, nd\u00ebrsa p\u00ebr tabel\u00ebn ton\u00eb nuk kishte \u00e7el\u00ebs primar. Kjo e solli diagnostikimin <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'u p\u00ebrgjigjur n\u00eb m\u00ebnyr\u00eb t\u00eb duhur.<\/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 indekset e pap\u00ebrdorura<\/h3>\n<p><\/p>\n<p>Dy diagnostikat e 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 koh\u00ebt e fundit. Problemi \u00ebsht\u00eb se ato nuk mund t\u00eb shtoheshin leht\u00ebsisht.<\/p>\n<p><\/p>\n<p>Si e thash\u00eb m\u00eb par\u00eb, ne p\u00ebrdorim nj\u00eb konfigurim me disa replika, dhe ngarkesa e lexim p\u00ebr hoste t\u00eb ndrysh\u00ebm \u00ebsht\u00eb principialisht e ndryshme. Si rezultat, arrihet nj\u00eb situat\u00eb ku disa tabela dhe indekse n\u00eb disa hoste praktikisht nuk p\u00ebrdoren, dhe p\u00ebr analiz\u00eb \u00ebsht\u00eb e nevojshme t\u00eb mblidhet 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\">Rivendos statistikat<\/a><\/noindex> po ashtu duhet t\u00eb b\u00ebhet n\u00eb \u00e7do host n\u00eb kluster, nuk mund t\u00eb b\u00ebhet vet\u00ebm n\u00eb master.<\/p>\n<p><\/p>\n<p>Ky qasje na lehoi t\u00eb kursejm\u00eb disa dhjet\u00ebra gigabajt duke fshir\u00eb indekse q\u00eb kurr\u00eb nuk ishin p\u00ebrdorur, si dhe t\u00eb shtojm\u00eb indekse t\u00eb munguar p\u00ebr tabela q\u00eb p\u00ebrdoren rrall\u00eb.<\/p>\n<p><\/p>\n<h3 id=\"v-kachestve-zaklyucheniya\">Si p\u00ebrfundim<\/h3>\n<p><\/p>\n<p>Sigurisht, p\u00ebr praktisht t\u00eb gjitha diagnostikimet mund 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>. K\u00ebshtu mund t\u00eb implementoni shpejt kontrolle n\u00eb aplikacionin tuaj, duke parandaluar shfaqjen e gabimeve t\u00eb reja, dhe m\u00eb pas gradualisht t\u00eb korrigjoni ato t\u00eb vjetra.<\/p>\n<p><\/p>\n<p>Disa diagnostika mund t\u00eb ekzekutohen 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 funksionalitetet m\u00eb t\u00eb fuqishme t\u00eb bibliotek\u00ebs sime. Nj\u00eb shembull p\u00ebrdorimi mund t\u00eb shikohet 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>Kontrollat p\u00ebr indekse t\u00eb pap\u00ebrdorura ose t\u00eb munges\u00ebs, si dhe p\u00ebr bloat, ka kuptim t\u00eb kryhen vet\u00ebm n\u00eb nj\u00eb DB reale. Vlerat e mbledhura mund t\u00eb shkruhen n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClickHouse\/ClickHouse\">ClickHouse<\/a><\/noindex> ose d\u00ebrgohen n\u00eb sistemin e monitorimit.<\/p>\n<p><\/p>\n<p>Shpresoj shum\u00eb se <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 \u00e7\u00ebshtjet e zbuluara dhe duke sugjeruar 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.0.1 - 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.0.1\" \/>\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 syt\u00eb e nj\u00eb zhvilluesi Java | ProHoster","description":"P\u00ebrsh\u00ebndetje. M\u00eb quajn\u00eb Vania, 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}]}}