Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Traskrizzjoni tar-rapport tal-2015 minn Alexey Lesovsky "Għasa fil-fond fl-istatistika interna PostgreSQL"

Ċaħda mill-awtur tar-rapport: Ninnota li dan ir-rapport huwa datat Novembru 2015 – għaddew aktar minn 4 snin u għadda ħafna żmien. Il-verżjoni 9.4 diskussa fir-rapport m'għadhiex appoġġjata. Matul l-aħħar 4 snin, ġew rilaxxati 5 ħarġiet ġodda li fihom dehru ħafna innovazzjonijiet, titjib u bidliet fir-rigward tal-istatistika, u xi wħud mill-materjal huwa skadut u mhux rilevanti. Kif irrevejt, ippruvajt nimmmarka dawn il-postijiet biex ma nqarraqx bil-qarrej. Ma ktibtx mill-ġdid dawn il-postijiet, hemm ħafna minnhom, u bħala riżultat, se jirriżulta rapport kompletament differenti.

Il-PostgreSQL DBMS huwa mekkaniżmu enormi, u dan il-mekkaniżmu jikkonsisti f'ħafna sottosistemi, li x-xogħol ikkoordinat tagħhom jaffettwa direttament il-prestazzjoni tad-DBMS. Waqt it-tħaddim, tinġabar statistika u informazzjoni dwar it-tħaddim tal-komponenti, li jippermettilek tevalwa l-effettività ta 'PostgreSQL u tieħu miżuri biex ittejjeb il-prestazzjoni. Madankollu, hemm ħafna minn din l-informazzjoni u hija ppreżentata f'forma pjuttost simplifikata. L-ipproċessar ta 'din l-informazzjoni u l-interpretazzjoni tagħha xi drabi hija kompitu kompletament mhux trivjali, u ż-"zoo" ta' għodod u utilitajiet jistgħu faċilment iħawdu anke DBA avvanzat.
Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky


Il-waranofsinhar it-tajjeb Jisimni Aleksey. Kif qal Ilya, se nitkellem dwar l-istatistika PostgreSQL.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Statistika tal-attività PostgreSQL. PostgreSQL għandu żewġ statistiċi. Statistika tal-attività, li se tiġi diskussa. U l-istatistika tal-iskedar dwar id-distribuzzjoni tad-dejta. Se nitkellem speċifikament dwar l-istatistika tal-attività PostgreSQL, li tippermettilna niġġudikaw il-prestazzjoni u b'xi mod intejbuha.

Jien ngħidlek kif tuża b'mod effettiv l-istatistika biex issolvi varjetà ta 'problemi li għandek jew jista' jkollok.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

X'mhux se jkun fir-rapport? Fir-rapport, mhux se tmiss l-istatistika tal-iskedar, għax. dan huwa suġġett separat għal rapport separat dwar kif id-dejta tinħażen fid-database u kif il-pjanifikatur tal-mistoqsijiet jieħu idea dwar il-karatteristiċi kwalitattivi u kwantitattivi ta 'din id-dejta.

U mhux se jkun hemm reviżjonijiet ta 'għodda, mhux se nqabbel prodott ma' ieħor. Mhux se jkun hemm reklamar. Ejja qatraha.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Irrid nuruk li l-użu tal-istatistika huwa utli. Huwa meħtieġ. Użaha bla biża’. Kulma għandna bżonn huwa SQL sempliċi u għarfien bażiku tal-SQL.

U nitkellmu dwar liema statistika tagħżel biex issolvi l-problemi.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Jekk inħarsu lejn PostgreSQL u nħaddmu kmand fuq is-sistema operattiva biex naraw il-proċessi, naraw "kaxxa sewda". Se naraw xi proċessi li jagħmlu xi ħaġa, u bl-isem nistgħu bejn wieħed u ieħor nimmaġinaw x'qed jagħmlu hemmhekk, x'qed jagħmlu. Iżda, fil-fatt, din hija kaxxa sewda, ma nistgħux inħarsu ġewwa.

Nistgħu nħarsu lejn it-tagħbija tas-CPU ġewwa top, nistgħu naraw l-utilizzazzjoni tal-memorja minn xi utilitajiet tas-sistema, iżda mhux se nkunu nistgħu nħarsu ġewwa PostgreSQL. Għal dan għandna bżonn għodod oħra.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

U nkompli aktar, ngħidilkom fejn jintefaq il-ħin. Jekk nirrappreżentaw lil PostgreSQL fil-forma ta 'skema bħal din, allura jkun possibbli li twieġeb fejn jintefaq il-ħin. Dawn huma żewġ affarijiet: huwa l-ipproċessar tat-talbiet tal-klijenti mill-applikazzjonijiet u l-kompiti fl-isfond li jwettaq PostgreSQL biex iżommha taħdem.

Jekk nibdew inħarsu lejn ir-rokna tax-xellug ta 'fuq, nistgħu naraw kif it-talbiet tal-klijenti jiġu pproċessati. It-talba tiġi mill-applikazzjoni u tinfetaħ sessjoni tal-klijenti għal aktar xogħol. It-talba tiġi mgħoddija lill-iskeder. Il-pjanifikatur jibni pjan ta' mistoqsija. Jibgħatha aktar għall-eżekuzzjoni. Hemm xi tip ta 'blokk I / O data assoċjati ma' tabelli u indiċi. Id-dejta meħtieġa tinqara mid-diski fil-memorja f'żona speċjali msejħa "shared buffers". Ir-riżultati tal-mistoqsija, jekk huma aġġornamenti, tħassir, huma rreġistrati fir-reġistru tat-tranżazzjonijiet f'WAL. Xi informazzjoni statistika tidħol fil-ġurnal jew il-kollettur tal-istatistika. U r-riżultat tat-talba jingħata lura lill-klijent. Wara dan, il-klijent jista 'jirrepeti kollox b'talba ġdida.

X'għandna bil-kompiti fl-isfond u l-proċessi fl-isfond? Għandna diversi proċessi li jżommu d-database u taħdem f'mod ta 'tħaddim normali. Dawn il-proċessi se jkunu koperti wkoll fir-rapport: dawn huma autovacuum, checkpointer, proċessi relatati mar-replikazzjoni, background writer. Se nmiss fuq kull wieħed minnhom hekk kif nirrapporta.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

X'inhuma l-problemi bl-istatistika?

  • Ħafna informazzjoni. PostgreSQL 9.4 jipprovdi 109 metriċi biex tara d-dejta tal-istatistika. Madankollu, jekk id-database taħżen ħafna tabelli, skemi, databases, allura dawn il-metriċi kollha se jkollhom jiġu mmultiplikati bin-numru korrispondenti ta 'tabelli, databases. Jiġifieri, hemm saħansitra aktar informazzjoni. U huwa faċli ħafna li tegħreq fiha.
  • Il-problema li jmiss hija li l-istatistika hija rappreżentata minn counters. Jekk inħarsu lejn din l-istatistika, se naraw counters dejjem jiżdiedu. U jekk għadda ħafna żmien minn meta l-istatistika ġiet reset, naraw biljuni ta 'valuri. U ma jgħidulna xejn.
  • M'hemm l-ebda storja. Jekk għandek xi tip ta 'falliment, xi ħaġa waqgħet 15-30 minuta ilu, ma tkunx tista' tuża l-istatistika u tara x'ġara 15-30 minuta ilu. Din hija problema.
  • In-nuqqas ta 'għodda mibnija fil-PostgreSQL hija problema. L-iżviluppaturi tal-qalba ma jipprovdu l-ebda utilità. M'għandhom xejn bħal dan. Huma biss jagħtu statistika fid-database. Użaha, agħmel talba għaliha, tkun xi tkun trid, imbagħad agħmel dan.
  • Peress li m'hemm l-ebda għodda mibnija fil-PostgreSQL, dan jikkawża problema oħra. Lottijiet ta 'għodda ta' partijiet terzi. Kull kumpanija li għandha idejn aktar jew inqas diretti qed tipprova tikteb il-programm tagħha stess. U bħala riżultat, il-komunità għandha ħafna għodod li tista 'tuża biex taħdem ma' l-istatistika. U f'xi għodod hemm xi karatteristiċi, f'għodod oħra m'hemm l-ebda karatteristiċi oħra, jew hemm xi karatteristiċi ġodda. U tqum sitwazzjoni li għandek bżonn tuża żewġ, tlieta jew erba 'għodod li jikkoinċidu lil xulxin u għandhom funzjonijiet differenti. Dan huwa tedjanti ħafna.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

X'jirriżulta minn dan? Huwa importanti li tkun tista' tieħu l-istatistika direttament biex ma tiddependix fuq programmi, jew b'xi mod ittejjeb dawn il-programmi lilek innifsek: żid xi funzjonijiet biex tikseb il-benefiċċju tiegħek.

U għandek bżonn għarfien bażiku ta 'SQL. Biex tikseb xi dejta mill-istatistika, trid tagħmel mistoqsijiet SQL, jiġifieri trid tkun taf kif tagħżel, tissieħeb isiru.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

L-istatistika tgħidilna diversi affarijiet. Jistgħu jinqasmu f'kategoriji.

  • L-ewwel kategorija hija l-avvenimenti li jseħħu fid-database. Dan huwa meta xi avveniment iseħħ fid-database: mistoqsija, aċċess għall-mejda, autovacuum, jikkommetti, allura dawn huma kollha avvenimenti. Il-counters li jikkorrispondu għal dawn l-avvenimenti huma inkrementati. U nistgħu nsegwu dawn l-avvenimenti.
  • It-tieni kategorija hija l-proprjetajiet ta 'oġġetti bħal tabelli, databases. Huma għandhom proprjetajiet. Dan huwa d-daqs tat-tabelli. Nistgħu nsegwu t-tkabbir tat-tabelli, it-tkabbir tal-indiċi. Nistgħu naraw bidliet fid-dinamika.
  • U t-tielet kategorija hija l-ħin mgħoddi fuq l-avveniment. It-talba hija avveniment. Għandu l-kejl speċifiku tiegħu ta' tul ta' żmien. Bdejt hawn, spiċċa hawn. Nistgħu nsegwuha. Jew il-ħin tal-qari ta 'blokk minn disk jew kitba. Dawn l-affarijiet huma wkoll tracked.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Is-sorsi tal-istatistika huma ppreżentati kif ġej:

  • Fil-memorja kondiviża (shared buffers) hemm segment għat-tqegħid ta 'dejta statika hemmhekk, hemm ukoll dawk il-counters li huma kontinwament inkrementati meta jseħħu ċerti avvenimenti, jew jinqalgħu xi mumenti fl-operat tad-database.
  • Dawn il-counters kollha mhumiex disponibbli għall-utent u lanqas biss huma disponibbli għall-amministratur. Dawn huma affarijiet ta’ livell baxx. Biex taċċessahom, PostgreSQL jipprovdi interface fil-forma ta 'funzjonijiet SQL. Nistgħu nagħmlu selezzjonijiet magħżula billi tuża dawn il-funzjonijiet u niksbu xi tip ta 'metrika (jew sett ta' metriċi).
  • Madankollu, mhux dejjem ikun konvenjenti li tuża dawn il-funzjonijiet, għalhekk il-funzjonijiet huma l-bażi għall-opinjonijiet (VIEWs). Dawn huma tabelli virtwali li jipprovdu statistika fuq sottosistema speċifika, jew fuq xi sett ta 'avvenimenti fid-database.
  • Dawn il-veduti integrati (VIEWs) huma l-interface ewlenija tal-utent biex taħdem ma 'l-istatistika. Huma disponibbli awtomatikament mingħajr ebda settings addizzjonali, tista 'minnufih tużahom, tara, tieħu informazzjoni minn hemm. U hemm ukoll kontribuzzjonijiet. Il-kontribuzzjonijiet huma uffiċjali. Tista 'tinstalla l-pakkett postgresql-contrib (per eżempju, postgresql94-contrib), tagħbija l-modulu meħtieġ fil-konfigurazzjoni, speċifika l-parametri għalih, terġa' tibda PostgreSQL u tista 'tużah. (Nota. Skont id-distribuzzjoni, f'verżjonijiet riċenti ta' contrib il-pakkett huwa parti mill-pakkett prinċipali).
  • U hemm kontrib mhux uffiċjali. Mhumiex fornuti bid-distribuzzjoni standard PostgreSQL. Għandhom jew jiġu kkompilati jew installati bħala librerija. L-għażliet jistgħu jkunu differenti ħafna, skont dak li ħareġ bih l-iżviluppatur ta’ dan il-kontrib mhux uffiċjali.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Din is-slide turi dawk il-veduti kollha (VIEWs) u xi wħud minn dawk il-funzjonijiet li huma disponibbli f'PostgreSQL 9.4. Kif nistgħu naraw, hemm ħafna minnhom. U huwa pjuttost faċli li titħawwad jekk qed tesperjenzaha għall-ewwel darba.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Madankollu, jekk nieħdu l-istampa ta 'qabel Как тратится время на PostgreSQL u kompatibbli ma 'din il-lista, aħna tikseb din l-istampa. Kull ħsieb (VIEWs), jew kull funzjoni, nistgħu nużaw għal skop jew ieħor biex niksbu l-istatistika xierqa meta jkollna PostgreSQL jaħdem. U diġà nistgħu niksbu xi informazzjoni dwar l-operat tas-subsistema.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

L-ewwel ħaġa li se nħarsu lejha hija pg_stat_database. Kif nistgħu naraw, din hija rappreżentazzjoni. Fiha ħafna informazzjoni. L-aktar informazzjoni varjata. U tagħti għarfien utli ħafna ta 'dak li għandna għaddej fid-database.

X'nistgħu nieħdu minn hemm? Nibdew bl-aktar affarijiet sempliċi.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select
sum(blks_hit)*100/sum(blks_hit+blks_read) as hit_ratio
from pg_stat_database;

L-ewwel ħaġa li nistgħu nħarsu lejha hija l-perċentwal tal-hit tal-cache. Il-perċentwal tal-hit tal-cache huwa metrika utli. Jippermettilek tistma kemm dejta tittieħed mill-cache tal-buffers kondiviżi, u kemm tinqara mid-disk.

Huwa ċar li l-aktar cache hit għandna, l-aħjar. Aħna nevalwaw din il-metrika bħala persentaġġ. U, pereżempju, jekk ikollna persentaġġ ta 'dawn il-hits tal-cache akbar minn 90%, allura dan huwa tajjeb. Jekk tinżel taħt id-90%, allura m'għandniex memorja biżżejjed biex iżżomm il-kap sħun tad-data fil-memorja. U sabiex tuża din id-dejta, PostgreSQL huwa sfurzat jaċċessa d-disk u dan huwa aktar bil-mod milli kieku d-dejta tinqara mill-memorja. U trid taħseb dwar iż-żieda fil-memorja: jew iżżid il-buffers kondiviżi, jew iżżid il-memorja tal-ħadid (RAM).

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select
datname,
(xact_commit*100)/(xact_commit+xact_rollback) as c_ratio,
deadlocks, conflicts,
temp_file, pg_size_pretty(temp_bytes) as temp_size
from pg_stat_database;

X'iktar jista' jittieħed minn din il-preżentazzjoni? Tista 'tara l-anomaliji li jseħħu fid-database. X'inhu muri hawn? Hemm impenji, rollbacks, ħolqien ta 'fajls temporanji, id-daqs tagħhom, deadlocks u kunflitti.

Nistgħu nużaw din it-talba. Dan l-SQL huwa pjuttost sempliċi. U nistgħu naraw din id-dejta għalina nfusna.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

U hawn huma l-valuri tal-limitu. Aħna nħarsu lejn il-proporzjon ta 'commits u rollbacks. Commits hija konferma b'suċċess tat-tranżazzjoni. Rollbacks huwa rollback, jiġifieri t-tranżazzjoni għamlet xi xogħol, tensjoni tad-database, ikkunsidrat xi ħaġa, u mbagħad seħħet falliment, u r-riżultati tat-tranżazzjoni jintremew. i.e. in-numru ta 'rollbacks dejjem jiżdied huwa ħażin. U għandek b'xi mod tevitahom, u teditja l-kodiċi sabiex dan ma jseħħx.

Il-kunflitti huma relatati mar-replikazzjoni. U għandhom jiġu evitati wkoll. Jekk għandek xi mistoqsijiet li jiġu eżegwiti fuq ir-replika u jinqalgħu kunflitti, allura għandek bżonn tanalizza dawn il-kunflitti u tara x'jiġri. Id-dettalji jistgħu jinstabu fir-zkuk. U ssolvi l-kunflitti sabiex it-talbiet għall-applikazzjoni jaħdmu mingħajr żbalji.

Deadlocks hija wkoll sitwazzjoni ħażina. Meta t-talbiet jikkompetu għar-riżorsi, talba waħda aċċessat riżors waħda u ħadet is-serratura, it-tieni talba aċċessat it-tieni riżors u ħadet ukoll is-serratura, u mbagħad iż-żewġ talbiet aċċessaw ir-riżorsi ta 'xulxin u bblukkat stennija għall-proxxmu biex jirrilaxxa l-lock. Din hija wkoll sitwazzjoni problematika. Jeħtieġ li jiġu indirizzati fil-livell tal-kitba mill-ġdid tal-applikazzjonijiet u s-serjetà tal-aċċess għar-riżorsi. U jekk tara li l-imblokk tiegħek qiegħed dejjem jiżdied, trid tħares lejn id-dettalji fir-zkuk, tanalizza s-sitwazzjonijiet li nqalgħu u tara x'inhi l-problema.

Fajls temporanji (temp_files) huma wkoll ħżiena. Meta talba tal-utent ma jkollhiex biżżejjed memorja biex takkomoda d-data operattiva u temporanja, toħloq fajl fuq disk. U l-operazzjonijiet kollha li jista 'jwettaq f'buffer temporanju fil-memorja jibdew iwettqu diġà fuq id-diska. Huwa bil-mod. Dan iżid il-ħin tal-eżekuzzjoni tal-mistoqsija. U l-klijent li bagħat talba lil PostgreSQL se jirċievi tweġiba ftit aktar tard. Jekk dawn l-operazzjonijiet kollha jsiru fil-memorja, Postgres jirrispondi ħafna aktar malajr u l-klijent jistenna inqas.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

pg_stat_bgwriter - Din il-veduta tiddeskrivi l-operat ta' żewġ sottosistemi ta' sfond PostgreSQL: checkpointer и background writer.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Biex tibda, ejja janalizzaw il-punti ta 'kontroll, l-hekk imsejħa. checkpoints. X'inhuma l-punti ta' kontroll? Punt ta' kontroll huwa pożizzjoni fir-reġistru tat-tranżazzjonijiet li tindika li l-bidliet kollha tad-dejta mwettqa fir-reġistru huma sinkronizzati b'suċċess mad-dejta fuq id-diska. Il-proċess, skond il-piż tax-xogħol u l-issettjar, jista 'jkun twil u jikkonsisti l-aktar fis-sinkronizzazzjoni ta' paġni maħmuġin f'buffers kondiviżi b'fajls tad-dejta fuq disk. Għal xiex? Jekk PostgreSQL kien qed jaċċessa d-disk il-ħin kollu u jieħu data minn hemm, u jikteb data fuq kull aċċess, ikun bil-mod. Għalhekk, PostgreSQL għandu segment tal-memorja, li d-daqs tiegħu jiddependi fuq il-parametri fil-konfigurazzjoni. Postgres jalloka data operattiva f'din il-memorja għal aktar ipproċessar jew mistoqsijiet. Fil-każ ta' talbiet għal tibdil ta' data, dawn jinbidlu. U nġibu żewġ verżjonijiet tad-data. Wieħed huwa fil-memorja, l-ieħor huwa fuq disk. U perjodikament għandek bżonn tissinkronizza din id-dejta. Għandna bżonn dak li jinbidel fil-memorja biex jiġi sinkronizzat mad-disk. Dan jeħtieġ punt ta 'kontroll.

Checkpoint jgħaddi minn buffers kondiviżi, jimmarka paġni maħmuġin li huma meħtieġa għal checkpoint. Imbagħad jibda t-tieni pass minn buffers kondiviżi. U l-paġni li huma mmarkati għall-punt ta 'kontroll, huwa diġà jissinkronizzahom. Għalhekk, id-data hija sinkronizzata diġà mad-diska.

Hemm żewġ tipi ta 'punti ta' kontroll. Punt ta 'kontroll wieħed huwa eżegwit fil-timeout. Dan il-punt ta' kontroll huwa utli u tajjeb - checkpoint_timed. U hemm punti ta 'kontroll fuq talba - checkpoint required. Punt ta 'kontroll bħal dan iseħħ meta jkollna rekord ta' dejta kbir ħafna. Aħna rreġistrajna ħafna zkuk tat-tranżazzjonijiet. U PostgreSQL jemmen li jeħtieġ li jissinkronizza dan kollu kemm jista 'jkun malajr, jagħmel punt ta' kontroll u jimxi 'l quddiem.

U jekk ħares lejn l-istatistika pg_stat_bgwriter u ara x'għandek checkpoint_req huwa ħafna akbar minn checkpoint_timed, allura dan huwa ħażin. Għaliex ħażin? Dan ifisser li PostgreSQL jinsab taħt stress kostanti meta jeħtieġ li jikteb data fuq disk. Checkpoint minn timeout huwa inqas stressanti u huwa eżegwit skont l-iskeda interna u, kif kienet, imġebbda maż-żmien. PostgreSQL għandu l-abbiltà li jieqaf fix-xogħol u ma jġorrx is-subsistema tad-disk. Dan huwa utli għal PostgreSQL. U t-talbiet li jiġu esegwiti matul il-punt ta 'kontroll mhux se jesperjenzaw stress mill-fatt li s-subsistema tad-diska hija okkupata.

U hemm tliet parametri biex jaġġustaw il-punt ta 'kontroll:

  • сheckpoint_segments.

  • сheckpoint_timeout.

  • сheckpoint_competion_target.

Huma jippermettulek tikkontrolla l-operat tal-punti ta 'kontroll. Imma mhux se nitkellem fuqhom. L-influwenza tagħhom hija kwistjoni separata.

Twissija: Il-verżjoni 9.4 meqjusa fir-rapport m'għadhiex rilevanti. Fil-verżjonijiet moderni ta 'PostgreSQL, il-parametru checkpoint_segments sostitwiti b'parametri min_wal_size и max_wal_size.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Is-subsistema li jmiss hija l-kittieb tal-isfond - background writer. X'inhu jagħmel? Hija taħdem kontinwament f'linja bla tarf. Tiskennja l-paġni f'buffers kondiviżi u tiflaħ il-paġni maħmuġin li ssib fid-disk. B'dan il-mod, jgħin lill-checkpointer jagħmel inqas xogħol waqt checkpointing.

Għal xiex aktar hu meħtieġ? Jipprovdi għall-ħtieġa għal paġni nodfa f'buffers kondiviżi jekk ikunu meħtieġa f'daqqa (fi kwantitajiet kbar u immedjatament) biex jakkomodaw id-dejta. Ejja ngħidu li qamet sitwazzjoni meta t-talba kienet teħtieġ paġni nodfa u jkunu diġà f'buffers kondiviżi. Postgres backend hu biss jeħodhom u jużahom, m’għandux għalfejn inaddaf xejn hu stess. Imma jekk f'daqqa waħda ma jkunx hemm dawn il-paġni, il-backend jieqaf u jibda jfittex paġni biex jitlaħlaħhom fuq id-disk u jeħodhom għall-bżonnijiet tiegħu stess - li jaffettwa b'mod negattiv il-ħin tat-talba li qed tesegwixxi bħalissa. Jekk tara li għandek parametru maxwritten_clean kbir, dan ifisser li l-kittieb fl-isfond mhux qed jagħmel xogħolu u għandek bżonn iżżid il-parametri bgwriter_lru_maxpagessabiex ikun jista 'jagħmel aktar xogħol f'ċiklu wieħed, ċar aktar paġni.

U indikatur ieħor utli ħafna huwa buffers_backend_fsync. Il-backends ma jagħmlux fsync għax bil-mod. Huma jgħaddu fsync l-IO stack checkpointer. Iċ-checkpointer għandu l-kju tiegħu stess, jipproċessa fsync perjodikament u jissinkronizza paġni fil-memorja ma 'fajls fuq disk. Jekk il-kju tal-checkpointer huwa kbir u mimli, allura l-backend huwa sfurzat jagħmel fsync innifsu u dan inaqqas il-backend, jiġifieri l-klijent jirċievi tweġiba aktar tard milli seta'. Jekk tara li għandek dan il-valur akbar minn żero, allura din hija diġà problema u trid tagħti attenzjoni lill-issettjar tal-kittieb fl-isfond u tevalwa wkoll il-prestazzjoni tas-subsistema tad-diska.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Twissija: _It-test li ġej jiddeskrivi l-fehmiet statistiċi assoċjati mar-replikazzjoni. Il-biċċa l-kbira tal-ismijiet tal-vista u l-funzjoni ngħataw isem ġdid f'Postgres 10. L-essenza tal-ismijiet mill-ġdid kienet li tissostitwixxi xlog fuq wal и location fuq lsn fl-ismijiet tal-funzjonijiet/tara, eċċ. Eżempju partikolari, funzjoni pg_xlog_location_diff() ingħata l-isem ġdid għal pg_wal_lsn_diff()._

Għandna ħafna hawn ukoll. Imma għandna bżonn biss oġġetti relatati mal-post.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Jekk naraw li l-valuri kollha huma ugwali, allura dan huwa ideali u r-replika ma tibqax wara l-kaptan.

Din il-pożizzjoni eżadeċimali hawnhekk hija l-pożizzjoni fir-reġistru tat-tranżazzjonijiet. Hija dejjem tiżdied jekk ikun hemm xi attività fid-database: daħħal, tħassar, eċċ.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

сколько записано xlog в байтах
$ select
pg_xlog_location_diff(pg_current_xlog_location(),'0/00000000');
лаг репликации в байтах
$ select
client_addr,
pg_xlog_location_diff(pg_current_xlog_location(), replay_location)
from pg_stat_replication;
лаг репликации в секундах
$ select
extract(epoch from now() - pg_last_xact_replay_timestamp());

Jekk dawn l-affarijiet huma differenti, allura hemm xi tip ta 'dewmien. Lag huwa d-dewmien tar-replika mill-kaptan, jiġifieri d-dejta tvarja bejn is-servers.

Hemm tliet raġunijiet għad-dewmien:

  • Hija s-subsistema tad-disk li ma tistax timmaniġġja l-kitbiet tas-sinkronizzazzjoni tal-fajls.
  • Dawn huma żbalji possibbli tan-netwerk, jew tagħbija żejda tan-netwerk, meta d-dejta ma jkollhiex ħin biex tilħaq ir-replika u ma tistax tirriproduċiha.
  • U l-proċessur. Il-proċessur huwa każ rari ħafna. U dan rajt darbtejn jew tliet darbiet, imma dan jista’ jiġri wkoll.

U hawn tliet mistoqsijiet li jippermettulna nużaw l-istatistika. Nistgħu nistmaw kemm huwa rreġistrat fir-reġistru tat-tranżazzjonijiet tagħna. Hemm funzjoni bħal din pg_xlog_location_diff u nistgħu nistmaw id-dewmien tar-replikazzjoni f'bytes u sekondi. Aħna nużaw ukoll il-valur minn din il-fehma (VIEWs) għal dan.

Nota: _Minflok pg_xlog_locationdiff(), tista' tuża l-operatur naqqas u naqqas post minn ieħor. Komdu.

B'dewmien, li huwa f'sekondi, hemm mument wieħed. Jekk ma jkun hemm l-ebda attività fuq il-kaptan, it-tranżazzjoni kienet hemm madwar 15-il minuta ilu u m'hemm l-ebda attività, u jekk inħarsu lejn dan id-dewmien fuq ir-replika, se naraw dewmien ta '15-il minuta. Dan ta’ min jiftakar. U jista 'jwassal għal stupor meta inti tara dan id-dewmien.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

pg_stat_all_tables hija ħsieb ieħor utli. Juri statistika fuq it-tabelli. Meta jkollna tabelli fid-database, hemm xi attività magħha, xi azzjonijiet, nistgħu niksbu din l-informazzjoni minn din il-fehma.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select
relname,
pg_size_pretty(pg_relation_size(relname::regclass)) as size,
seq_scan, seq_tup_read,
seq_scan / seq_tup_read as seq_tup_avg
from pg_stat_user_tables
where seq_tup_read > 0 order by 3,4 desc limit 5;

L-ewwel ħaġa li nistgħu nħarsu lejha hija skans sekwenzjali tat-tabella. In-numru nnifsu wara dawn is-siltiet mhux neċessarjament ħażin u ma jindikax li rridu nagħmlu xi ħaġa diġà.

Madankollu, hemm it-tieni metrika - seq_tup_read. Dan huwa n-numru ta' ringieli rritornati mill-iskan sekwenzjali. Jekk in-numru medju jaqbeż 1, 000, 10, 000, allura dan huwa diġà indikatur li jista 'jkollok bżonn tibni indiċi x'imkien sabiex l-aċċessi jkunu permezz ta' indiċi, jew ikun possibbli li jiġu ottimizzati mistoqsijiet li jużaw tali skans sekwenzjali sabiex dan ma jseħħx. kien.

Eżempju sempliċi - ejja ngħidu talba b'OFFSET u LIMITU kbar hija worth it. Pereżempju, 100 ringiela f'tabella jiġu skennjati u wara dan jittieħdu 000 ringiela meħtieġa, u r-ringieli skanjati preċedenti jintremew. Dan huwa wkoll każ ħażin. U talbiet bħal dawn jeħtieġ li jiġu ottimizzati. U hawnhekk hija tali mistoqsija SQL sempliċi li fuqha tista 'taraha u tevalwa n-numri riċevuti.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select
relname,
pg_size_pretty(pg_total_relation_size(relname::regclass)) as
full_size,
pg_size_pretty(pg_relation_size(relname::regclass)) as
table_size,
pg_size_pretty(pg_total_relation_size(relname::regclass) -
pg_relation_size(relname::regclass)) as index_size
from pg_stat_user_tables
order by pg_total_relation_size(relname::regclass) desc limit 10;

Id-daqsijiet tal-mejda jistgħu jinkisbu wkoll billi tuża din it-tabella u billi tuża funzjonijiet addizzjonali pg_total_relation_size(), pg_relation_size().

B'mod ġenerali, hemm metakmandi dt и di, li tista 'tuża fil-PSQL u tara wkoll id-daqsijiet tat-tabella u l-indiċi.

Madankollu, l-użu tal-funzjonijiet jgħinna nħarsu lejn id-daqsijiet tat-tabelli, anke billi nqisu l-indiċi, jew mingħajr ma nqisu l-indiċi, u diġà nagħmlu xi stimi bbażati fuq it-tkabbir tad-database, jiġifieri kif tikber magħna, b’ liema intensità, u diġà tiġbed xi konklużjonijiet dwar l-ottimizzazzjoni tad-daqs.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Ikteb attività. X'inhu rekord? Ejja nħarsu lejn l-operazzjoni UPDATE – l-operazzjoni ta' aġġornament ta' ringieli fit-tabella. Fil-fatt, l-aġġornament huwa żewġ operazzjonijiet (jew saħansitra aktar). Dan qed jiddaħħal verżjoni ringiela ġdida u timmarka l-verżjoni ringiela l-antika bħala skaduta. Aktar tard, l-awtovakwu se jiġi u jnaddaf dawn il-verżjonijiet skaduti tal-linji, immarka dan il-post bħala disponibbli għall-użu mill-ġdid.

Ukoll, l-aġġornament mhuwiex biss dwar l-aġġornament ta 'tabella. Għadu aġġornament tal-indiċi. Jekk għandek ħafna indiċi fuq il-mejda, allura bl-aġġornament, l-indiċijiet kollha li fihom jipparteċipaw l-oqsma aġġornati fil-mistoqsija se jeħtieġu wkoll li jiġu aġġornati. Dawn l-indiċi se jkollhom ukoll verżjonijiet ta’ ringiela skaduti li jridu jitnaddfu.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select
s.relname,
pg_size_pretty(pg_relation_size(relid)),
coalesce(n_tup_ins,0) + 2 * coalesce(n_tup_upd,0) -
coalesce(n_tup_hot_upd,0) + coalesce(n_tup_del,0) AS total_writes,
(coalesce(n_tup_hot_upd,0)::float * 100 / (case when n_tup_upd > 0
then n_tup_upd else 1 end)::float)::numeric(10,2) AS hot_rate,
(select v[1] FROM regexp_matches(reloptions::text,E'fillfactor=(\d+)') as
r(v) limit 1) AS fillfactor
from pg_stat_all_tables s
join pg_class c ON c.oid=relid
order by total_writes desc limit 50;

U minħabba d-disinn tiegħu, UPDATE hija operazzjoni ta 'piż tqil. Iżda jistgħu jsiru aktar faċli. Kul hot updates. Dehru fil-verżjoni PostgreSQL 8.3. U dan x'inhu? Dan huwa aġġornament ħafif li ma jikkawżax li l-indiċi jerġgħu jinbnew. Jiġifieri, aġġornajna r-rekord, iżda r-rekord biss fil-paġna (li jappartjeni għat-tabella) ġie aġġornat, u l-indiċi għadhom jindikaw l-istess rekord fil-paġna. Hemm daqsxejn ta 'loġika ta' xogħol interessanti, meta jiġi vakwu, allura għandu dawn il-ktajjen hot jibni mill-ġdid u kollox ikompli jaħdem mingħajr ma jiġu aġġornati l-indiċi, u kollox jiġri b’inqas ħela ta’ riżorsi.

U meta jkollok n_tup_hot_upd kbir, huwa tajjeb ħafna. Dan ifisser li l-aġġornamenti ħfief jipprevalu u dan huwa orħos għalina f'termini ta 'riżorsi u kollox tajjeb.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

ALTER TABLE table_name SET (fillfactor = 70);

Kif iżżid il-volum hot updateov? Nistgħu nużaw fillfactor. Jiddetermina d-daqs tal-ispazju ħieles riżervat meta timla paġna f'tabella bl-użu ta' INSERTs. Meta l-inserzjonijiet imorru għat-tabella, jimlew kompletament il-paġna, ma jħallux spazju vojt fiha. Imbagħad paġna ġdida hija enfasizzata. Id-data terġa' timtela. U din hija l-imġieba default, fillfactor = 100%.

Nistgħu nissettjaw il-fillfactor għal 70%. Jiġifieri, b'inserzjonijiet, ġiet allokata paġna ġdida, iżda 70% biss tal-paġna kienet mimlija. U fadal 30% f’riżerva. Meta jkollok bżonn tagħmel aġġornament, x'aktarx jiġri fl-istess paġna, u l-verżjoni l-ġdida tar-ringiela tidħol fl-istess paġna. U hot_update se jsir. Dan jagħmilha aktar faċli biex tikteb fuq it-tabelli.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));

Kju awtovakwu. Autovacuum hija tali sottosistema li għaliha hemm ftit statistika f'PostgreSQL. Nistgħu naraw biss fit-tabelli f'pg_stat_activity kemm għandna vacuums bħalissa. Madankollu, huwa diffiċli ħafna li tifhem kemm tabelli fil-kju għandu fuq il-go.

Nota: _Minn Postgres 10, is-sitwazzjoni bit-traċċar tal-vakwu tal-vakwu tjiebet ħafna - dehret il-veduta pg_stat_progressvakwu, li jissimplifika bil-kbir il-kwistjoni tal-monitoraġġ tal-awtovakwu.

Nistgħu nużaw din il-mistoqsija simplifikata. U nistgħu naraw meta għandu jsir il-vakwu. Iżda, kif u meta għandu jibda l-vakwu? Dawn huma l-verżjonijiet antiki tal-kordi li tkellimt dwarhom qabel. L-aġġornament seħħ, il-verżjoni l-ġdida tar-ringiela ġiet imdaħħla. Verżjoni skaduta tas-sekwenza dehret. Tabella pg_stat_user_tables hemm tali parametru n_dead_tup. Juri n-numru ta 'ringieli "mejta". U hekk kif in-numru ta 'ringieli mejta sar aktar minn ċertu limitu, autovacuum jasal fuq il-mejda.

U kif jiġi kkalkulat dan il-limitu? Dan huwa perċentwal speċifiku ħafna tan-numru totali ta' ringieli fit-tabella. Hemm parametru autovacuum_vacuum_scale_factor. Jiddefinixxi l-persentaġġ. Ejja ngħidu 10% + hemm limitu bażi addizzjonali ta '50 linja. U x'jiġri? Meta jkollna aktar ringieli mejta minn "10% + 50" tar-ringieli kollha fit-tabella, aħna npoġġu t-tabella fuq autovacuum.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));

Madankollu, hemm punt wieħed. Limiti bażiċi għall-parametri av_base_thresh и av_scale_factor jistgħu jiġu assenjati individwalment. U, għalhekk, il-limitu mhux se jkun globali, iżda individwali għat-tabella. Għalhekk, biex tikkalkula, hemm bżonn tuża tricks u tricks. U jekk int interessat, tista' tħares lejn l-esperjenza tal-kollegi tagħna minn Avito (il-link fuq is-slide mhix valida u ġiet aġġornata fit-test).

Kitbu għal plugin muninli tqis dawn l-affarijiet. Hemm drapp tas-saqajn fuq żewġ lożor. Iżda jikkunsidra b'mod korrett u pjuttost effettiv jippermettilna nevalwaw fejn għandna bżonn ħafna vakwu għat-tabelli, fejn hemm ftit.

X'nistgħu nagħmlu dwarha? Jekk ikollna kju twil u l-awtovakwu ma jistax ilaħħaq, allura nistgħu nżidu n-numru ta 'ħaddiema tal-vakwu, jew sempliċement nagħmlu l-vakwu aktar aggressivsabiex tqajjem aktar kmieni, tipproċessa t-tabella f'biċċiet żgħar. U b'hekk il-kju se jonqos. - Il-ħaġa prinċipali hawnhekk hija li tissorvelja t-tagħbija fuq id-diski, għaliex. Il-ħaġa tal-vakwu mhix b'xejn, għalkemm bil-miġja ta 'apparati SSD / NVMe, il-problema saret inqas notevoli.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

pg_stat_all_indexes hija statistika dwar l-indiċi. Hija mhix kbira. U nistgħu niksbu informazzjoni dwar l-użu ta 'indiċi minnha. U per eżempju, nistgħu niddeterminaw liema indiċi għandna żejda.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Kif diġà għedt, aġġornament mhux biss jaġġorna t-tabelli, huwa wkoll jaġġorna l-indiċi. Għaldaqstant, jekk ikollna ħafna indiċi fuq il-mejda, allura meta naġġornaw ir-ringieli fit-tabella, l-indiċijiet tal-oqsma indiċjati jeħtieġ ukoll li jiġu aġġornati, u jekk ikollna indiċi mhux użati li għalihom m'hemm l-ebda skans tal-indiċi, allura huma hang magħna bħala saborra. U trid teħles minnhom. Għal dan għandna bżonn għalqa idx_scan. Aħna nħarsu biss lejn in-numru ta 'skans tal-indiċi. Jekk l-indiċi jkollhom żero skans fuq perjodu relattivament twil ta 'ħażna ta' statistika (mill-inqas 2-3 ġimgħat), allura x'aktarx dawn huma indiċi ħżiena, jeħtieġ li neħilsu minnhom.

Nota: Meta tfittex indiċijiet mhux użati fil-każ ta 'clusters ta' replikazzjoni ta' streaming, għandek bżonn tiċċekkja n-nodi kollha tal-cluster, għaliex l-istatistika mhix globali, u jekk l-indiċi ma jintużax fuq il-kaptan, allura jista 'jintuża fuq repliki (jekk ikun hemm tagħbija).

Żewġ links:

https://github.com/dataegret/pg-utils/blob/master/sql/low_used_indexes.sql

http://www.databasesoup.com/2014/05/new-finding-unused-indexes-query.html

Dawn huma eżempji ta' mistoqsijiet aktar avvanzati dwar kif tfittex indiċijiet mhux użati.

It-tieni link hija mistoqsija pjuttost interessanti. Hemm loġika mhux trivjali ħafna hemmhekk. Nirrakkomandaha għal reviżjoni.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

X'iktar għandu jinġabar b'indiċi?

  • L-indiċi mhux użati huma ħżiena.

  • Huma jieħdu spazju.

  • Tnaqqas l-operazzjonijiet ta 'aġġornament.

  • Xogħol żejjed għall-vakwu.

Jekk inneħħu l-indiċi mhux użati, allura nagħmlu d-database aħjar biss.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

L-opinjoni li jmiss hija pg_stat_activity. Dan huwa analogu ta 'l-utilità ps, biss f'PostgreSQL. Jekk ps'ohm tara l-proċessi fis-sistema operattiva, allura pg_stat_activity jurik l-attività ġewwa PostgreSQL.

X'nistgħu nieħdu minn hemm?

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select
count(*)*100/(select current_setting('max_connections')::int)
from pg_stat_activity;

Nistgħu naraw l-attività ġenerali li qed isseħħ fid-database. Nistgħu nagħmlu skjerament ġdid. Kollox sploda hemm, konnessjonijiet ġodda mhumiex aċċettati, żbalji qed jitferrgħu fl-applikazzjoni.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select
client_addr, usename, datname, count(*)
from pg_stat_activity group by 1,2,3 order by 4 desc;

Nistgħu nħaddmu mistoqsija bħal din u naraw il-persentaġġ totali ta 'konnessjonijiet relattiv mal-limitu massimu ta' konnessjoni u naraw min għandna l-aktar konnessjonijiet. U f'dan il-każ partikolari, naraw dak l-utent cron_role fetaħ 508 konnessjonijiet. U ġratlu xi ħaġa. Trid tittrattaha u tara. U huwa pjuttost possibbli li dan huwa xi tip ta 'numru anomalu ta' konnessjonijiet.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Jekk ikollna tagħbija OLTP, il-mistoqsijiet għandhom ikunu veloċi, veloċi ħafna, u m'għandux ikun hemm mistoqsijiet twal. Madankollu, jekk ikun hemm talbiet twal, allura fi żmien qasir m'hemm xejn għalfejn tinkwieta, iżda fit-tul, mistoqsijiet twal jagħmlu ħsara lid-database, iżidu l-effett ta 'nefħa tat-tabelli meta sseħħ il-frammentazzjoni tat-tabella. Kemm mistoqsijiet nefħa kif ukoll twal jeħtieġ li jintremew.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select
client_addr, usename, datname,
clock_timestamp() - xact_start as xact_age,
clock_timestamp() - query_start as query_age,
query
from pg_stat_activity order by xact_start, query_start;

Jekk jogħġbok innota: b'tali talba, nistgħu niddefinixxu talbiet twal u tranżazzjonijiet. Aħna nużaw il-funzjoni clock_timestamp() biex jiddetermina l-ħin tax-xogħol. Talbiet twal li sibna, nistgħu niftakruhom, inwettquhom explain, Ħares lejn il-pjanijiet u b'xi mod ottimizza. Nisparaw it-talbiet twal attwali u ngħixu.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';

Tranżazzjonijiet ħżiena huma inattivi fi tranżazzjonijiet u inattivi fi tranżazzjonijiet (abortiti).

Xi tfisser? It-tranżazzjonijiet għandhom stati multipli. U wieħed minn dawn l-istati jista 'jieħu fi kwalunkwe ħin. Hemm qasam biex tiddefinixxi l-istati state f'din il-fehma. U nużawha biex niddeterminaw l-istat.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';

U, kif għedt hawn fuq, dawn iż-żewġ stati idle fit-transazzjoni u idle fit-transazzjoni (abort) huma ħżiena. X'inhu? Dan meta l-applikazzjoni fetħet tranżazzjoni, għamlet xi azzjonijiet u marret in-negozju tagħha. It-tranżazzjoni tibqa' miftuħa. Hija prekarja, ma jiġri xejn fiha, tieħu konnessjoni, tissakkar fuq ringieli mibdula u potenzjalment xorta żżid il-bloat ta 'tabelli oħra, minħabba l-arkitettura tal-magna transazzjonali Postrges. U tranżazzjonijiet bħal dawn għandhom jiġu sparati wkoll, minħabba li huma ta 'ħsara b'mod ġenerali, fi kwalunkwe każ.

Jekk tara li għandek aktar minn 5-10-20 minnhom fid-database tiegħek, allura trid tinkwieta u tibda tagħmel xi ħaġa magħhom.

Hawnhekk nużaw ukoll għall-ħin tal-kalkolu clock_timestamp(). Nisparaw transazzjonijiet, ottimizzaw l-applikazzjoni.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Kif għedt hawn fuq, serraturi huma meta żewġ tranżazzjonijiet jew aktar jikkompetu għal wieħed jew grupp ta 'riżorsi. Għal dan għandna għalqa waiting b'valur boolean true jew false.

Veru - dan ifisser li l-proċess qed jistenna, jeħtieġ li ssir xi ħaġa. Meta proċess ikun qed jistenna, allura l-klijent li beda l-proċess ikun qed jistenna wkoll. Il-klijent fil-browser joqgħod u jistenna wkoll.

Twissija: _Bidu minn Postgres 9.6, il-qasam waiting imneħħija u mibdula b'żewġ oqsma oħra informattivi wait_event_type и wait_event._

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

X'għandek tagħmel? Jekk tara vera għal żmien twil, allura għandek teħles minn tali talbiet. Aħna biss rimja transazzjonijiet bħal dawn. Aħna niktbu lill-iżviluppaturi dak li jeħtieġ li jiġi ottimizzat b'xi mod sabiex ma jkunx hemm tellieqa għar-riżorsi. U mbagħad l-iżviluppaturi jottimizzaw l-applikazzjoni sabiex dan ma jseħħx.

U każ estrem, iżda potenzjalment mhux fatali huwa okkorrenza ta' deadlocks. Żewġ tranżazzjonijiet aġġornaw żewġ riżorsi, imbagħad jerġgħu jaċċessawhom, diġà għal riżorsi opposti. PostgreSQL f'dan il-każ jieħu u jispara t-tranżazzjoni nnifisha sabiex l-oħra tkun tista 'tkompli taħdem. Din hija sitwazzjoni mejjet u hi ma tifhimx lilha nfisha. Għalhekk, PostgreSQL huwa sfurzat jieħu miżuri estremi.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/c4_06_show_locked_queries.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_95.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_96.sql

http://big-elephants.com/2013-09/exploring-query-locks-in-postgres/

U hawn żewġ mistoqsijiet li jippermettulek issegwi serraturi. Aħna nużaw il-veduta pg_locks, li jippermettilek issegwi serraturi tqal.

U l-ewwel link huwa t-test tat-talba nnifsu. Huwa pjuttost twil.

U t-tieni link huwa artiklu dwar serraturi. Huwa utli li taqra, huwa interessanti ħafna.

Allura x'naraw? Naraw żewġ talbiet. Transazzjoni ma' ALTER TABLE hija tranżazzjoni li timblokka. Beda, iżda ma spiċċatx, u l-applikazzjoni li poġġiet din it-tranżazzjoni qed tagħmel affarijiet oħra x'imkien. U t-tieni talba hija aġġornament. Tistenna li l-alter table tispiċċa qabel tkompli bil-ħidma tagħha.

Hekk nistgħu nsiru nafu min ssakkar lil min, min qed iżomm lil min, u nistgħu nittrattaw dan aktar.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Il-modulu li jmiss huwa pg_stat_statements. Kif għidt, huwa modulu. Biex tużaha, għandek bżonn tagħbija l-librerija tagħha fil-konfigurazzjoni, terġa 'tibda PostgreSQL, tinstalla l-modulu (b'kmand wieħed), u mbagħad ikollna veduta ġdida.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Cреднее время запроса в милисекундах
$ select (sum(total_time) / sum(calls))::numeric(6,3)
from pg_stat_statements;

Самые активно пишущие (в shared_buffers) запросы
$ select query, shared_blks_dirtied
from pg_stat_statements
where shared_blks_dirtied > 0 order by 2 desc;

X'nistgħu nieħdu minn hemm? Jekk nitkellmu dwar affarijiet sempliċi, nistgħu nieħdu l-ħin medju ta 'eżekuzzjoni tal-mistoqsija. Iż-żmien qed jikber, li jfisser li PostgreSQL qed jirrispondi bil-mod u rridu nagħmlu xi ħaġa.

Nistgħu naraw it-tranżazzjonijiet tal-kitba l-aktar attivi fid-database li jbiddlu d-dejta f'buffers kondiviżi. Ara min jaġġorna jew iħassar id-dejta hemmhekk.

U nistgħu nħarsu lejn statistika differenti għal dawn it-talbiet.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

https://github.com/dataegret/pg-utils/blob/master/sql/global_reports/query_stat_total.sql

Aħna pg_stat_statements użati biex jinbnew rapporti. Aħna reset l-istatistika darba kuljum. Ejja nakkumulawha. Qabel ma nissettjaw mill-ġdid l-istatistika d-darba li jmiss, nibnu rapport. Hawnhekk hawn link għar-rapport. Tista' taraha.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

X'qed nagħmlu? Aħna nikkalkulaw l-istatistika ġenerali għall-mistoqsijiet kollha. Imbagħad, għal kull mistoqsija, ngħoddu l-kontribut individwali tagħha għal din l-istatistika ġenerali.

U x’nistgħu naraw? Nistgħu naraw il-ħin totali ta 'eżekuzzjoni tat-talbiet kollha ta' tip partikolari fl-isfond tat-talbiet l-oħra kollha. Nistgħu nħarsu lejn l-użu tas-CPU u l-I/O fir-rigward tal-istampa ġenerali. U diġà biex jottimizzaw dawn it-talbiet. Qed nibnu l-aqwa mistoqsijiet ibbażati fuq dan ir-rapport u diġà qed insibu ikel għal ħsieb dwar x'għandu nottimizzaw.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

X'għandna wara l-kwinti? Għad hemm ftit sottomissjonijiet li ma kkunsidrajtx, għax iż-żmien huwa limitat.

Hemm pgstattuple huwa wkoll modulu addizzjonali mill-pakkett standard tal-kontribuzzjonijiet. Jippermettilek tevalwa bloat imwejjed, hekk imsejħa. frammentazzjoni tal-mejda. U jekk il-frammentazzjoni hija kbira, għandek bżonn tneħħiha, uża għodod differenti. U l-funzjoni pgstattuple jaħdem għal żmien twil. U iktar ma jkun hemm tabelli, iktar se taħdem.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

Il-kontribut li jmiss huwa pg_buffercache. Jippermettilek tispezzjona buffers kondiviżi: kemm huma utilizzati b'mod intensiv u għal liema tabelli buffer pages. U jippermettilek biss li tħares lejn buffers kondiviżi u tevalwa dak li qed jiġri hemmhekk.

Il-modulu li jmiss huwa pgfincore. Jippermettilek twettaq operazzjonijiet ta 'tabella ta' livell baxx permezz ta 'sejħa tas-sistema mincore(), jiġifieri jippermettilek li tgħabbi t-tabella f'buffers kondiviżi, jew iħottuha. U tippermetti, fost affarijiet oħra, li tispezzjona l-cache tal-paġna tas-sistema operattiva, jiġifieri kemm tokkupa t-tabella fil-cache tal-paġna, f'buffers kondiviżi, u sempliċement tippermettilek tevalwa t-tagħbija fuq il-mejda.

Il-modulu li jmiss huwa pg_stat_kcache. Juża wkoll is-sejħa tas-sistema getrusage(). U jesegwixxiha qabel u wara li titwettaq it-talba. U fl-istatistika miksuba, tippermettilna nistmaw kemm it-talba tagħna nefqet fuq disk I / O, jiġifieri, operazzjonijiet mas-sistema tal-fajls u tħares lejn l-użu tal-proċessur. Madankollu, il-modulu huwa żagħżugħ (khe-khe) u għax-xogħol tiegħu jeħtieġ PostgreSQL 9.4 u pg_stat_statements, li semmejt qabel.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

  • Il-ħila li tuża l-istatistika hija utli. M'għandekx bżonn softwer ta' parti terza. Tista 'tfittex, tara, tagħmel xi ħaġa, twettaq.

  • L-użu tal-istatistika huwa faċli, huwa sempliċi SQL. Ġabart talba, ikkumpilatha, bgħattha, ħarist lejha.

  • L-istatistika tgħin biex twieġeb il-mistoqsijiet. Jekk għandek mistoqsijiet, iddur għall-istatistika - ara, iġbed konklużjonijiet, tanalizza r-riżultati.

  • U esperiment. Ħafna talbiet, ħafna dejta. Dejjem tista' tottimizza xi mistoqsija eżistenti. Tista' tagħmel il-verżjoni tiegħek tat-talba li taqbellek aħjar mill-oriġinal u tużaha.

Għaddas fil-fond fl-istatistika interna PostgreSQL. Alexey Lesovsky

referenzi

Links validi li nstabu fl-artiklu, ibbażati fuqhom, kienu fir-rapport.

Awtur ikteb aktar
https://dataegret.com/news-blog (eng)

Il-Kollezzjonisti tal-Istatistika
https://www.postgresql.org/docs/current/monitoring-stats.html

Funzjonijiet ta' Amministrazzjoni tas-Sistema
https://www.postgresql.org/docs/current/functions-admin.html

Moduli Contrib
https://www.postgresql.org/docs/current/pgstatstatements.html
https://www.postgresql.org/docs/current/pgstattuple.html
https://www.postgresql.org/docs/current/pgbuffercache.html
https://github.com/klando/pgfincore
https://github.com/dalibo/pg_stat_kcache

Utilitajiet SQL u eżempji ta' kodiċi sql
https://github.com/dataegret/pg-utils

Grazzi kollha għall-attenzjoni tagħkom!

Sors: www.habr.com

Żid kumment