{"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\/hu\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika","title":{"rendered":"A PostgreSQL indexek eg\u00e9szs\u00e9ge Java fejleszt\u0151 szemsz\u00f6g\u00e9b\u0151l","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hell\u00f3.<\/p>\n<p><\/p>\n<p>A nevem Vanya, \u00e9s Java fejleszt\u0151 vagyok. \u00dagy alakult, hogy sokat dolgozom PostgreSQL-lel \u2013 adatb\u00e1zisok be\u00e1ll\u00edt\u00e1s\u00e1val, strukt\u00far\u00e1k optimaliz\u00e1l\u00e1s\u00e1val, teljes\u00edtm\u00e9nnyel foglalkozom, \u00e9s kicsit h\u00e9tv\u00e9genk\u00e9nt DBA-k\u00e9nt is j\u00e1tszom.<\/p>\n<p><\/p>\n<p>Az ut\u00f3bbi id\u0151szakban rendbe raktam n\u00e9h\u00e1ny adatb\u00e1zist a mikroszolg\u00e1ltat\u00e1sainkban, \u00e9s \u00edrtam egy Java k\u00f6nyvt\u00e1rat <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\">pg-index-health<\/a><\/noindex>, amely megk\u00f6nny\u00edti ezt a munk\u00e1t, id\u0151t takar\u00edt meg, \u00e9s seg\u00edt elker\u00fclni a fejleszt\u0151k \u00e1ltal elk\u00f6vetett tipikus hib\u00e1kat. Ma err\u0151l a k\u00f6nyvt\u00e1rr\u00f3l fog sz\u00f3lni a besz\u00e9lget\u00e9s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A PostgreSQL indexek eg\u00e9szs\u00e9ge Java fejleszt\u0151 szemsz\u00f6g\u00e9b\u0151l\" src=\"\/wp-content\/uploads\/2020\/03\/e00bd48edf601f398bd7748754d48b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"disclaimer\">Megjegyz\u00e9s<\/h3>\n<p><\/p>\n<p>A f\u0151 verzi\u00f3, amellyel dolgozom, a PostgreSQL 10. Az \u00f6sszes SQL lek\u00e9rdez\u00e9semet a 11-es verzi\u00f3val is teszteltem. A minim\u00e1lisan t\u00e1mogatott verzi\u00f3 a 9.6.<\/p>\n<p><\/p>\n<h3 id=\"predystoriya\">H\u00e1tt\u00e9r<\/h3>\n<p><\/p>\n<p>Mindez majdnem egy \u00e9ve kezd\u0151d\u00f6tt egy sz\u00e1momra furcsa helyzettel: az er\u0151forr\u00e1s-ig\u00e9nyes index l\u00e9trehoz\u00e1sa egyenesen hiba\u00fczenettel z\u00e1rult. Mag\u00e1nak az indexnek, ahogy az lenni szokott, \u00e9rv\u00e9nytelen \u00e1llapotban kellett maradnia az adatb\u00e1zisban. A napl\u00f3k elemz\u00e9se hi\u00e1nyz\u00f3 <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/runtime-config-resource\">temp_file_limit<\/a><\/noindex>-et mutatott. \u00c9s innent\u0151l kezdve... Miut\u00e1n jobban bele\u00e1stam magam, egy rak\u00e1s probl\u00e9m\u00e1t tal\u00e1ltam az adatb\u00e1zis konfigur\u00e1ci\u00f3j\u00e1ban, \u00e9s ujjat felh\u00fazva, csillog\u00e1ssal a szememben, elkezdtem jav\u00edtgatni \u0151ket.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"problema-pervaya--defoltnaya-konfiguraciya\">Els\u0151 probl\u00e9ma \u2013 az alap\u00e9rtelmezett konfigur\u00e1ci\u00f3<\/h3>\n<p><\/p>\n<p>Val\u00f3sz\u00edn\u0171leg a metafora, miszerint a Postgres egy k\u00e1v\u00e9f\u0151z\u0151n is futtathat\u00f3, m\u00e1r mindenkinek elegend\u0151, de... az alapbe\u00e1ll\u00edt\u00e1s val\u00f3ban t\u00f6bb k\u00e9rd\u00e9st is felvet. Legal\u00e1bbis \u00e9rdemes odafigyelni a <strong>maintenance_work_mem<\/strong>, <strong>temp_file_limit<\/strong>, <strong>statement_timeout<\/strong> \u00e9s <strong>lock_timeout<\/strong>.<\/p>\n<p><\/p>\n<p>eset\u00e9ben, <strong>maintenance_work_mem<\/strong> amely alap\u00e9rtelmezetten 64 MB volt, m\u00edg <strong>temp_file_limit<\/strong> valami k\u00f6r\u00fclbel\u00fcl 2 GB \u2013 nyilv\u00e1nval\u00f3an nem volt el\u00e9g mem\u00f3ri\u00e1nk ahhoz, hogy nagy t\u00e1bl\u00e1n indexet hozzunk l\u00e9tre.<\/p>\n<p><\/p>\n<p>Ez\u00e9rt <strong>pg-index-health<\/strong> \u00f6sszegy\u0171jt\u00f6ttem n\u00e9h\u00e1ny <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\">kulcsfontoss\u00e1g\u00fa<\/a><\/noindex>param\u00e9tert, amelyet v\u00e9lem\u00e9nyem szerint \u00e9rdemes be\u00e1ll\u00edtani minden adatb\u00e1zis eset\u00e9ben.<\/p>\n<p><\/p>\n<h3 id=\"problema-vtoraya--dubliruyuschiesya-indeksy\">M\u00e1sodik probl\u00e9ma \u2013 a duplik\u00e1lt indexek<\/h3>\n<p><\/p>\n<p>Az adatb\u00e1zisaink SSD meghajt\u00f3kon m\u0171k\u00f6dnek, \u00e9s <em>HA<\/em>-konfigur\u00e1ci\u00f3t haszn\u00e1lunk t\u00f6bb adatk\u00f6zponttal, mester-kiszolg\u00e1l\u00f3val \u00e9s <em>n<\/em>-db sz\u00e1m\u00fa replik\u00e1val. A lemezhely nagyon \u00e9rt\u00e9kes er\u0151forr\u00e1s sz\u00e1munkra; ugyanolyan fontos, mint a teljes\u00edtm\u00e9ny \u00e9s a CPU fogyaszt\u00e1s. Ez\u00e9rt egyr\u00e9szt sz\u00fcks\u00e9g\u00fcnk van indexekre a gyors olvas\u00e1shoz, m\u00e1sr\u00e9szt nem akarunk felesleges indexeket l\u00e1tni az adatb\u00e1zisban, mivel ezek helyet foglalnak \u00e9s lass\u00edtj\u00e1k az adatok friss\u00edt\u00e9s\u00e9t.<\/p>\n<p><\/p>\n<p>Miut\u00e1n minden <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/invalid_indexes.sql\">\u00e9rv\u00e9nytelen indexet<\/a><\/noindex> helyre\u00e1ll\u00edtottam, \u00e9s sokat n\u00e9ztem <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=aaecM4wKdhY\">Oleg Bartunov el\u0151ad\u00e1sait<\/a><\/noindex>, eld\u00f6nt\u00f6ttem, hogy egy \u201enagy\u201d takar\u00edt\u00e1st v\u00e9gezek. Kider\u00fclt, hogy a fejleszt\u0151k nem szeretik elolvasni az adatb\u00e1zis dokument\u00e1ci\u00f3j\u00e1t. Nagyon nem szeretik. Ennek k\u00f6vetkezm\u00e9nyek\u00e9nt k\u00e9t tipikus hiba l\u00e9p fel \u2013 manu\u00e1lisan l\u00e9trehozott index az els\u0151dleges kulcson \u00e9s hasonl\u00f3 \u201ek\u00e9zi\u201d index egyedi oszlopokra. Az a helyzet, hogy ezekre nincs sz\u00fcks\u00e9g \u2013 a Postgres mindent megold mag\u00e1t\u00f3l. Az ilyen indexeket nyugodtan t\u00f6r\u00f6lhetj\u00fck, ez\u00e9rt k\u00e9sz\u00fclt el a diagnosztika. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/duplicated_indexes.sql\">duplik\u00e1lt_indexek<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-tretya--peresekayuschiesya-indeksy\">Harmadik probl\u00e9ma \u2013 \u00e1tfed\u0151 indexek<\/h3>\n<p><\/p>\n<p>A legt\u00f6bb kezd\u0151 fejleszt\u0151 egyetlen oszlopon hoz l\u00e9tre indexeket. Fokozatosan, ahogy \u00edzlelgetni kezdik ezt a dolgot, az emberek elkezdik optimaliz\u00e1lni a lek\u00e9rdez\u00e9seiket, \u00e9s \u00f6sszetettebb indexeket adnak hozz\u00e1, amelyek t\u00f6bb oszlopot tartalmaznak. \u00cdgy j\u00f6nnek l\u00e9tre az indexek az oszlopokra. <em>A<\/em>, <em>A+B<\/em>, <em>A+B+C<\/em> stb. Az els\u0151 kett\u0151t nyugodtan ki lehet dobni, mivel ezek a harmadik el\u0151tagjai. Ez is jelent\u0151sen megtakar\u00edtja a lemez helyet, \u00e9s ez\u00e9rt van diagnosztika. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/intersected_indexes.sql\">\u00e1tfed\u0151_indexek<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-chetvertaya--vneshnie-klyuchi-bez-indeksov\">Negyedik probl\u00e9ma \u2013 idegen kulcsok indexek n\u00e9lk\u00fcl<\/h3>\n<p><\/p>\n<p>A Postgres megengedi idegen kulcs korl\u00e1toz\u00e1sok l\u00e9trehoz\u00e1s\u00e1t an\u00e9lk\u00fcl, hogy t\u00e1mogat\u00f3 indexet kellene megadni. Sok helyzetben ez nem jelent probl\u00e9m\u00e1t, \u00e9s m\u00e9g csak nem is nyilv\u00e1nul meg... Eg\u00e9szen egy id\u0151 m\u00falva...<\/p>\n<p><\/p>\n<p>\u00cdgy volt n\u00e1lunk is: egyszer csak abban a pillanatban a job, ami \u00fctemez\u00e9s szerint futott \u00e9s tiszt\u00edtotta a teszt megrendel\u00e9sekt\u0151l az adatb\u00e1zist, elkezdett nek\u00fcnk egy master hostot felhalmozni. A CPU \u00e9s IO az egekbe sz\u00f6k\u00f6tt, a lek\u00e9rdez\u00e9sek akadoztak \u00e9s id\u0151t\u00fall\u00e9p\u00e9s miatt megszakadtak, az szolg\u00e1ltat\u00e1s \u00f6tsz\u00e1zas hib\u00e1t jelezett. Gyors elemz\u00e9s. <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/monitoring-stats\">pg_stat_activity<\/a><\/noindex> megmutatta, hogy a k\u00f6vetkez\u0151 t\u00edpus\u00fa lek\u00e9rdez\u00e9sek akadtak el:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">t&ouml;r&ouml;lni &lt;table&gt; ahol az id szerepel (&hellip;)<\/code><\/pre>\n<p><\/p>\n<p>Ezenk\u00edv\u00fcl a c\u00e9l t\u00e1bl\u00e1ban term\u00e9szetesen volt index az id-n, \u00e9s a felv\u00e9telek t\u00f6rl\u00e9se a felt\u00e9tel alapj\u00e1n nagyon kev\u00e9s volt. \u00dagy t\u0171nt, hogy mindennek m\u0171k\u00f6dnie kellene, de sajnos nem m\u0171k\u00f6d\u00f6tt.<\/p>\n<p><\/p>\n<p>A csod\u00e1s <strong>explain analyze<\/strong> seg\u00edtett, \u00e9s elmondta, hogy a c\u00e9l t\u00e1bl\u00e1ban v\u00e9gzett t\u00f6rl\u00e9s mellett a referenci\u00e1lis integrit\u00e1s ellen\u0151rz\u00e9se is folyik, \u00e9s az egyik kapcsol\u00f3d\u00f3 t\u00e1bl\u00e1ban ez az ellen\u0151rz\u00e9s a <em>sorozatos letapogat\u00e1sba<\/em> futott a megfelel\u0151 index hi\u00e1nya miatt. \u00cdgy sz\u00fcletett meg a diagnosztika. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/foreign_keys_without_index.sql\">idegen_kulcsok_index_n\u00e9lk\u00fcl<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"problema-pyataya--null-value-v-indeksah\">\u00d6t\u00f6dik probl\u00e9ma \u2013 null \u00e9rt\u00e9kek az indexekben<\/h3>\n<p><\/p>\n<p>Alap\u00e9rtelmez\u00e9s szerint a Postgres belesz\u00e1m\u00edtja a null \u00e9rt\u00e9keket a btree-indexekbe, de \u00e1ltal\u00e1ban nincs sz\u00fcks\u00e9g r\u00e1juk. Ez\u00e9rt szorgalmasan pr\u00f3b\u00e1lom kidobni ezeket a null-okat (diagnosztika <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mfvanek\/pg-index-health\/blob\/master\/src\/main\/resources\/sql\/indexes_with_null_values.sql\">indexek_null_\u00e9rt\u00e9kekkel<\/a><\/noindex>), r\u00e9szleges indexeket l\u00e9trehozva a nullable oszlopok eset\u00e9ben, mint p\u00e9ld\u00e1ul <code>where <A> is not null<\/code>Ezzel a m\u00f3dszerrel siker\u00fclt cs\u00f6kkentenem az egyik index\u00fcnk m\u00e9ret\u00e9t 1877 Mbyte-r\u00f3l 16 Kbyte-ra. Egyik szolg\u00e1ltat\u00e1sunkn\u00e1l pedig az adatb\u00e1zis m\u00e9rete \u00f6sszesen 16%-kal (4,3 Gbyte-os abszol\u00fat sz\u00e1mokban) cs\u00f6kkent a NULL \u00e9rt\u00e9kek indexekb\u0151l val\u00f3 elt\u00e1vol\u00edt\u00e1sa r\u00e9v\u00e9n. \u00d3ri\u00e1si helymegtakar\u00edt\u00e1s viszonylag egyszer\u0171 m\u00f3dos\u00edt\u00e1sok mellett. \ud83d\ude42 <\/p>\n<p><\/p>\n<h3 id=\"problema-shestaya--otsutstvie-pervichnyh-klyuchey\">Hatodik probl\u00e9ma \u2013 a primer kulcsok hi\u00e1nya<\/h3>\n<p><\/p>\n<p>A mechanizmus saj\u00e1toss\u00e1gai miatt <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/442804\/\">MVCC a Postgres-ben<\/a><\/noindex> lehets\u00e9ges olyan helyzet, mint <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/169939\/\">bloat<\/a><\/noindex>, amikor az adatb\u00e1zis egyik t\u00e1bl\u00e1j\u00e1nak m\u00e9rete gyorsan n\u00f6vekszik a sok elhalt rekord miatt. Naivan azt hittem, hogy minket ez nem fenyeget, \u00e9s hogy a mi adatb\u00e1zisunkkal ilyesmi nem t\u00f6rt\u00e9nik meg, hiszen mi, \u00f3 jaj!!!, norm\u00e1lis fejleszt\u0151k vagyunk\u2026 Milyen buta \u00e9s naiv voltam\u2026<\/p>\n<p><\/p>\n<p>Egy sz\u00e9p napon egy csod\u00e1s migr\u00e1ci\u00f3 minden rekordot friss\u00edtett egy nagy \u00e9s akt\u00edvan haszn\u00e1lt t\u00e1bl\u00e1ban. 100 Gbyte-tal n\u0151tt a t\u00e1bla m\u00e9rete a semmib\u0151l. Borzaszt\u00f3an bosszant\u00f3 volt, de kalandjaink nem \u00e9rtek v\u00e9get itt. Miut\u00e1n 15 \u00f3ra eltelt\u00e9vel befejez\u0151d\u00f6tt az automatikus takar\u00edt\u00e1s ezen a t\u00e1bl\u00e1n, vil\u00e1goss\u00e1 v\u00e1lt, hogy a fizikai hely nem t\u00e9r vissza. Meg\u00e1ll\u00edtani a szolg\u00e1ltat\u00e1st \u00e9s v\u00e9grehajtani a VACUUM FULL-t nem tudtuk, ez\u00e9rt \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy haszn\u00e1ljuk <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/reorg\/pg_repack\">pg_repack<\/a><\/noindex>. \u00c9s ekkor kider\u00fclt, hogy <em>pg_repack<\/em> nem tudja kezelni a primer kulcs n\u00e9lk\u00fcli t\u00e1bl\u00e1kat vagy egy\u00e9b egyedi korl\u00e1toz\u00e1sokat, \u00e9s a mi t\u00e1bl\u00e1nkon nem volt primer kulcs. \u00cdgy sz\u00fcletett meg a diagnosztika <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>A k\u00f6nyvt\u00e1r verzi\u00f3j\u00e1ban <strong>0.1.5<\/strong> megjelent a lehet\u0151s\u00e9g, hogy adatokat gy\u0171jtsenek a t\u00e1bl\u00e1k \u00e9s indexek bloat-j\u00e1r\u00f3l \u00e9s id\u0151ben reag\u00e1ljanak r\u00e1.<\/p>\n<p><\/p>\n<h3 id=\"problemy-sem-i-vosem--nehvatka-indeksov-i-neispolzuemye-indeksy\">Hetedik \u00e9s nyolcadik probl\u00e9ma \u2013 a hi\u00e1nyz\u00f3 indexek \u00e9s a nem haszn\u00e1lt indexek<\/h3>\n<p><\/p>\n<p>A k\u00f6vetkez\u0151 k\u00e9t diagnosztika \u2013 <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> \u00e9s <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 a v\u00e9gs\u0151 form\u00e1jukban viszonylag nemr\u00e9giben jelentek meg. Az a helyzet, hogy ezeket nem lehetett csak \u00fagy hozz\u00e1adni.<\/p>\n<p><\/p>\n<p>Ahogy m\u00e1r eml\u00edtettem, t\u00f6bb replik\u00e1s konfigur\u00e1ci\u00f3t haszn\u00e1lunk, \u00e9s a k\u00fcl\u00f6nb\u00f6z\u0151 hosztokon elt\u00e9r\u0151 a lek\u00e9rdez\u00e9si terhel\u00e9s. Ennek eredm\u00e9nyek\u00e9nt olyan helyzet alakul ki, hogy bizonyos t\u00e1bl\u00e1k \u00e9s indexek egyes hosztokon szinte nem haszn\u00e1ltak, \u00e9s a statisztik\u00e1k \u00f6sszegy\u0171jt\u00e9se minden hoszton a klaszterben sz\u00fcks\u00e9ges. <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\">A statisztik\u00e1kat<\/a><\/noindex> szint\u00e9n minden hoszton a klaszterben kell vissza\u00e1ll\u00edtani, ezt nem lehet csak a mester hoszton megtenni.<\/p>\n<p><\/p>\n<p>Ez a megk\u00f6zel\u00edt\u00e9s lehet\u0151v\u00e9 tette sz\u00e1munkra, hogy t\u00f6bb t\u00edz gigab\u00e1jtot sp\u00f3roljunk azzal, hogy elt\u00e1vol\u00edtottuk a sosem haszn\u00e1lt indexeket, valamint hogy hozz\u00e1adtuk a sz\u00fcks\u00e9ges indexeket a ritk\u00e1n haszn\u00e1lt t\u00e1bl\u00e1khoz.<\/p>\n<p><\/p>\n<h3 id=\"v-kachestve-zaklyucheniya\">\u00d6sszegz\u00e9s\u00fcl<\/h3>\n<p><\/p>\n<p>Term\u00e9szetesen szinte minden diagn\u00f3zist be lehet \u00e1ll\u00edtani <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\">kiv\u00e9telek list\u00e1j\u00e1t<\/a><\/noindex>. \u00cdgy gyorsan integr\u00e1lhatjuk az ellen\u0151rz\u00e9seket az alkalmaz\u00e1s\u00e1ban, megel\u0151zve az \u00faj hib\u00e1k megjelen\u00e9s\u00e9t, \u00e9s fokozatosan jav\u00edtva a r\u00e9giakat.<\/p>\n<p><\/p>\n<p>N\u00e9h\u00e1ny diagn\u00f3zist m\u00e1r a funkcion\u00e1lis tesztek sor\u00e1n v\u00e9grehajthatunk k\u00f6zvetlen\u00fcl a DB migr\u00e1ci\u00f3k ut\u00e1n. \u00c9s ez tal\u00e1n a k\u00f6nyvt\u00e1ram egyik legnagyobb lehet\u0151s\u00e9ge. P\u00e9lda a haszn\u00e1latra megtekinthet\u0151 itt: <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\">dem\u00f3b\u00f3l<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Azok az ellen\u0151rz\u00e9sek, amelyek a nem haszn\u00e1lt vagy hi\u00e1nyz\u00f3 indexekre, valamint a bloat-ra vonatkoznak, csak val\u00f3s adatb\u00e1zison \u00e9rdemesek v\u00e9grehajtani. Az \u00f6sszegy\u0171jt\u00f6tt \u00e9rt\u00e9keket r\u00f6gz\u00edthetj\u00fck <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClickHouse\/ClickHouse\">clickhousedb_fdw<\/a><\/noindex> vagy elk\u00fcldhetj\u00fck a monitoring rendszernek.<\/p>\n<p><\/p>\n<p>Nagyon rem\u00e9lem, hogy <strong>pg-index-health<\/strong> hasznos \u00e9s keresett lesz. \u00d6n is hozz\u00e1j\u00e1rulhat a k\u00f6nyvt\u00e1r fejleszt\u00e9s\u00e9hez, ha jelzi a felfedezett probl\u00e9m\u00e1kat \u00e9s \u00faj diagnosztik\u00e1kat javasol.<\/p>\n<p>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47Indexek eg\u00e9szs\u00e9ge PostgreSQL-ben Java-fejleszt\u0151 szem\u00e9vel | ProHoster","description":"Hell\u00f3. A nevem Vanya, \u00e9s Java fejleszt\u0151 vagyok.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/zdorove-indeksov-v-postgresql-glazami-java-razrabotchika","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/72875","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=72875"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/72875\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/72876"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=72875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=72875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=72875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}