ʻO ke olakino o nā kuhikuhi ma PostgreSQL ma o nā maka o kahi mea hoʻomohala Java

Hi

ʻO Vanya koʻu inoa a he mea hoʻomohala Java wau. ʻO ia kaʻu hana nui me PostgreSQL - hoʻonohonoho i ka waihona, hoʻonui i ka hoʻolālā, hana, a pāʻani i kahi DBA liʻiliʻi i nā hopena pule.

I kēia mau lā ua hoʻomaʻemaʻe au i kekahi mau waihona i kā mākou microservices a kākau i kahi waihona java pg-index-health, ka mea e maʻalahi ai kēia hana, mālama iaʻu i ka manawa a kōkua iaʻu e pale i kekahi mau hewa maʻamau i hana ʻia e nā mea hoʻomohala. ʻO kēia hale waihona puke mākou e kamaʻilio ai i kēia lā.

ʻO ke olakino o nā kuhikuhi ma PostgreSQL ma o nā maka o kahi mea hoʻomohala Java

Akahana

ʻO ka mana nui o PostgreSQL aʻu e hana nei me 10. ʻO nā nīnau SQL a pau aʻu e hoʻohana ai ua hoʻāʻo ʻia ma ka mana 11. ʻO ka mana haʻahaʻa i kākoʻo ʻia ʻo 9.6.

prehistory

Ua hoʻomaka ʻo ia a pau ma kahi o hoʻokahi makahiki i hala aku nei me kahi kūlana ʻano ʻē iaʻu: ʻo ka hoʻokumu ʻana i ka hoʻokūkū o kahi index ma waho o ka uliuli i pau me kahi hewa. ʻO ka papa kuhikuhi ponoʻī, e like me ka mea maʻamau, ua noho i loko o ka waihona ma kahi kūlana kūpono ʻole. Ua hōʻike ʻia ka hemahema o ka loiloi log temp_file_limit. A hele mākou ... Eʻeli hohonu, uaʻike au i kahi hui nui o nā pilikia i ka hoʻonohonohoʻikepili a me ka'ōwiliʻana i koʻu mau lima lima, hoʻomaka e hoʻoponopono iā lākou me ka'ōlinolino o koʻu mau maka.

Pilikia hoʻokahi - hoʻonohonoho paʻamau

Malia paha ua luhi nā mea a pau i ka ʻōlelo hoʻohālikelike e pili ana iā Postgres, hiki ke holo ma luna o kahi mea hana kope, akā ... ʻo ka hoʻonohonoho paʻamau e hoʻāla maoli i nā nīnau he nui. Ma ka liʻiliʻi, pono e hoʻolohe mālama_hana_mem, temp_file_limit, ʻōlelo_manawa и lock_timeout.

I ko mākou hihia mālama_hana_mem ʻo ia ka 64 MB paʻamau, a temp_file_limit kahi mea ma kahi o 2 GB - ʻaʻole lawa mākou i ka hoʻomanaʻo e hana i kahi kuhikuhi ma kahi papa nui.

No laila, ma pg-index-health Ua hōʻiliʻili au i kahi moʻo , i koʻu manaʻo, nā ʻāpana pono e hoʻonohonoho ʻia no kēlā me kēia waihona.

Pilikia ʻelua - nā kuhikuhi kikoʻī

Noho kā mākou waihona ma nā SSD drive, a hoʻohana mākou HA-hoʻonohonoho me nā kikowaena data he nui, haku host a n-ka helu o nā kope. He kumu waiwai nui ka wahi disk no mākou; ʻaʻole i emi iki ka mea nui ma mua o ka hana a me ka hoʻohana CPU. No laila, ma kekahi ʻaoʻao, pono mākou i nā kuhikuhi no ka heluhelu wikiwiki ʻana, a ma ka ʻaoʻao ʻē aʻe, ʻaʻole mākou makemake e ʻike i nā indexes pono ʻole i ka waihona, no ka mea, ʻai lākou i kahi ākea a lohi i ka hoʻonui ʻana i ka ʻikepili.

A i kēia manawa, ua hoʻihoʻi i nā mea a pau invalid indexes a lawa ka ike ana nā hōʻike e Oleg Bartunov, Ua hoʻoholo wau e hoʻonohonoho i kahi hoʻomaʻemaʻe "nui". Ua ʻike ʻia ʻaʻole makemake nā mea hoʻomohala e heluhelu i ka palapala waihona. ʻAʻole makemake nui lākou. Ma muli o kēia, ʻelua mau hewa maʻamau - kahi kuhikuhi i hana lima ʻia ma kahi kī mua a me kahi kuhikuhi "manual" like ma kahi kolamu kūʻokoʻa. ʻO ka ʻoiaʻiʻo ʻaʻole pono lākou - e hana ʻo Postgres i nā mea āpau iā ia iho. Hiki ke holoi pono ʻia ia mau kuhikuhi, a ua ʻike ʻia nā diagnostics no kēia kumu ʻelua_indexes.

Pilikia ʻekolu - ke kuhi ʻana i nā helu

Hoʻokumu ka hapa nui o nā mea hoʻomohala hou i nā kuhikuhi ma kahi kolamu hoʻokahi. Me ka mālie, i ka ʻike pono ʻana i kēia ʻoihana, hoʻomaka ka poʻe e hoʻomaikaʻi i kā lākou mau nīnau a hoʻohui i nā ʻōlelo kuhikuhi paʻakikī i loaʻa nā kolamu. ʻO kēia ke ʻano o ka ʻike ʻana o nā kuhikuhi ma nā kolamu A, A + B, ʻA + B + C a laila. Hiki ke kiola ʻia nā mea mua ʻelua o kēia mau kuhikuhi, no ka mea, he prefix lākou o ke kolu. Mālama kēia i ka nui o ka disk a aia nā diagnostics no kēia intersected_indexes.

ʻEhā pilikia - nā kī haole me ka ʻole o nā kuhikuhi

Hāʻawi ʻo Postgres iā ʻoe e hana i nā koina kī haole me ka ʻole o ka wehewehe ʻana i kahi papa kuhikuhi. I nā kūlana he nui ʻaʻole kēia he pilikia, a ʻaʻole paha e hōʻike iā ia iho ... No ka manawa ...

Ua like ia me mākou: ʻo ia wale nō i kekahi manawa i kahi hana, e holo ana e like me ka papa kuhikuhi a me ka hoʻomaʻemaʻe ʻana i ka waihona o nā kauoha hoʻāʻo, hoʻomaka e "hoʻohui" iā mākou e ka haku haku. Ua pau ka CPU a me IO, ua lohi nā noi a ua pau ka manawa, ʻelima haneli ka lawelawe. Hoʻopili wikiwiki pg_stat_activity ua hōʻike ʻia nā nīnau e like me:

delete from <table> where id in (…)

I kēia hihia, ʻoiaʻiʻo, aia kahi kuhikuhi ma ka id ma ka papa kuhikuhi, a he kakaikahi loa nā moʻolelo i holoi ʻia e like me ke kūlana. Me he mea lā e hana pono nā mea a pau, akā, auwe, ʻaʻole.

Ua hele mai ka mea kupanaha e hoʻopakele wehewehe wehewehe a ʻōlelo ʻo ia ma waho aʻe o ka holoi ʻana i nā moʻolelo ma ka papa kuhikuhi, aia pū kekahi hōʻike ʻoiaʻiʻo e pili ana, a ma kekahi o nā papa pili e hāʻule kēia nānā. kaʻina hana ma muli o ka nele o kahi papa kuhikuhi kūpono. No laila ua hānau ʻia nā diagnostics haole_kī_ʻole_index.

Pilikia ʻelima - ka waiwai null i nā kuhikuhi

Ma ka maʻamau, ua hoʻokomo ʻo Postgres i nā waiwai null i nā btree indexes, akā ʻaʻole pono lākou ma laila. No laila, ke hoʻoikaika nei au e hoʻolei i kēia mau nulls (diagnostics indexes_with_null_values), ka hana ʻana i nā ʻōlelo kuhikuhi hapa ma nā kolamu nullable ma ke ʻano where <A> is not null. Ma kēia ala ua hiki iaʻu ke hoʻemi i ka nui o kekahi o kā mākou mau kuhikuhi mai ka 1877 MB a i ka 16 KB. A ma kekahi o nā lawelawe, ua emi ka nui o ka waihona ma ka 16% (e 4.3 GB i nā helu piha) ma muli o ka haʻalele ʻana o nā waiwai null mai nā kuhikuhi. ʻO ka mālama nui ʻana i ka hakahaka disk me nā hoʻololi maʻalahi loa. 🙂

Ka pilikia ʻeono - nele i nā kī mua

Ma muli o ke ʻano o ka mīkini MVCC ma Postgres hiki ke kūlana e like me kēia puhakake ulu wikiwiki nei ka nui o kāu pākaukau ma muli o ka nui o nā moʻolelo make. Ua manaʻoʻiʻo wau ʻaʻole e hoʻoweliweli kēia iā mākou, a ʻaʻole hiki kēia i ko mākou waihona, no ka mea, ʻo mākou, wow!!!, he mau mea hoʻomohala maʻamau ... Pehea wau i naʻaupō a naʻaupō ...

I kekahi lā, ua lawe a hōʻano hou ka neʻe ʻana i nā moʻolelo āpau ma kahi papaʻaina nui a hoʻohana ikaika ʻia. Loaʻa iā mākou +100 GB i ka nui o ka papaʻaina mai ka uliuli. He mea hilahila, akā, ʻaʻole i pau kā mākou mau pōʻino i laila. Ma hope o ka pau ʻana o ka autovacuum ma kēia pākaukau he 15 mau hola ma hope mai, ua maopopo ʻaʻole e hoʻi ka wahi kino. ʻAʻole hiki iā mākou ke hoʻōki i ka lawelawe a hana i ka VACUUM FULL, no laila ua hoʻoholo mākou e hoʻohana pg_repack. A laila ua ʻike ʻia kēlā pg_repack ʻAʻole ʻike i ka hana ʻana i nā papa me ke kī kumu ʻole a i ʻole nā ​​​​koi ʻokoʻa ʻē aʻe, a ʻaʻohe kī nui i kā mākou papaʻaina. No laila ua hānau ʻia nā diagnostics tables_without_primary_key.

Ma ka waihona waihona 0.1.5 Ua hoʻohui ʻia ka hiki ke hōʻiliʻili i ka ʻikepili mai ka bloat o nā papa a me nā kuhikuhi a pane aku iā ia i ka manawa kūpono.

Nā pilikia ʻehiku a me ʻewalu - lawa ʻole nā ​​kuhikuhi a me nā kuhikuhi i hoʻohana ʻole ʻia

ʻO kēia mau diagnostics ʻelua: tables_with_missing_indexes и unused_indexes - ua ʻike ʻia ma ko lākou ʻano hope loa. ʻO ke kumu ʻaʻole hiki ke lawe wale ʻia a hoʻohui ʻia.

E like me kaʻu i kākau mua ai, hoʻohana mākou i kahi hoʻonohonoho me nā replicas, a ʻokoʻa ke ʻano o ka heluhelu heluhelu ʻana ma nā pūʻali like ʻole. ʻO ka hopena, ʻike ʻia ke kūlana ʻaʻole i hoʻohana ʻia kekahi mau papa a me nā kuhikuhi ma kekahi mau pūʻali, a no ka nānā ʻana pono ʻoe e hōʻiliʻili i nā helu mai nā pūʻali āpau i ka hui. Hoʻonohonoho hou i nā helu helu Pono kēia i kēlā me kēia pūʻali i ka hui; ʻaʻole hiki iā ʻoe ke hana i kēia wale nō ma ka haku.

Ua ʻae kēia ala iā mākou e mālama i nā ʻumi o nā gigabytes ma o ka wehe ʻana i nā kuhikuhi i hoʻohana ʻole ʻia, a me ka hoʻohui ʻana i nā index i nalowale i nā papa i hoʻohana ʻole ʻia.

He hopena

ʻOiaʻiʻo, no nā diagnostics āpau hiki iā ʻoe ke hoʻonohonoho papa inoa hoʻokae. Ma kēia ala, hiki iā ʻoe ke hoʻokō koke i nā loiloi i kāu noi, pale i nā hewa hou mai ka ʻike ʻana, a laila hoʻoponopono mālie i nā hewa kahiko.

Hiki ke hana ʻia kekahi mau diagnostics i nā hoʻāʻo hana ma hope koke o ka ʻōwili ʻana i ka neʻe ʻana o ka waihona. A ʻo kēia paha kekahi o nā hiʻohiʻona ikaika loa o kaʻu waihona. Hiki ke loaʻa kahi laʻana o ka hoʻohana ma demo.

Maikaʻi ka hana ʻana i nā loiloi no nā mea i hoʻohana ʻole ʻia a nalo paha, a me ka bloat, aia wale nō ma kahi ʻikepili maoli. Hiki ke hoʻopaʻa ʻia nā waiwai i hōʻiliʻili ʻia ma KaomiHouse a i ʻole i hoʻouna ʻia i ka ʻōnaehana nānā.

Manaʻolana loa wau pg-index-health e pono a i makemakeia. Hiki iā ʻoe ke kōkua i ka hoʻomohala ʻana o ka waihona ma ka hōʻike ʻana i nā pilikia āu e ʻike ai a me ka hōʻike ʻana i nā diagnostics hou.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka