Hi
Jisimni Vanya u jien żviluppatur Java. Jiġri li naħdem ħafna ma 'PostgreSQL - inwaqqaf id-database, nottimizza l-istruttura, il-prestazzjoni, u nilgħab ftit DBA fi tmiem il-ġimgħa.
Riċentement ordnajt diversi databases fil-mikroservizzi tagħna u ktibt librerija java
Ċaħda ta 'responsabbiltà
Il-verżjoni ewlenija ta 'PostgreSQL li naħdem magħha hija 10. Il-mistoqsijiet SQL kollha li nuża huma ttestjati wkoll fuq il-verżjoni 11. Il-verżjoni minima appoġġjata hija 9.6.
preistorja
Kollox beda kważi sena ilu b’sitwazzjoni li kienet stramba għalija: il-ħolqien kompetittiv ta’ indiċi mill-aqwa spiċċa bi żball. L-indiċi nnifsu, bħas-soltu, baqa' fid-database fi stat invalidu. L-analiżi taz-zkuk wriet nuqqas
Problema waħda - konfigurazzjoni default
Probabbilment kulħadd huwa pjuttost għajjien tal-metafora dwar Postgres, li tista 'titħaddem fuq magna tal-kafè, iżda... il-konfigurazzjoni default verament tqajjem numru ta' mistoqsijiet. Bħala minimu, ta 'min joqgħod attent għalih manutenzjoni_xogħol_mem, temp_file_limit, statement_timeout и lock_timeout.
Fil-każ tagħna manutenzjoni_xogħol_mem kien il-default 64 MB, u temp_file_limit xi ħaġa madwar 2 GB - sempliċement ma kellniex memorja biżżejjed biex noħolqu indiċi fuq mejda kbira.
Għalhekk, fi pg-index-saħħa Ġbart sensiela
Problema tnejn - indiċi duplikati
Id-databases tagħna jgħixu fuq drives SSD, u nużaw HA-konfigurazzjoni ma 'ċentri tad-dejta multipli, host master u n-numru ta' repliki. L-ispazju tad-disk huwa riżorsa siewja ħafna għalina; mhuwiex inqas importanti mill-prestazzjoni u l-konsum tas-CPU. Għalhekk, min-naħa waħda, għandna bżonn indiċi għal qari veloċi, u min-naħa l-oħra, ma rridux naraw indiċijiet mhux meħtieġa fid-database, peress li jieklu l-ispazju u jnaqqsu l-aġġornament tad-dejta.
U issa, wara li rrestawra kollox
Problema tlieta - indiċijiet li jaqsmu
Ħafna mill-iżviluppaturi novizzi joħolqu indiċi fuq kolonna waħda. Gradwalment, wara li esperjenzaw sewwa dan in-negozju, in-nies jibdew jottimizzaw il-mistoqsijiet tagħhom u jżidu indiċijiet aktar kumplessi li jinkludu diversi kolonni. Hekk jidhru l-indiċi fuq il-kolonni A, A + B, A + B + C u l-bqija. L-ewwel tnejn minn dawn l-indiċi jistgħu jintremew b'mod sikur, peress li huma prefissi tat-tielet. Dan jiffranka wkoll ħafna spazju fuq id-diska u hemm dijanjostiċi għal dan
Problema erba - ċwievet barranin mingħajr indiċi
Postgres jippermettilek li toħloq restrizzjonijiet ewlenin barranin mingħajr ma tispeċifika indiċi ta 'appoġġ. F’ħafna sitwazzjonijiet din mhix problema, u tista’ lanqas timmanifesta ruħha... Għalissa...
Kien l-istess magħna: huwa biss li f'xi ħin xogħol, li jaħdem skond skeda u li jneħħi d-database ta 'ordnijiet tat-test, beda jiġi "miżjud" lilna mill-kaptan host. Is-CPU u l-IO marru għall-ħela, it-talbiet naqsu u ġew timed out, is-servizz kien ħames mija. Analiżi malajr
delete from <table> where id in (…)
F'dan il-każ, ovvjament, kien hemm indiċi bl-id fit-tabella fil-mira, u ftit rekords tħassru skond il-kundizzjoni. Deher li kollox għandu jaħdem, iżda, sfortunatament, ma kienx.
L-isbaħ ġie għas-salvataġġ spjega janalizza u qal li minbarra t-tħassir tar-rekords fit-tabella fil-mira, hemm ukoll kontroll tal-integrità referenzjali, u fuq waħda mit-tabelli relatati dan il-kontroll ifalli scan sekwenzjali minħabba n-nuqqas ta’ indiċi adattat. Hekk twieldet id-dijanjostika
Problema ħamsa - valur null fl-indiċi
B'mod awtomatiku, Postgres jinkludi valuri nulli f'indiċi btree, iżda ġeneralment mhumiex meħtieġa hemmhekk. Għalhekk, b'diliġenza nipprova nwarrab dawn in-nulls (dijanjostika where <A> is not null
. B'dan il-mod stajt inaqqas id-daqs ta' wieħed mill-indiċi tagħna minn 1877 MB għal 16 KB. U f'wieħed mis-servizzi, id-daqs tad-database naqas b'kollox b'16% (b'4.3 GB f'numri assoluti) minħabba l-esklużjoni ta 'valuri nulli mill-indiċi. Iffrankar enormi fl-ispazju tad-diska b'modifiki sempliċi ħafna. 🙂
Problema sitt - nuqqas ta 'ċwievet primarji
Minħabba n-natura tal-mekkaniżmu
Ġurnata waħda, migrazzjoni waħda mill-isbaħ ħadet u aġġornat ir-rekords kollha f'tabella kbira u użata b'mod attiv. Aħna ltqajna + 100 GB għad-daqs tal-mejda mill-blu. Kienet tal-mistħija, imma d-diżavventuri tagħna ma spiċċawx hemm. Wara li l-awtovakwu fuq din il-mejda intemm 15-il siegħa wara, deher ċar li l-post fiżiku ma kienx se jirritorna. Ma stajniex inwaqqfu s-servizz u nagħmlu VACUUM FULL, għalhekk iddeċidejna li nużaw
Fil-verżjoni tal-librerija 0.1.5 Ġiet miżjuda l-abbiltà li tinġabar data minn nefħa ta 'tabelli u indiċi u tirrispondi għaliha fil-ħin.
Problemi sebgħa u tmienja - indiċi insuffiċjenti u indiċi mhux użati
Iż-żewġ dijanjostiċi li ġejjin huma:
Kif diġà ktibt, nużaw konfigurazzjoni b'diversi repliki, u t-tagħbija tal-qari fuq hosts differenti hija fundamentalment differenti. Bħala riżultat, is-sitwazzjoni tirriżulta li xi tabelli u indiċi fuq xi hosts prattikament ma jintużawx, u għall-analiżi għandek bżonn tiġbor statistika mill-hosts kollha fil-cluster.
Dan l-approċċ ippermetta li nsalvaw diversi għexieren ta 'gigabytes billi neħħew indiċi li qatt ma ntużaw, kif ukoll żid indiċi neqsin għal tabelli li rarament jintużaw.
Bħala konklużjoni
Naturalment, għal kważi d-dijanjostiċi kollha tista 'tikkonfigura
Xi dijanjostiċi jistgħu jsiru f'testijiet funzjonali immedjatament wara t-tnedija tal-migrazzjonijiet tad-database. U din hija forsi waħda mill-aktar karatteristiċi qawwija tal-librerija tiegħi. Eżempju ta 'użu jista' jinstab fi
Jagħmel sens li jsiru kontrolli għal indiċijiet mhux użati jew neqsin, kif ukoll għal bloat, biss fuq database reali. Il-valuri miġbura jistgħu jiġu rreġistrati fi
Verament nittama li pg-index-saħħa se jkun utli u fid-domanda. Tista' wkoll tikkontribwixxi għall-iżvilupp tal-librerija billi tirrapporta problemi li ssib u tissuġġerixxi dijanjostiċi ġodda.
Sors: www.habr.com