Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Sengoloa sa tlaleho ea 2015 ke Alexey Lesovsky "Ho teba ka har'a lipalo-palo tsa ka hare tsa PostgreSQL"

Boitlhotlhollo ho tsoa ho mongoli oa tlaleho: Ke hlokomela hore tlaleho ena ke ea November 2015 - lilemo tse fetang 4 li fetile 'me nako e ngata e fetile. Phetolelo ea 9.4 e tšohliloeng tlalehong ha e sa tšehetsoa. Lilemong tse 4 tse fetileng, ho ile ha lokolloa lintlafatso tse 5 tseo ho tsona ho hlahileng lintlafatso tse ngata, ntlafatso le liphetoho mabapi le lipalo-palo, 'me tse ling tsa litaba li siiloe ke nako ebile ha li bohlokoa. Ha ke ntse ke hlahloba, ke lekile ho tšoaea libaka tsena hore ke se ke ka u khelosa 'mali. Ha kea ngola libaka tsena hape, ho na le tse ngata tsa tsona, 'me ka lebaka leo, tlaleho e fapaneng ka ho feletseng e tla hlaha.

PostgreSQL DBMS ke mochine o moholo, 'me mochine ona o na le li-subsystems tse ngata, mosebetsi o kopanetsoeng o amang ts'ebetso ea DBMS ka ho toba. Nakong ea ts'ebetso, lipalo-palo le tlhahisoleseding e mabapi le ts'ebetso ea likarolo li bokelloa, e leng se u lumellang hore u hlahlobe katleho ea PostgreSQL le ho nka mehato ea ho ntlafatsa tshebetso. Leha ho le joalo, ho na le tlhahisoleseling e ngata 'me e hlahisoa ka mokhoa o bonolo. Ho sebetsana le tlhahisoleseding ena le ho e hlalosa ka linako tse ling ke mosebetsi o sa reng letho, 'me "zoo" ea lisebelisoa le lisebelisoa li ka ferekanya habonolo le DBA e tsoetseng pele.
Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky


Lumelang Lebitso la ka ke Aleksey. Joalokaha Ilya a boletse, ke tla bua ka lipalo-palo tsa PostgreSQL.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Lipalopalo tsa mesebetsi ea PostgreSQL. PostgreSQL e na le lipalo-palo tse peli. Lipalopalo tsa mosebetsi, tse tla tšohloa. Le lipalo-palo tsa kemiso mabapi le kabo ea data. Ke tla bua ka ho khetheha ka lipalo-palo tsa mosebetsi oa PostgreSQL, tse re lumellang ho ahlola ts'ebetso le ho e ntlafatsa ka tsela e itseng.

Ke tla u bolella mokhoa oa ho sebelisa lipalo-palo ka katleho ho rarolla mathata a sa tšoaneng ao u nang le 'ona kapa ao u ka bang le' ona.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Ke eng e ke keng ea ba teng tlalehong? Tlalehong, nke ke ka ama lipalo-palo tsa mohlophisi, hobane. ena ke sehlooho se arohaneng bakeng sa tlaleho e arohaneng ea hore na data e bolokoa joang sebakeng sa polokelo ea litaba le hore na moralo oa lipotso o fumana mohopolo oa litšobotsi tsa boleng le bongata ba data ena.

'Me ho ke ke ha e-ba le litlhahlobo tsa lisebelisoa, nke ke ka bapisa sehlahisoa se seng le se seng. Ho ke ke ha ba le papatso. Ha re tloheleng sena.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Ke batla ho u bontša hore ho sebelisa lipalo-palo ho molemo. Ho a hlokahala. E sebelise ntle le tšabo. Seo re se hlokang feela ke SQL e hlakileng le tsebo ea motheo ea SQL.

'Me re tla bua ka hore na ke lipalo-palo life tseo u ka li khethang ho rarolla mathata.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Haeba re sheba PostgreSQL mme re tsamaisa taelo ho sistimi e sebetsang ho sheba lits'ebetso, re tla bona "lebokose le letšo". Re tla bona lits'ebetso tse ling tse etsang ntho e itseng, 'me ka mabitso re ka inahanela seo ba se etsang moo, seo ba se etsang. Empa, ha e le hantle, lena ke lebokose le letšo, re ke ke ra sheba ka hare.

Re ka sheba palo ea CPU top, re ka bona ts'ebeliso ea memori ke lisebelisoa tse ling tsa sistimi, empa re ke ke ra khona ho sheba ka hare ho PostgreSQL. Bakeng sa sena re hloka lisebelisoa tse ling.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

'Me ho tsoela pele ho feta, ke tla u bolella moo nako e sebelisitsoeng teng. Haeba re emela PostgreSQL ka mokhoa oa morero o joalo, joale ho tla khoneha ho araba moo nako e sebelisoang teng. Tsena ke lintho tse peli: ke ts'ebetso ea likopo tsa bareki ho tsoa lits'ebetsong le mesebetsi ea morao-rao eo PostgreSQL e e etsang ho e boloka e sebetsa.

Haeba re qala ho sheba sekhutlong se kaholimo ho le letšehali, re ka bona hore na likopo tsa bareki li sebetsoa joang. Kopo e tsoa ho kopo mme ho buloa seboka sa bareki bakeng sa mosebetsi o mong. Kopo e fetisetsoa ho mohlophisi. Moralo o etsa moralo oa lipotso. E e romella ho feta bakeng sa ts'ebetso. Ho na le mofuta oa data oa block I / O o amanang le litafole le li-index. Lintlha tse hlokahalang li baloa ho tloha ho li-disk ho ea mohopolong sebakeng se khethehileng se bitsoang "shared buffers". Liphetho tsa lipotso, haeba e le liapdeite, tse hlakotsoeng, li tlalehiloe lethathamong la transaction ho WAL. Lintlha tse ling tsa lipalo-palo li kena ho log kapa pokello ea lipalo. 'Me sephetho sa kopo se khutlisetsoa ho mofani. Ka mor'a moo, mofani a ka pheta ntho e 'ngoe le e' ngoe ka kopo e ncha.

Re na le eng ka mesebetsi ea morao-rao le mekhoa ea morao-rao? Re na le lits'ebetso tse 'maloa tse bolokang database e ntse e sebetsa ka mokhoa o tloaelehileng oa ts'ebetso. Mekhoa ena e tla boela e akaretsoe tlalehong: tsena ke autovacuum, checkpointer, mekhoa e amanang le ho pheta-pheta, mongoli oa morao-rao. Ke tla ama e mong le e mong oa bona ha ke ntse ke tlaleha.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Mathata a lipalo ke afe?

  • Boitsebiso bo bongata. PostgreSQL 9.4 e fana ka 109 metrics bakeng sa ho shebella lintlha tsa lipalo. Leha ho le joalo, haeba database e boloka litafole tse ngata, schemas, databases, metrics tsena kaofela li tla tlameha ho atolosoa ka palo e tsamaellanang ea litafole, li-database. Ke hore, ho na le boitsebiso bo eketsehileng. 'Me ho bonolo haholo ho khangoa ke metsi ho eona.
  • Bothata bo latelang ke hore lipalo-palo li emeloa ke li-counters. Haeba re sheba lipalo-palo tsena, re tla bona li-counters li ntse li eketseha. 'Me haeba ho se ho fetile nako e ngata ho tloha ha lipalo-palo li tsosolosoa, re tla bona litekanyetso tse limilione tse likete. Ebile ha ba re bolelle letho.
  • Ha ho na nalane. Haeba u na le mofuta o itseng oa ho hlōleha, ntho e 'ngoe e ile ea oa metsotso e 15-30 e fetileng, u ke ke ua khona ho sebelisa lipalo-palo' me u bone se etsahetseng metsotso e 15-30 e fetileng. Sena ke bothata.
  • Ho haella ha sesebelisoa se hahiloeng ho PostgreSQL ke bothata. Baetsi ba kernel ha ba fane ka thuso leha e le efe. Ha ba na letho le kang leo. Ba mpa ba fana ka lipalo-palo ho database. E sebelise, etsa kopo ho eona, eng kapa eng eo u e batlang, ebe u e etsa.
  • Kaha ha ho na sesebelisoa se hahiloeng ho PostgreSQL, sena se baka bothata bo bong. Lisebelisoa tse ngata tsa mokha oa boraro. Khampani e 'ngoe le e' ngoe e nang le matsoho a tobileng kapa a fokolang e leka ho ngola lenaneo la eona. 'Me ka lebaka leo, sechaba se na le lisebelisoa tse ngata tseo u ka li sebelisang ho sebetsa ka lipalo-palo. 'Me lisebelisoa tse ling ho na le likarolo tse ling, ho lisebelisoa tse ling ha ho na likarolo tse ling, kapa ho na le likarolo tse ling tse ncha. Mme ho hlaha boemo ba hore o hloka ho sebelisa lisebelisoa tse peli, tse tharo, kapa tse 'ne tse kopanang le tse nang le mesebetsi e fapaneng. Sena ha se monate haholo.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Ho latela eng ho tsoa ho see? Ke habohlokoa hore u khone ho nka lipalo-palo ka ho toba e le hore u se ke ua itšetleha ka mananeo, kapa ka tsela e itseng u ntlafatse mananeo ana ka bouena: eketsa mesebetsi e meng ho fumana molemo oa hau.

'Me u hloka tsebo ea motheo ea SQL. Ho fumana lintlha tse ling ho tsoa lipalo-palo, o hloka ho etsa lipotso tsa SQL, ke hore, o hloka ho tseba hore na khetho, ho ikopanya ho etsoa joang.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Lipalo-palo li re bolella lintho tse ’maloa. Li ka aroloa ka lihlopha.

  • Sehlopha sa pele ke diketsahalo tse etsahalang polokelongtshedimosetso. Mona ke ha ketsahalo e 'ngoe e hlaha sebakeng sa polokelo ea litaba: potso, phihlello ea tafole, autovacuum, boitlamo, joale tsena ke liketsahalo tsohle. Libali tse tsamaellanang le liketsahalo tsena lia eketseha. 'Me re ka latela liketsahalo tsena.
  • Sehlopha sa bobeli ke thepa ea lintho tse kang litafole, databases. Ba na le thepa. Bona ke boholo ba litafole. Re ka lekola kholo ea litafole, kholo ea li-index. Re ka bona liphetoho ho dynamics.
  • 'Me sehlopha sa boraro ke nako e sebelisoang ketsahalong. Kopo ke ketsahalo. E na le tekanyo ea eona e khethehileng ea nako. E qadile mona, ya fella mona. Re ka e sala morao. Ekaba nako ea ho bala boloko ho tsoa ho disk kapa ho ngola. Lintho tsena le tsona lia lateloa.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Mehloli ea lipalo-palo e hlahisoa ka tsela e latelang:

  • Mehopolong e arolelanoeng (li-buffers tse arolelanoeng) ho na le karolo ea ho beha data e tsitsitseng moo, ho boetse ho na le li-counters tse ntseng li eketseha ha liketsahalo tse itseng li etsahala, kapa linako tse ling li hlaha ts'ebetsong ea database.
  • Lisebelisoa tsena kaofela ha li fumanehe ho mosebelisi ebile ha li fumanehe le ho motsamaisi. Tsena ke lintho tsa boemo bo tlase. Ho li fihlella, PostgreSQL e fana ka sebopeho sa sebopeho sa mesebetsi ea SQL. Re ka khetha ho sebelisa lits'ebetso tsena mme ra fumana mofuta o itseng oa metric (kapa sete ea metrics).
  • Leha ho le joalo, ha se kamehla ho leng bonolo ho sebelisa mesebetsi ena, kahoo mesebetsi ke motheo oa maikutlo (lipono). Tsena ke litafole tsa sebele tse fanang ka lipalo-palo tsa tsamaiso e itseng e nyenyane, kapa ka lihlopha tse ling tsa liketsahalo polokelong ea boitsebiso.
  • Maikutlo ana a hahelletsoeng ka har'a (lipono) ke sebopeho se ka sehloohong sa basebelisi ba ho sebetsa ka lipalo-palo. Li fumaneha ka mokhoa o ikhethileng ntle le litlhophiso tse ling, u ka li sebelisa hang-hang, shebella, nka tlhahisoleseling ho tsoa moo. 'Me ho boetse ho na le litlatsetso. Menehelo e molaong. U ka kenya sephutheloana sa postgresql-contrib (mohlala, postgresql94-contrib), kenya mojule o hlokahalang ho tlhophiso, u hlalose maemo a eona, qala PostgreSQL hape 'me u ka e sebelisa. (Hlokomela. Ho itšetlehile ka kabo, liphetolelong tsa morao-rao tsa contrib sephutheloana ke karolo ea sephutheloana se seholo).
  • Mme ho na le litlatsetso tse seng molaong. Ha li fanoe ka kabo e tloaelehileng ea PostgreSQL. Li tlameha ho hlophisoa kapa ho kengoa e le laebrari. Likhetho li ka fapana haholo, ho ipapisitse le hore na moqapi oa tlatsetso ena e seng ea semmuso o hlahisitse eng.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Selaete sena se hlahisa maikutlo ao kaofela (lipono) le tse ling tsa mesebetsi e fumanehang ho PostgreSQL 9.4. Joalokaha re bona, ho na le tse ngata tsa tsona. 'Me ho bonolo haholo ho ferekana haeba u qala ho ba le eona.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Leha ho le joalo, haeba re nka setšoantšo se fetileng Как тратится время на PostgreSQL 'me e lumellana le lenane lena, re fumana setšoantšo sena. Pono e 'ngoe le e' ngoe (lipono), kapa mosebetsi o mong le o mong, re ka o sebelisa molemong o mong kapa o mong ho fumana lipalo-palo tse nepahetseng ha PostgreSQL e sebetsa. Mme re se re ka fumana leseli mabapi le ts'ebetso ea subsystem.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Ntho ea pele eo re tla e sheba ke pg_stat_database. Joalokaha re bona, sena ke setšoantšo. E na le boitsebiso bo bongata. Boitsebiso bo fapaneng ka ho fetisisa. 'Me e fana ka tsebo e molemo haholo ea seo re se etsang ho database.

Re ka nka eng ho tloha moo? Ha re qaleng ka lintho tse bonolo ka ho fetisisa.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

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

Ntho ea pele eo re ka e shebang ke "cache hit percentage". Cache hit percentage ke metric e sebetsang. E u lumella ho hakanya hore na data e nkiloeng ho cache e arolelanoang ea li-buffers, le hore na ho baloa bokae ho disk.

Ho hlakile hore ha re na le cache e eketsehileng, ho ba betere. Re lekola metric ena e le liperesente. 'Me, ho etsa mohlala, haeba re na le liperesente tsa cache tsena tse otlang tse fetang 90%, joale sena se molemo. Haeba e theoha ka tlase ho 90%, joale ha re na mohopolo o lekaneng ho boloka hlooho e chesang ea data mohopolong. 'Me molemong oa ho sebelisa data ena, PostgreSQL e qobelloa ho fihlella disk mme sena se lieha ho feta ha data e ne e baloa ho tsoa mohopolong. Mme o hloka ho nahana ka ho eketsa mohopolo: ho eketsa li-buffers tse arolelanoang, kapa ho eketsa mohopolo oa tšepe (RAM).

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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;

Ke eng hape e ka nkuoang tlhahisong ee? U ka bona li-anomalies tse hlahang ho database. Ho bontšoa eng moo? Ho na le li-commit, rollbacks, tlhahiso ea lifaele tsa nakoana, boholo ba tsona, li-deadlocks le likhohlano.

Re ka sebelisa kopo ena. SQL ena e bonolo haholo. Mme re ka iponela data ena.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

'Me mona ke litekanyetso tsa litekanyetso. Re sheba karo-karolelano ea li-commit le li-rollbacks. Boitlamo ke netefatso e atlehileng ea thekisetsano. Rollbacks ke rollback, ke hore, transaction e ile ea etsa mosebetsi o itseng, ea senya database, ea nahana ka ntho e itseng, 'me joale ho hlōleha ho etsahala,' me liphello tsa transaction lia lahloa. i.e. palo ea li-rollbacks tse ntseng li eketseha khafetsa li mpe. 'Me u lokela ho ba qoba ka tsela e itseng,' me u fetole khoutu e le hore sena se se ke sa etsahala.

Likhohlano li amana le ho ikatisa. 'Me le tsona li lokela ho qojoa. Haeba u na le lipotso tse entsoeng setšoantšong, 'me likhohlano li hlaha, joale u lokela ho sekaseka likhohlano tsena 'me u bone se etsahalang. Lintlha li ka fumanoa ka har'a li-log. Le ho rarolla likhohlano e le hore likopo tsa kopo li sebetse ntle le liphoso.

Li-Deadlocks le tsona ke boemo bo bobe. Ha likopo li qothisana lehlokoa bakeng sa lisebelisoa, kopo e le 'ngoe e ile ea fumana mohloli o le mong' me ea nka senotlolo, kopo ea bobeli e ile ea fumana mohloli oa bobeli 'me ea boela ea nka senotlolo, eaba likōpo ka bobeli li fumana lisebelisoa tsa e mong le ho thibela ho emela moahelani hore a lokolle senotlolo. Hona hape ke boemo bo nang le mathata. Li hloka ho rarolloa maemong a ho ngola likopo hape le ho kenyelletsa phihlello ea lisebelisoa. 'Me haeba u bona hore li-deadlocks tsa hau li ntse li eketseha, u lokela ho sheba lintlha tse ka har'a li-log, u hlahlobe maemo a hlahileng' me u bone hore na bothata ke bofe.

Lifaele tsa nakoana (temp_files) le tsona li mpe. Ha kopo ea mosebelisi e se na mohopolo o lekaneng oa ho amohela data ea ts'ebetso, ea nakoana, e etsa faele ho disk. 'Me lits'ebetso tsohle tseo a neng a ka li etsa ka buffer ea nakoana mohopolong, o qala ho li etsa ka disk. E ea lieha. Sena se eketsa nako ea ho botsa lipotso. Mme moreki ea rometseng kopo ho PostgreSQL o tla fumana karabo hamorao. Haeba lits'ebetso tsena kaofela li etsoa ka mohopolo, Postgres e tla arabela kapele mme moreki o tla ema hanyane.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

pg_stat_bgwriter - Pono ena e hlalosa ts'ebetso ea li-subsystem tse peli tsa morao-rao tsa PostgreSQL: checkpointer и background writer.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Ho qala, a re hlahlobeng lintlha tsa taolo, tse bitsoang. checkpoints. Li-checkpoints ke eng? Sebaka sa ho hlahloba ke boemo bo ka har'a log ea transaction e bontšang hore liphetoho tsohle tsa data tse entsoeng ka har'a log li lumellana ka katleho le data e ho disk. Ts'ebetso, ho ipapisitse le boima ba mosebetsi le litlhophiso, e ka ba telele mme haholo e kenyelletsa ho hokahanya maqephe a litšila ka har'a li-buffer tse arolelanoang le lifaele tsa data ho disk. E etselitsoe eng? Haeba PostgreSQL e ne e fihlella disk ka linako tsohle mme e nka data ho tsoa moo, le ho ngola data ho phihlello ka 'ngoe, e ne e tla lieha. Ka hona, PostgreSQL e na le karolo ea memori, eo boholo ba eona e itšetlehileng ka li-parameter ho tlhophiso. Postgres e fana ka data ea ts'ebetso mohopolong ona bakeng sa ts'ebetso e tsoelang pele kapa ho botsa. Tabeng ea likopo tsa phetoho ea data, lia fetoloa. 'Me re fumana liphetolelo tse peli tsa data. E 'ngoe e ho memori, e' ngoe e ho disk. Mme nako le nako o hloka ho hokahanya data ena. Re hloka se fetotsoeng mohopolong hore se hokahantsoe le disk. Sena se hloka sebaka sa tlhahlobo.

Checkpoint e feta har'a li-buffers tse arolelanoang, e tšoaea maqephe a litšila ao a a hlokehang bakeng sa tlhahlobo. Ebe e qala ho feta ha bobeli ho li-buffers tse arolelanoang. Le maqephe a tšoailoeng bakeng sa tlhahlobo, o se a ntse a a hokahanya. Ka hona, data e se e kopantsoe le disk.

Ho na le mefuta e 'meli ea lintlha tsa taolo. Sebaka se le seng sa tlhahlobo se etsoa ha nako e felile. Sebaka sena sa ho hlahloba se molemo ebile se molemo - checkpoint_timed. 'Me ho na le li-checkpoints tse batloang - checkpoint required. Tlhahlobo e joalo e etsahala ha re e-na le tlaleho e kholo haholo ea data. Re rekotile lintlha tse ngata tsa transaction. 'Me PostgreSQL e lumela hore e hloka ho hokahanya tsena tsohle kapele kamoo ho ka khonehang, ho etsa tlhahlobo le ho tsoela pele.

'Me haeba u ne u sheba lipalo-palo pg_stat_bgwriter mme o bone seo o nang le sona checkpoint_req e kholo ho feta checkpoint_timed, joale sena se fosahetse. Hobaneng ho le hobe? Sena se bolela hore PostgreSQL e tlas'a khatello ea kamehla ha e hloka ho ngola data ho disk. Checkpoint by timeout ha e na khatello ea maikutlo 'me e etsoa ho ea ka kemiso ea ka hare,' me, ka tsela ea tšoantšetso, e otlolloa ka nako. PostgreSQL e na le bokhoni ba ho khefutsa mosebetsing le ho se khathatse tsamaiso ea disk. Sena se na le thuso bakeng sa PostgreSQL. 'Me likōpo tse etsoang nakong ea tlhahlobo li ke ke tsa ba le khatello ea kelello ea hore disk subsystem e phathahane.

'Me ho na le li-parameter tse tharo tsa ho lokisa sebaka sa ho hlahloba:

  • сheckpoint_segments.

  • сheckpoint_timeout.

  • сheckpoint_competion_target.

Li u lumella ho laola ts'ebetso ea lintlha tsa taolo. Empa nke ke ka lula ke nahana ka tsona. Tšusumetso ea bona ke taba e fapaneng.

Tlhokomeliso: Mofuta oa 9.4 o shebiloeng tlalehong ha o sa sebetsa. Liphetolelong tsa morao-rao tsa PostgreSQL, parameter checkpoint_segments nkeloa sebaka ke liparamente min_wal_size и max_wal_size.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Subsystem e latelang ke mongoli oa bokamorao − background writer. O etsang? E lula e matha ka mokhoa o sa feleng. E hlahloba maqephe ho li-buffers tse arolelanoang ebe e hlakola maqephe a litšila ao e a fumanang ho disk. Ka tsela ena, e thusa "checkpointer" ho etsa mosebetsi o fokolang nakong ea tlhahlobo.

O hlokeha eng hape? E fana ka tlhokahalo ea maqephe a hloekileng ka har'a li-buffers tse arolelanoang haeba li hlokahala ka tšohanyetso (ka bongata le hang-hang) ho amohela data. Ha re re ho hlahile boemo ha kopo e hloka maqephe a hloekileng 'me a se a ntse a le ka har'a li-buffers tse arolelanoang. Li-postgres backend o a di nka feela mme a di sebedise, ha ho hlokahale hore a hlwekise letho ka boyena. Empa haeba ka tšohanyetso ho se na maqephe a joalo, backend e emisa 'me e qala ho batla maqephe ho a sutumelletsa ho disk le ho a nka bakeng sa litlhoko tsa eona - e amang hampe nako ea kopo e ntseng e etsoa hona joale. Haeba u bona hore u na le parameter maxwritten_clean e kholo, sena se bolela hore mongoli oa morao ha a etse mosebetsi oa hae mme o hloka ho eketsa litekanyetso bgwriter_lru_maxpagese le hore a ka etsa mosebetsi o mongata oa potoloho e le ’ngoe, a hlakise maqephe a mang.

'Me pontšo e' ngoe ea bohlokoa haholo ke buffers_backend_fsync. Li-backend ha li etse fsync hobane li lieha. Ba fetisa fsync holima IO stack checkpointer. Checkpointer e na le queue ea eona, nako le nako e sebetsa fsync le ho hokahanya maqephe a mohopolong le lifaele tse disk. Haeba mokoloko oa li-checkpointer o le moholo ebile o tletse, joale mokokotlo o qobelloa ho iketsetsa fsync 'me sena se liehisa backend., ke hore moreki o tla fumana karabo hamorao ho feta kamoo e neng e ka khona. Haeba u bona hore u na le boleng bona bo boholo ho feta zero, joale sena se se se ntse se le bothata le o hloka ho ela hloko litlhophiso tsa sengoli sa morao-rao le ho lekola ts'ebetso ea disk subsystem.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Tlhokomeliso: _Sengoloa se latelang se hlalosa maikutlo a lipalo-palo a amanang le phetisetso. Bongata ba mabitso a pono le tšebetso a rehiloe bocha ho Postgres 10. Moko oa ho reha mabitso e ne e le ho nkela sebaka. xlog mabapi le wal и location mabapi le lsn ka mabitso a tshebetso/sheba, jj. Mohlala o khethehileng, mosebetsi pg_xlog_location_diff() e ile ea rehoa ho pg_wal_lsn_diff()._

Le rona re na le tse ngata mona. Empa re hloka feela lintho tse amanang le sebaka.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Haeba re bona hore litekanyetso tsohle lia lekana, joale sena se nepahetse 'me setšoantšo ha se salle morao ho mong'a sona.

Boemo bona ba hexadecimal mona ke boemo bo ho log log ea transaction. E lula e eketseha haeba ho na le ts'ebetso ho database: ho kenya, ho hlakola, joalo-joalo.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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());

Haeba lintho tsena li fapane, joale ho na le mofuta o itseng oa lag. Lag ke sekhahla sa replica ho tsoa ho master, ke hore, data e fapana lipakeng tsa li-server.

Ho na le mabaka a mararo a tieho:

  • Ke disk subsystem e sa khoneng ho sebetsana le sync ea lifaele.
  • Tsena ke liphoso tse ka khonehang tsa marang-rang, kapa marang-rang a mangata, ha data e se na nako ea ho fihla ho replica 'me e sitoa ho e hlahisa hape.
  • Le processor. The processor ke nyeoe e sa tloaelehang haholo. Mme ke bone seo makgetlo a mabedi kapa a mararo, empa seo se ka etsahala le sona.

Mona ke lipotso tse tharo tse re lumellang ho sebelisa lipalo-palo. Re ka hakanya hore na ho tlalehiloe bokae tlalehong ea rona ea transaction. Ho na le ts'ebetso e joalo pg_xlog_location_diff 'me re ka hakanya hore ho na le nako ea ho ikatisa ka li-byte le metsotsoana. Re boetse re sebelisa boleng bo tsoang ponong ena (maikutlo) bakeng sa sena.

Ela hloko: _Sebakeng sa pg_xlog_locationdiff () mosebetsi, o ka sebelisa opareitara ea ho tlosa le ho tlosa sebaka se seng ho se seng. E phutholohile.

Ka lag, e leng ka metsotsoana, ho na le motsotso o le mong. Haeba ho se na ts'ebetso ho mong'a ntlo, thekiso e ne e le teng hoo e ka bang metsotso e 15 e fetileng mme ha ho na ts'ebetso, 'me ha re ka sheba lekhalo lena ho replica, re tla bona nako ea metsotso e 15. Sena se lokela ho hopoloa. 'Me e ka lebisa ho tsieleha ha u shebile nako ena.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

pg_stat_all_tables ke pono e 'ngoe ea bohlokoa. E bontša lipalo-palo litafoleng. Ha re e-na le litafole ho database, ho na le ts'ebetso e itseng ka eona, liketso tse ling, re ka fumana boitsebiso bona ponong ena.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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;

Ntho ea pele eo re ka e shebang ke sequential table scans. Palo ka boeona ka mor'a litemana tsena ha e hlile ha e mpe 'me ha e bontše hore ho hlokahala hore re etse ho hong.

Leha ho le joalo, ho na le metric ea bobeli - seq_tup_read. Ena ke palo ea mela e khutlisitsoeng ho tsoa tlhahlobong ea tatellano. Haeba palo e tloaelehileng e feta 1, 000, 10, 000, joale sena e se e ntse e le sesupo sa hore u ka hloka ho theha index kae-kae e le hore li-accessions li be ka index, kapa ho ka khoneha ho ntlafatsa lipotso tse sebelisang li-scans tse joalo tse latellanang. sena ha se etsahale.

Mohlala o bonolo - ha re re kopo e nang le OFFSET e kholo mme LIMIT e bohlokoa. Ka mohlala, mela e 100 tafoleng ea hlahlojoa 'me ka mor'a moo ho nkoa mela e hlokahalang e 000,' me mela e fetileng e hlahlobiloeng ea lahloa. Ena le eona ke nyeoe e mpe. 'Me likopo tse joalo li hloka ho ntlafatsoa. 'Me mona ke potso e bonolo ea SQL, eo u ka e bonang le ho hlahloba linomoro tse amoheloang.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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;

Litafole tsa litafole le tsona li ka fumanoa ho sebelisoa tafole ena le ho sebelisa mesebetsi e eketsehileng pg_total_relation_size(), pg_relation_size().

Ka kakaretso, ho na le metacommands dt и di, eo u ka e sebelisang ho PSQL hape u bona litafole le boholo ba index.

Leha ho le joalo, ts'ebeliso ea mesebetsi e re thusa ho sheba boholo ba litafole, esita le ho ela hloko li-index, kapa ntle le ho ela hloko li-index, 'me re se re ntse re etsa likhakanyo tse ling tse itšetlehileng ka kholo ea database, ke hore na e hōla joang le rona. matla hakae, 'me u se u ntse u etsa liqeto mabapi le ho ntlafatsa boholo.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Ngola ketsahalo. Rekoto ke eng? Ha re shebeng opereishene UPDATE - ts'ebetso ea mela e nchafatsang tafoleng. Ebile, ntlafatso ke ts'ebetso tse peli (kapa ho feta). Sena ke ho kenya mofuta o mocha oa mela le ho tšoaea mofuta oa khale oa mola e le oa khale. Hamorao, autovacuum e tla tla 'me e hloekise mefuta ena ea khale, tšoaea sebaka sena hore se teng bakeng sa ho sebelisoa hape.

Hape, ntlafatso ha se feela ho ntlafatsa tafole. E ntse e le ntlafatso ea index. Haeba u na le li-index tse ngata tafoleng, joale ka ntlafatso, li-index tsohle tseo masimo a nchafalitsoeng ho tsona a nkang karolo le tsona li tla hloka ho ntlafatsoa. Li-index tsena le tsona li tla ba le mefuta ea mela e sa sebetseng e tla hloka ho hloekisoa.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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;

Mme ka lebaka la moralo oa eona, UPDATE ke ts'ebetso e boima. Empa li ka nolofalloa. Ja hot updates. Li hlahile ho PostgreSQL version 8.3. Hona ke eng? Ena ke ntlafatso e bobebe e sa etse hore li-index li hahuoe bocha. Ke hore, re ntlafalitse rekoto, empa rekoto e leqepheng (eo e leng ea tafole) e ntlafalitsoe, 'me li-index li ntse li supa tlaleho e tšoanang leqepheng. Ho na le mohopolo o mong o khahlisang oa mosebetsi, ha sekheo se fihla, se na le liketane tsena hot e tsosolosa 'me ntho e' ngoe le e 'ngoe e tsoela pele ho sebetsa ntle le ho ntlafatsa li-index,' me ntho e 'ngoe le e' ngoe e etsahala ka tšenyo e fokolang ea lisebelisoa.

Mme ha o na le n_tup_hot_upd e kholo, e ntle haholo. Sena se bolela hore lintlafatso tse bobebe lia rena 'me sena se theko e tlase ho rona mabapi le lisebelisoa mme tsohle li hantle.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

ALTER TABLE table_name SET (fillfactor = 70);

Mokhoa oa ho eketsa molumo hot updateov? Re ka sebelisa fillfactor. E etsa qeto ea boholo ba sebaka sa mahala se boloketsoeng ha u tlatsa leqephe tafoleng u sebelisa li-INSERTs. Ha ho kenngoa ho ea tafoleng, ho tlatsa leqephe ka ho feletseng, u se ke ua siea sebaka se se nang letho ho eona. Ebe leqephe le lecha le totobatsoa. Lintlha li tlatsitsoe hape. Mme ona ke boits'oaro bo sa feleng, fillfactor = 100%.

Re ka beha fillfactor ho 70%. Ke hore, ka ho kenya, leqephe le lecha le ile la abeloa, empa ke 70% feela ea leqephe le neng le tlatsitsoe. Mme re na le 30% e setseng sebakeng sa polokelo. Ha o hloka ho etsa ntlafatso, e tla etsahala leqepheng le le leng, 'me mofuta o mocha oa mola o tla lekana leqepheng le le leng. Mme hot_update e tla etswa. Sena se etsa hore ho be bonolo ho ngola litafoleng.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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));

Autovacuum queuum. Autovacuum ke subsystem e joalo eo ho nang le lipalo-palo tse fokolang haholo ho PostgreSQL. Re ka bona feela litafoleng ho pg_stat_activity hore na re na le li-vacuum tse kae hajoale. Leha ho le joalo, ho thata haholo ho utloisisa hore na ho na le litafole tse kae moleng ha u ntse u tsamaea.

Ela hloko: _Ho tloha ha Postgres 10, boemo ba ho latella vacuum vacuum bo ntlafetse haholo - pono ea pg_stat_progress e hlahile.vacuum, e nolofatsang taba ea autovacuum monitoring haholo.

Re ka sebelisa potso ena e bonolo. 'Me re khona ho bona hore na vacuum e lokela ho etsoa neng. Empa, vacuum e lokela ho qala joang hona neng? Tsena ke liphetolelo tsa khale tsa likhoele tseo ke buileng ka tsona pejana. Ntlafatso e etsahetse, mofuta o mocha oa mola o kentsoe. Ho hlahile mofuta oa khale oa khoele. Tafole pg_stat_user_tables ho na le parameter e joalo n_dead_tup. E bontša palo ea mela e "shoeleng". 'Me hang ha palo ea mela e shoeleng e se e feta moeli o itseng, autovacuum e tla tla tafoleng.

Hona moeli oo o baloa joang? Ena ke peresente e khethehileng haholo ea kakaretso ea mela e tafoleng. Ho na le parameter autovacuum_vacuum_scale_factor. E hlalosa peresente. Ha re re 10% + ho na le moeli o eketsehileng oa mela e 50. Mme ho etsahalang? Ha re e-na le mela e mengata e shoeleng ho feta "10% + 50" ea mela eohle e ka har'a tafole, re beha tafole holim'a autovacuum.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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));

Leha ho le joalo, ho na le ntlha e le 'ngoe. Mehato ea motheo ea li-parameter av_base_thresh и av_scale_factor e ka abeloa motho ka mong. 'Me, ka hona, monyako e ke ke ea e-ba oa lefatše lohle, empa ke motho ka mong bakeng sa tafole. Ka hona, ho bala, moo o hloka ho sebelisa maqheka le maqheka. 'Me haeba u thahasella, u ka sheba phihlelo ea basebetsi-'moho le rona ho tloha Avito (sehokelo sa slide se fosahetse ebile se ntlafalitsoe mongolong).

Ba ngotse bakeng sa plugin ea bohlokoaseo se ela hloko dintho tsena. Ho na le lesela la maoto maqepheng a mabeli. Empa o nahana ka nepo le ka mokhoa o atlehileng o re lumella ho lekola moo re hlokang sekheo se sengata bakeng sa litafole moo ho fokolang.

Re ka etsa’ng ka eona? Haeba re na le mola o molelele mme autovacuum e sa khone ho sebetsana le boemo, re ka eketsa palo ea basebetsi ba vacuum, kapa ra etsa hore vacuum e be mabifi le ho feta.e le hore e qale pejana, e sebetsana le tafole ka likotoana tse nyane. 'Me ka tsela eo, palo e tla fokotseha. - Ntho e ka sehloohong mona ke ho shebella mojaro ho li-disk, hobane. Ntho ea vacuum ha e lefelloe, leha ka ho fihla ha lisebelisoa tsa SSD / NVMe, bothata bo se bo sa bonahale.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

pg_stat_all_indexes ke lipalo-palo ho li-index. Ha a moholo. Mme re ka fumana tlhahisoleseling mabapi le tšebeliso ea li-index ho eona. 'Me mohlala, re ka tseba hore na re na le li-index life tse eketsehileng.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Joalokaha ke se ke boletse, ho ntlafatsa ha se feela ho ntlafatsa litafole, empa hape e ntlafatsa li-index. Ka hona, haeba re na le li-index tse ngata tafoleng, joale ha u nchafatsa mela e tafoleng, li-index tsa masimo a indexed le tsona li hloka ho ntlafatsoa, ​​​​le haeba re na le li-index tse sa sebelisoeng tseo ho tsona ho se nang li-index, joale li lula le rona joalo ka ballast. 'Me u lokela ho li tlosa. Bakeng sa sena re hloka tšimo idx_scan. Re sheba feela palo ea li-index scans. Haeba li-index li na le lisebelisoa tsa zero ka nako e telele ea polokelo ea lipalo-palo (bonyane libeke tse 2-3), joale mohlomong tsena ke li-index tse mpe, re hloka ho li tlosa.

Ela hloko: Ha u batla li-index tse sa sebelisoeng molemong oa lihlopha tsa ho pheta-pheta, u lokela ho hlahloba li-node tsohle tsa sehlopha, hobane lipalo-palo ha li lefats'e, 'me haeba index e sa sebelisoe ho monghali, joale e ka sebelisoa ho replicas (haeba ho na le mojaro).

Lihokelo tse peli:

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

Ena ke mehlala ea lipotso e tsoetseng pele ea ho batla li-index tse sa sebelisoeng.

Sehokelo sa bobeli ke potso e khahlisang. Ho na le logic e sa reng letho ho eona. Ke e khothalletsa hore e hlahlojoe.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Ke eng hape e lokelang ho akaretsoa ka li-index?

  • Li-index tse sa sebelisoeng li mpe.

  • Ba nka sebaka.

  • Fokotsa ts'ebetso ea ntlafatso.

  • Mosebetsi o eketsehileng bakeng sa vacuum.

Haeba re tlosa li-index tse sa sebelisoeng, joale re tla etsa hore database e be betere.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Pono e latelang ke pg_stat_activity. Ena ke analogue ea lisebelisoa ps, feela ka PostgreSQL. Haeba ps'Ohm o shebella lits'ebetso tsa sistimi e sebetsang, joale pg_stat_activity e tla u bontša ts'ebetso ka hare ho PostgreSQL.

Re ka nka eng ho tloha moo?

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

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

Re ka bona ts'ebetso e akaretsang e etsahalang ho database. Re ka etsa thomello e ncha. Ntho e 'ngoe le e' ngoe e phatlohile moo, likhokahano tse ncha ha li amoheloe, liphoso li ntse li tšoloha ka har'a kopo.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

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

Re ka botsa potso e kang ena mme ra bona kakaretso ea liperesente tsa likhokahano tse amanang le moeli o moholo oa khokahanyo le ho bona hore na re na le likhokahano life haholo. 'Me tabeng ena e fanoeng, re bona mosebedisi eo cron_role e butse likhokahano tse 508. Mme ho ile ha etsahala ntho e nngwe ho yena. U hloka ho sebetsana le eona 'me u bone. Mme ho ka etsahala hore ena ke mofuta o mong oa palo e makatsang ea likhokahano.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Haeba re na le moroalo oa OLTP, lipotso li lokela ho ba kapele, kapele haholo, 'me ha hoa lokela ho ba le lipotso tse telele. Leha ho le joalo, haeba ho na le likōpo tse telele, joale ka nako e khutšoanyane ha ho letho leo u ka tšoenyehang ka lona, ​​empa ha nako e ntse e ea, lipotso tse telele li lematsa database, li eketsa phello ea bloat ea litafole ha ho arohana ha tafole ho etsahala. Lipotso tse peli tsa bloat le tse telele li hloka ho hlakoloa.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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;

Ka kopo hlokomela: ka kopo e joalo, re ka hlalosa likopo tse telele le litšebelisano. Re sebelisa sesebelisoa clock_timestamp() ho tseba nako ea ho sebetsa. Likōpo tse telele tseo re li fumaneng, re ka li hopola, ra li phetha explain, sheba merero 'me ka tsela e itseng u ntlafatse. Re thunya likopo tsa hajoale tse telele mme re phele.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

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

Lichelete tse mpe ha li sebetse 'me ha li etse letho lithekisetsanong tsa transaction (tse felisitsoeng).

E bolelang? Litšebelisano li na le linaha tse ngata. 'Me e' ngoe ea linaha tsena e ka nka nako efe kapa efe. Ho na le sebaka sa ho hlalosa linaha state ka pono ena. 'Me re e sebelisa ho tseba boemo.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

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

'Me, joalo ka ha ke boletse ka holimo, linaha tsena tse peli e se nang letho ka transaction le e sa sebetseng ka har'a transaction (aborted) li mpe. Ke eng? Ke nakong eo kopo e ileng ea bula khoebo, ea etsa liketso tse itseng 'me ea tsoela pele ka khoebo ea eona. Thekisetsano e lula e butsoe. E leketlile, ha ho letho le etsahalang ho eona, e hloka ho hokahanya, ho notlela mela e fetotsoeng 'me mohlomong e ntse e eketsa bloat ea litafole tse ling, ka lebaka la meralo ea enjene ea transaction ea Postrges. 'Me litšebelisano tse joalo le tsona li lokela ho thunngoa, hobane li kotsi ka kakaretso, ho sa tsotellehe boemo leha e le bofe.

Haeba u bona hore u na le tse fetang 5-10-20 tsa tsona ka har'a database ea hau, joale u lokela ho tšoenyeha 'me u qale ho etsa ho hong ka tsona.

Mona re boetse re sebelisa nako ea ho bala clock_timestamp(). Re thunya litšebelisano, re ntlafatsa ts'ebeliso.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Joalokaha ke boletse ka holimo, linotlolo ke ha litšebelisano tse peli kapa ho feta li qothisana lehlokoa le le leng kapa sehlopha sa lisebelisoa. Bakeng sa sena re na le tšimo waiting ka boleng ba boolean true kapa false.

'Nete - sena se bolela hore ts'ebetso e emetse, ho na le ntho e lokelang ho etsoa. Ha ts'ebetso e ntse e emetse, joale moreki ea qalileng ts'ebetso le eena o emetse. Moreki ka har'a sebatli o lula 'me oa ema.

Tlhokomeliso: _Ho qala ho Postgres 9.6, lebaleng waiting e tlositsoe mme e nkeloe sebaka ke likarolo tse ling tse peli tse rutang wait_event_type и wait_event._

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Ke lokela ho etsa eng? Haeba u bona 'nete ka nako e telele, joale u lokela ho tlosa likōpo tse joalo. Re mpa re thunya litšebelisano tse joalo. Re ngolla bahlahisi se hlokang ho ntlafatsoa ka tsela e itseng hore ho se be le morabe oa lisebelisoa. 'Me joale baetsi ba ntlafatsa ts'ebeliso hore sena se se ke sa etsahala.

'Me ho feteletseng, empa ka nako e ts'oanang ho ka 'na ha se ke ha e-ba kotsi ho hlaha ha deadlocks. Litšebelisano tse peli li ntlafalitse lisebelisoa tse peli, ebe li li fihlella hape, li se li le ho lisebelisoa tse fapaneng. PostgreSQL tabeng ena e nka le ho thunya transaction ka boeona e le hore e 'ngoe e tsoele pele ho sebetsa. Ena ke boemo bo shoeleng 'me ha a ikutloisise. Ka hona, PostgreSQL e qobelloa ho nka mehato e feteletseng.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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/

Mona ke lipotso tse peli tse u lumellang hore u latele liloko. Re sebelisa pono pg_locks, e leng se u lumellang hore u latele liloko tse boima.

Mme sehokelo sa pele ke mongolo wa kopo ka bowona. E telele haholo.

'Me sehokelo sa bobeli ke sengoloa se mabapi le liloko. Ho molemo ho bala, ho monate haholo.

Joale re bona eng? Re bona likopo tse peli. Transaction le ALTER TABLE ke ts'ebetso e thibelang. E qalile, empa ha ea ka ea fela, 'me kopo e rometseng khoebo ena e etsa lintho tse ling kae-kae. 'Me kopo ea bobeli ke ntlafatso. E emela hore tafole ea alter e fele pele e tsoela pele ka mosebetsi oa eona.

Ke ka mokhoa ona re ka tsebang hore na ke mang ea koalletseng mang, ke mang ea tšoereng mang, ‘me taba ena re e’o sebetsa ho ea pele.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Mojule o latelang ke pg_stat_statements. Joalo ka ha ke boletse, ke mojule. Ho e sebelisa, o hloka ho kenya laeborari ea eona ho tlhophiso, qala hape PostgreSQL, kenya module (ka taelo e le 'ngoe), ebe joale re tla ba le pono e ncha.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa 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;

Re ka nka eng ho tloha moo? Haeba re bua ka lintho tse bonolo, re ka nka nako e tloaelehileng ea ho botsa lipotso. Nako e ntse e eketseha, ho bolelang hore PostgreSQL e arabela butle mme ho na le ho hong ho lokelang ho etsoa.

Re ka bona lipapatso tse sebetsang ka ho fetesisa sebakeng sa polokelo ea litaba tse fetolang data ho li-buffers tse arolelanoang. Bona hore na ke mang ea ntlafatsang kapa ea hlakolang data moo.

Mme re ka sheba lipalo-palo tse fapaneng tsa lipotso tsena.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

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

Re joalo pg_stat_statements se sebedisoang ho aha litlaleho. Re seta lipalo-palo bocha hang ka letsatsi. A re e bokelleng. Pele re seta lipalo-palo nakong e tlang, re etsa tlaleho. Sehokelo sa tlaleho ke sena. U ka e shebella.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Re etsang? Re bala lipalo-palo kaofela bakeng sa lipotso tsohle. Ebe, bakeng sa potso e 'ngoe le e 'ngoe, re bala tlatsetso ea eona ka bomong ho lipalo-palo tsena kaofela.

Mme re ka bona eng? Re ka bona kakaretso ea nako ea ts'ebetso ea likopo tsohle tsa mofuta o itseng khahlano le bokamorao ba likopo tse ling kaofela. Re ka sheba ts'ebeliso ea CPU le I / O mabapi le setšoantšo se akaretsang. 'Me e se e ntse e le ho ntlafatsa likopo tsena. Re ntse re theha lipotso tse holimo ho latela tlaleho ena 'me re se re ntse re fumana maikutlo a hore na re ka ntlafatsa eng.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Re na le eng ka mor'a liketsahalo? Ho ntse ho e-na le litlhahiso tse 'maloa tseo ke sa kang ka li ela hloko, hobane nako e lekanyelitsoe.

Ho na le pgstattuple hape ke mojule oa tlatsetso ho tsoa ho sephutheloana se tloaelehileng sa contribs. E u lumella ho lekola bloat litafole, ho thoeng ke. karohano ea tafole. 'Me haeba karohano e le khōlō, u lokela ho e tlosa, sebelisa lisebelisoa tse fapaneng. Le tshebetso pgstattuple e sebetsa nako e telele. 'Me litafole tse ngata, li tla sebetsa nako e telele.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

Karolo e latelang ke pg_buffercache. E o lumella ho lekola li-buffers tse arolelanoang: hore na maqephe a buffer a sebelisoa ka matla hakae le hore na ke litafole life tse sebelisoang. 'Me e u lumella ho sheba li-buffers tse arolelanoang le ho lekola se etsahalang moo.

Mojule o latelang ke pgfincore. E u lumella ho etsa ts'ebetso ea tafole e tlase ka mohala oa sistimi mincore(), ke hore, e u lumella ho kenya tafole ka har'a li-buffers tse arolelanoang, kapa ho e laolla. 'Me e lumella, har'a lintho tse ling, ho lekola cache ea leqephe la sistimi e sebetsang, ke hore, tafole e na le bokae ka har'a cache ea leqephe, li-buffers tse arolelanoang, mme e u lumella feela ho lekola mojaro o tafoleng.

Mojule o latelang ke pg_stat_kcache. E boetse e sebelisa mohala oa sistimi getrusage(). 'Me e e phethahatsa pele le ka mor'a hore kopo e etsoe. 'Me ho lipalo-palo tse fumanoeng, e re lumella ho hakanya hore na kopo ea rona e sebelisitse bokae ho disk I / O, ke hore, ts'ebetso ea tsamaiso ea faele le ho sheba ts'ebeliso ea processor. Leha ho le joalo, mojule o monyenyane (khe-khe) 'me bakeng sa mosebetsi oa oona o hloka PostgreSQL 9.4 le pg_stat_statements, tseo ke li boletseng pejana.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

  • Bokhoni ba ho sebelisa lipalo-palo bo molemo. Ha o hloke software ea motho oa boraro. O ka sheba, oa bona, oa etsa ho hong, oa etsa.

  • Ho sebelisa lipalo-palo ho bonolo, ho hlakile SQL. U ile ua bokella kopo, ua e bokella, ua e romela, ua e sheba.

  • Lipalo-palo li thusa ho araba lipotso. Haeba u na le lipotso, u retelehela ho lipalo-palo - sheba, etsa liqeto, hlahloba liphello.

  • Le teko. Likopo tse ngata, data e ngata. U ka lula u ntlafatsa tse ling tsa potso e teng. U ka iketsetsa mofuta oa kopo e u loketseng ho feta ea mantlha mme u e sebelise.

Ikakhele ka setotsoana lipalo-palo tsa ka hare tsa PostgreSQL. Alexey Lesovsky

litšupiso

Lihokelo tse sebetsang tse fumanoeng sengolong, ho latela hore na, li ne li le tlalehong.

Mongoli ngola ho feta
https://dataegret.com/news-blog (eng)

'Mokelli oa Lipalo-palo
https://www.postgresql.org/docs/current/monitoring-stats.html

Mesebetsi ea Tsamaiso ea Tsamaiso
https://www.postgresql.org/docs/current/functions-admin.html

Kenya li-modules
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

Lisebelisoa tsa SQL le mehlala ea khoutu ea sql
https://github.com/dataegret/pg-utils

Ke leboha bohle ka tlhokomelo ea hau!

Source: www.habr.com

Eketsa ka tlhaloso