Ny fahasalaman'ny index ao amin'ny PostgreSQL amin'ny mason'ny mpamorona Java

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 pg-index-health, izay manamora ity asa ity, mitsitsy fotoana ahy ary manampy ahy hisoroka ny fahadisoana mahazatra ataon'ny mpamorona. Io tranomboky io no horesahina anio.

Ny fahasalaman'ny index ao amin'ny PostgreSQL amin'ny mason'ny mpamorona Java

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 temp_file_limit. 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 ANDININ-, 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 fanondroana tsy mety ary efa ampy ny nahita tatitra nataon'i Oleg Bartunov, 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 duplicated_indexes.

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 intersected_indexes.

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 pg_stat_activity 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 foreign_keys_without_index.

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 indexes_with_null_values), 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 MVCC ao amin'ny Postgres mety hisy toe-javatra tahaka izao mivontorehefa 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 pg_repack. 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 tables_without_primary_key.

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: tables_with_missing_indexes ΠΈ unused_indexes - 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. Avereno ny antontan'isa 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 lisitra fanilihana. 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 Demo.

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 clickhouse 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

Add a comment