Hello.
Vanya no anarako ary mpamorona Java aho. Mitranga izany fa miasa be amin'ny PostgreSQL aho - mametraka ny angon-drakitra, manatsara ny rafitra, ny fampisehoana ary ny milalao DBA kely amin'ny faran'ny herinandro.
Vao haingana aho no nanadio angona maromaro tao amin'ny microservices ary nanoratra tranomboky java , izay manamora ity asa ity, mitsitsy fotoana ahy ary manampy ahy hisoroka ny fahadisoana mahazatra ataon'ny mpamorona. Io tranomboky io no horesahina anio.

Disclaimer
Ny dikan-teny fototra amin'ny PostgreSQL iarahako dia 10. Ny fanontaniana SQL rehetra ampiasaiko dia voasedra amin'ny version 11 ihany koa. Ny dikan-teny tohanana kely indrindra dia 9.6.
prehistory
Efa ho herintaona lasa izay no niantombohan'ny zava-drehetra tamin'ny toe-javatra hafahafa tamiko: niafara tamin'ny hadisoana ny famoronana fanondroana tsy misy manga. Ny index mihitsy, toy ny mahazatra, dia nijanona tao amin'ny angon-drakitra tao anatin'ny toe-javatra tsy mety. Nampiseho tsy fahampiana ny fanadihadiana momba ny log . Dia nandeha izahay... Nihady lalindalina kokoa aho, nahita olana marobe tao amin'ny fandrindrana ny angon-drakitra ary, nanakodia ny tanako, nanomboka nanamboatra azy ireo tamin'ny famirapiratana teo amin'ny masoko.
Olana voalohany - configuration default
Azo inoana fa reraky ny rehetra ny fanoharana momba ny Postgres, izay azo atao amin'ny mpanamboatra kafe, saingy ... ny fametrahana default dia tena mametraka fanontaniana maromaro. Farafaharatsiny, mendrika ny hojerena fikojakojana_asa_mem, temp_file_limit, statement_time out Šø lock_time out.
Raha ny antsika fikojakojana_asa_mem dia ny default 64 MB, ary temp_file_limit zavatra manodidina ny 2 GB - tsy ampy fitadidiana fotsiny izahay hamoronana tondro eo amin'ny latabatra lehibe.
Noho izany, in pg-index-health Nanangona andiany aho , raha ny hevitro, ny paramĆØtre tokony amboarina ho an'ny tahiry tsirairay.
Olana roa - fanondroana duplicate
Ny angon-drakitray dia miaina amin'ny kapila SSD, ary ampiasainay HA-configuration miaraka amin'ny foibe data marobe, mpampiantrano master ary n- isan'ny kopia. Ny habaka kapila dia loharano tena sarobidy ho antsika; tsy latsa-danja noho ny fampisehoana sy ny fanjifana CPU izany. Noho izany, amin'ny lafiny iray, mila indexes ho an'ny famakiana haingana isika, ary amin'ny lafiny iray, tsy te-hahita index tsy ilaina ao amin'ny angon-drakitra, satria mihinana habaka izy ireo ary mampiadana ny fanavaozana ny data.
Ary ankehitriny, rehefa namerina ny zava-drehetra ary efa ampy ny nahita , Nanapa-kevitra ny handamina fanadiovana ālehibeā aho. Hita fa tsy tia mamaky antontan-taratasy momba ny database ny developer. Tsy dia tiany izany. Noho izany dia misy hadisoana mahazatra roa mipoitra - fanondroana noforonina amin'ny lakile voalohany ary fanondroana "manual" mitovy amin'ny tsanganana tokana. Ny zava-misy dia tsy ilaina izy ireo - ny Postgres dia hanao ny zava-drehetra. Ny fanondroana toy izany dia azo esorina soa aman-tsara, ary ny diagnostika dia niseho tamin'izany tanjona izany .
Olana telo - fifandimbiasana indices
Ny ankamaroan'ny mpamorona vaovao dia mamorona index amin'ny tsanganana tokana. Tsikelikely, rehefa niaina tanteraka an'ity orinasa ity, ny olona dia manomboka manatsara ny fanontaniany ary manampy indeksa sarotra kokoa izay misy tsanganana maromaro. Toy izany ny endriky ny fanondro amin'ny tsanganana A, A + B, A + B + C sy ny sisa. Ny roa voalohany amin'ireo tondro ireo dia azo ariana soa aman-tsara, satria izy ireo dia tovan'ny fahatelo. Izany koa dia mitahiry habaka kapila be dia be ary misy ny diagnostika amin'izany .
Olana efatra - fanalahidy vahiny tsy misy index
Ny Postgres dia ahafahanao mamorona teritery manan-danja avy any ivelany tsy misy fanondroana fanondroana. Amināny toe-javatra maro dia tsy olana izany, ary mety tsy hiseho mihitsy aza... Amināizao fotoana izao...
Toy izany ihany koa taminay: fa tamin'ny fotoana iray dia nisy asa iray, nihazakazaka araka ny fandaharam-potoana ary nanadio ny angon-drakitra momba ny baikon'ny fitsapana, dia nanomboka "nampiana" anay ny mpampiantrano tompony. Very maina ny CPU sy ny IO, nihena ny fangatahana ary tapitra ny fotoana, dimanjato ny serivisy. Famakafakana haingana naneho fa fanontaniana toy ny:
delete from <table> where id in (ā¦)Amin'ity tranga ity, mazava ho azy, nisy index amin'ny id tao amin'ny latabatra kendrena, ary vitsy dia vitsy no voafafa araka ny fepetra. Toa tsy maintsy niasa ny zava-drehetra, saingy, indrisy, tsy nisy izany.
Ilay mahafinaritra dia tonga namonjy manazava analyse ary nilaza fa ankoatry ny famafana ny firaketana ao amin'ny latabatra kendrena, dia misy ihany koa ny fanamarinana ny fahamendrehana, ary amin'ny iray amin'ireo tabilao mifandraika dia tsy mahomby io fanamarinana io. scan sequential noho ny tsy fisian'ny index sahaza. Noho izany dia teraka ny diagnostics .
Olana dimy - sanda null amin'ny indexes
Amin'ny alĆ lan'ny default, ny Postgres dia ahitana sanda tsy misy dikany amin'ny indeksan'ny btree, saingy matetika tsy ilaina ao izy ireo. Noho izany, miezaka mafy aho hanary ireo nulls ireo (diagnostics ), mamorona index partial amin'ny tsanganana nullable araka ny karazana where <A> is not null. Tamin'izany fomba izany no nahafahako nampihena ny haben'ny iray amin'ireo fanondroanay avy amin'ny 1877 MB ho 16 KB. Ary ao amin'ny iray amin'ireo serivisy, ny haben'ny angon-drakitra dia nihena 16% (tamin'ny 4.3 GB amin'ny isa tanteraka) noho ny fanilihana ny sanda tsy misy dikany amin'ny index. Mitsitsy be dia be amin'ny habaka kapila miaraka amin'ny fanovana tsotra. š
Olana enina - tsy fahampian'ny fanalahidy fototra
Noho ny toetry ny mekanika mety hisy toe-javatra tahaka izao rehefa mitombo haingana ny haben'ny latabatrao noho ny firaketana maty marobe. Nino aho fa tsy handrahona antsika izany, ary tsy hitranga amin'ny toby misy antsika izany, satria, wow!!!, mpandrindra ara-dalĆ na izahay ... Tena vendrana sy tsy misy dikany aho ...
Indray andro, nisy fifindra-monina mahafinaritra iray naka sy nanavao ny firaketana rehetra tao anaty latabatra lehibe iray ampiasaina. Nahazo +100 GB ny haben'ny latabatra izahay. Tena mahamenatra izany, saingy tsy nifarana teo ny zava-dratsy nataonay. Taorian'ny nifaranan'ny autovacuum teo amin'ity latabatra ity 15 ora taty aoriana, dia hita fa tsy hiverina ny toerana ara-batana. Tsy afaka nampitsahatra ny serivisy izahay ary nanao VACUM FENO, ka nanapa-kevitra ny hampiasa . Ary dia hita fa izany pg_repack tsy mahalala ny fomba fanodinana latabatra tsy misy fanalahidy fototra na teritery hafa mampiavaka azy, ary tsy nanana fanalahidy fototra ny latabatray. Noho izany dia teraka ny diagnostics .
Ao amin'ny version library 0.1.5 Nampiana ny fahafahana manangona angona avy amin'ny bloat of tables and indexes ary mamaly izany ara-potoana.
Olana fito sy valo - tsy ampy fanondroana sy fanondro tsy ampiasaina
Ny diagnostika roa manaraka dia: Šø - niseho tamin'ny endriny farany vao haingana. Ny zava-misy dia tsy azo raisina sy ampiana fotsiny izy ireo.
Araka ny efa nosoratako dia mampiasa config miaraka amin'ny kopia maromaro izahay, ary ny enta-mavesatra mamaky amin'ny mpampiantrano samihafa dia tena hafa. Vokatr'izany, ny toe-javatra dia hita fa ny latabatra sy ny indeksa sasany amin'ny mpampiantrano sasany dia saika tsy ampiasaina, ary ho an'ny fanadihadiana dia mila manangona antontan'isa avy amin'ny mpampiantrano rehetra ao amin'ny cluster ianao. Ilaina koa izany amin'ny mpampiantrano rehetra ao amin'ny cluster; tsy afaka manao izany ianao amin'ny tompony ihany.
Io fomba fiasa io dia nahafahanay nitahiry gigabytes am-polony maro tamin'ny alalan'ny fanesorana ireo tondro izay tsy nampiasaina mihitsy, ary koa nanampy ireo tondro tsy hita tamin'ny latabatra tsy dia nampiasaina.
Ho famaranana
Mazava ho azy, ho an'ny diagnostika rehetra azonao atao ny manamboatra . Amin'izany fomba izany, azonao atao ny mampihatra haingana ny fisavana ao amin'ny fampiharanao, manakana ny lesoka vaovao tsy hiseho, ary avy eo manamboatra tsikelikely ny taloha.
Ny diagnostika sasany dia azo atao amin'ny fitsapana miasa avy hatrany aorian'ny famoahana ny fifindra-monina angona. Ary ity angamba no iray amin'ireo endri-javatra mahery indrindra amin'ny tranomboky. Ohatra iray amin'ny fampiasana dia hita ao amin'ny .
Misy dikany ny manao fisavana ho an'ny indeksa tsy ampiasaina na tsy hita, ary koa ho an'ny bloat, amin'ny tena angon-drakitra ihany. Ny sanda voaangona dia azo raketina ao na alefa any amin'ny rafitra fanaraha-maso.
Tena manantena izany aho pg-index-health ho ilaina sy ilaina. Azonao atao ihany koa ny mandray anjara amin'ny fivoaran'ny tranomboky amin'ny alĆ lan'ny tatitra ireo olana hitanao sy ny fanolorana diagnostika vaovao.
Source: www.habr.com
