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.
Il-waranofsinhar it-tajjeb Jisimni Aleksey. Kif qal Ilya, se nitkellem dwar l-istatistika PostgreSQL.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
pg_stat_bgwriter - Din il-veduta tiddeskrivi l-operat ta' żewġ sottosistemi ta' sfond PostgreSQL: checkpointer
и background writer
.
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
.
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_maxpages
sabiex 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.
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.
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ċċ.
сколько записано 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.
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.
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.
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.
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.
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.
ALTER TABLE table_name SET (fillfactor = 70);
Kif iżżid il-volum hot update
ov? 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.
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.
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
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.
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.
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:
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.
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.
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?
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.
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.
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.
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.
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.
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.
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
._
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.
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.
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.
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.
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.
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.
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.
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.
-
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.
referenzi
Links validi li nstabu fl-artiklu, ibbażati fuqhom, kienu fir-rapport.
Awtur ikteb aktar
Il-Kollezzjonisti tal-Istatistika
Funzjonijiet ta' Amministrazzjoni tas-Sistema
Moduli Contrib
Utilitajiet SQL u eżempji ta' kodiċi sql
Grazzi kollha għall-attenzjoni tagħkom!
Sors: www.habr.com