Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Te tuhi o te ripoata 2015 na Alexey Lesovsky "Te ruku hohonu ki nga tatauranga o roto o PostgreSQL"

Whakakahoretanga mai i te kaituhi o te ripoata: Ka kite ahau i tuhia tenei ripoata i te marama o Whiringa-a-rangi 2015 - neke atu i te 4 tau kua pahemo, kua roa te wa. Ko te Putanga 9.4 i korerohia i roto i te ripoata kua kore e tautokohia. I roto i nga tau e 4 kua pahure ake nei, e 5 nga whakaputanga hou kua puta mai he maha nga mahi hou, nga whakapainga me nga huringa e pa ana ki nga tatauranga, a ko etahi o nga korero kua tawhito me te kore e tika. I taku arotake, ka ngana ahau ki te tohu i enei waahi kei whakapohehetia koe e te kaipanui. Kare au i tuhi ano i enei waahi, he maha nga waahi, na reira ka puta he purongo rereke.

He tikanga nui te PostgreSQL DBMS, a he maha nga punaha iti kei roto i tenei tikanga, ko te mahi kua whakaritea e pa ana ki te mahi a te DBMS. I te wa e mahi ana, ka kohia nga tatauranga me nga korero mo te mahi o nga waahanga, ka taea e koe te arotake i te whai huatanga o PostgreSQL me te tango i nga tikanga hei whakapai ake i nga mahi. Heoi ano, he maha nga korero nei, ka whakaatuhia i roto i te ahua ngawari. Ko te tukatuka i enei korero me te whakamaori i etahi wa he mahi tino kore noa, a ko te "zoo" o nga taputapu me nga taputapu ka ngawari te pohehe ahakoa te DBA matatau.
Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky


Kia pai te ahiahi Ko Aleksey toku ingoa. I korero a Ilya, ka korero ahau mo nga tatauranga PostgreSQL.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Nga tatauranga mahi a PostgreSQL. E rua nga tatauranga a PostgreSQL. Nga tatauranga mahi, ka korerohia. Me nga tatauranga kaihōtaka mo te tohatoha raraunga. Ka korero au mo nga tatauranga mahi a PostgreSQL, e taea ai e tatou te whakawa i nga mahi me te whakapai ake.

Ka korero ahau ki a koe me pehea te whakamahi tika i nga tatauranga hei whakaoti i nga momo raru kei a koe, kei a koe pea.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

He aha nga mea kaore i roto i te ripoata? I roto i te purongo, e kore ahau e pa ki nga tatauranga o te kaitakataka, na te mea. he kaupapa motuhake tenei mo te purongo motuhake mo te penapena raraunga i roto i te papaaarangi me te pehea e whai whakaaro ai te kaiwhakatakoto uiui mo nga ahuatanga o te kounga me te ine o enei raraunga.

A kaore he arotake taputapu, kaore au e whakataurite i tetahi hua ki tetahi atu. Karekau he panui. Me tuku.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

E hiahia ana ahau ki te whakaatu ki a koe he pai te whakamahi i nga tatauranga. E tika ana. Whakamahia ma te mataku. Ko nga mea katoa e hiahiatia ana e matou ko te SQL maamaa me te matauranga taketake mo te SQL.

A ka korero tatou mo nga tatauranga hei whiriwhiri hei whakaoti rapanga.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Mena ka titiro tatou ki te PostgreSQL me te whakahaere i tetahi whakahau i runga i te punaha whakahaere hei tiro i nga tukanga, ka kite tatou i te "pouaka pango". Ka kite tatou i etahi tukanga e mahi ana i tetahi mea, ma te ingoa ka taea e tatou te whakaaro he aha ta ratou mahi ki reira, he aha ta ratou mahi. Engari, he pouaka pango tenei, kaore e taea te titiro ki roto.

Ka taea e tatou te titiro ki te utaina CPU i roto top, ka kite tatou i te whakamahinga mahara a etahi taputapu punaha, engari kaore e taea e tatou te titiro ki roto PostgreSQL. Mo tenei ka hiahia matou ki etahi atu taputapu.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

A mo te haere tonu atu, ka korerotia e ahau ki a koe te wahi i pau ai te taima. Mena ka tohu matou i te PostgreSQL i roto i te ahua o taua kaupapa, katahi ka taea te whakautu ki te waahi kua pau te wa. E rua enei mea: ko te tukatuka i nga tono a nga kaihoko mai i nga tono me nga mahi papamuri e mahia ana e PostgreSQL kia mau tonu ai.

Mena ka timata tatou ki te titiro ki te kokonga maui o runga, ka kite tatou me pehea te tukatuka i nga tono a nga kaihoko. Ko te tono ka puta mai i te tono ka whakatuwherahia he huihuinga kiritaki mo etahi atu mahi. Ka tukuna te tono ki te kaiwhakarite. Ka hangaia e te kaiwhakamahere he mahere patai. Ka tukuna atu kia mahia. He momo raraunga poraka I / O e hono ana ki nga ripanga me nga tohu. Ko nga raraunga e tika ana ka panuihia mai i nga kopae ki te mahara ki tetahi waahi motuhake e kiia nei ko "nga parepare tiri". Ko nga hua o te patai, mena he whakahou, he whakakore, ka tuhia ki te raarangi tauwhitinga i WAL. Ko etahi o nga korero tatauranga ka uru ki te raarangi, kaikohi tatauranga ranei. A ko te hua o te tono ka whakahokia ki te kiritaki. I muri i tera, ka taea e te kiritaki te whakahoki i nga mea katoa me te tono hou.

He aha a tatou me nga mahi papamuri me nga tukanga papamuri? He maha a matou tukanga e pupuri ana i te paataka korero me te whakahaere i roto i te aratau whakahaere noa. Ko enei tukanga ka hipokina ano ki roto i te ripoata: ko enei ko te mokorua, te tohutaki, nga tikanga e pa ana ki te tukurua, te kaituhi papamuri. Ka pa atu ahau ki ia o ratou e korero ana ahau.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

He aha nga raruraru o te tatauranga?

  • He maha nga korero. Ko PostgreSQL 9.4 e whakarato ana i nga inenga 109 mo te tiro i nga raraunga tatauranga. Heoi, mena ka penapenahia e te papaaarangi te maha o nga ripanga, nga kaupapa, nga papaa raraunga, me whakareatia enei inenga katoa ki te maha o nga ripanga, papaa raraunga. Arā, he maha atu nga korero. A he tino ngawari ki te toremi i roto.
  • Ko te raru e whai ake nei ko nga tatauranga e tohuhia ana e nga porotiti. Ki te titiro tatou ki enei tatauranga, ka kite tatou i te piki haere tonu o nga porotiti. A, ki te mea kua pahemo te wa roa mai i te whakahoki ano o nga tatauranga, ka kite tatou i nga piriona uara. A kaore ratou e korero ki a matou.
  • Karekau he hitori. Mena kei a koe etahi momo rahunga, kua hinga tetahi mea 15-30 meneti ki muri, kaore e taea e koe te whakamahi i nga tatauranga me te kite i nga mea i tupu 15-30 meneti ki muri. He raruraru tenei.
  • Ko te kore o te taputapu i hangaia ki PostgreSQL he raruraru. Karekau nga kaiwhakawhanake kernel e whakarato taputapu. Karekau he mea pera. Ka hoatu noa e ratou nga tatauranga i roto i te paataka raraunga. Whakamahia, tonohia, he aha taau e hiahia ana, katahi ka mahia.
  • I te mea kaore he taputapu i hangaia ki PostgreSQL, he raru ano tenei. He maha nga taputapu tuatoru. Ko nga kamupene katoa he nui ake, iti ake ranei nga ringaringa tika e ngana ana ki te tuhi i tana ake kaupapa. Na ko te mutunga, he maha nga taputapu a te hapori ka taea e koe te whakamahi ki te mahi me nga tatauranga. A, i etahi taputapu kei etahi ahuatanga, i etahi atu taputapu kaore he ahuatanga ke atu, he ahuatanga hou ranei. A ka puta he ahuatanga me whakamahi e koe kia rua, kia toru, kia wha ranei nga taputapu e inaki ana tetahi ki tetahi, he rereke nga mahi. He tino kino tenei.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

He aha te mea e whai ake nei? He mea nui kia taea e koe te tango tika i nga tatauranga kia kore e whakawhirinaki ki nga kaupapa, ki te whakapai ake ranei i enei kaupapa: taapirihia etahi mahi kia whai hua ai koe.

A ka hiahia koe ki te mohio ki te SQL. Ki te tiki i etahi raraunga mai i nga tatauranga, me hanga e koe nga patai SQL, ara me mohio koe me pehea te whiriwhiri, te whakauru.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

He maha nga korero a nga tatauranga. Ka taea te wehewehe ki nga waahanga.

  • Ko te waahanga tuatahi ko nga huihuinga e mahia ana i roto i te paataka raraunga. Koinei te wa ka puta mai etahi huihuinga i roto i te paataka raraunga: he patai, he urunga ripanga, autovacuum, commits, katahi enei kaupapa katoa. Ko nga porotiti e pa ana ki enei huihuinga ka piki ake. A ka taea e taatau te whai i enei kaupapa.
  • Ko te waahanga tuarua ko nga ahuatanga o nga mea penei i nga ripanga, nga papaa raraunga. He taonga ta ratou. Koinei te rahi o nga tepu. Ka taea e tatou te whai i te tipu o nga ripanga, te tipu o nga tohu. Ka taea e tatou te kite i nga huringa o te hihiri.
  • A ko te wahanga tuatoru ko te wa i pau i te huihuinga. He kaupapa te tono. Kei a ia ano tana inenga mo te roanga. I timata i konei, i mutu i konei. Ka taea e tatou te whai. Ko te wa ranei mo te panui poraka mai i te kōpae, te tuhi ranei. Ko enei mea ka whaiwhaihia.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Ko nga puna tatauranga e whakaatuhia ana e whai ake nei:

  • I roto i nga mahara tiritiri (shared buffers) he wahanga mo te whakatakoto i nga raraunga pateko ki reira, tera ano etahi porotiti ka piki haere tonu ina puta etahi kaupapa, ka ara ake ranei etahi waa i roto i te whakahaeretanga o te paataka raraunga.
  • Ko enei porotiti katoa kaore i te waatea ki te kaiwhakamahi, kaore hoki i te waatea ki te kaiwhakahaere. He mea taumata iti enei. Hei uru atu ki a raatau, ka whakaratohia e PostgreSQL he atanga i roto i te ahua o nga mahi SQL. Ka taea e tatou te whiriwhiri i nga whiringa ma te whakamahi i enei mahi me te tiki i etahi momo ine (he huinga ine ranei).
  • Heoi, kaore i te watea ki te whakamahi i enei mahi, no reira ko nga mahi te putake mo nga tirohanga (VIEWs). He ripanga mariko enei e whakarato ana i nga tatauranga mo tetahi puunaha-roto motuhake, mo etahi huinga huihuinga ranei i roto i te papaarangi.
  • Ko enei tirohanga hanga-i roto (VIEWs) te atanga kaiwhakamahi matua mo te mahi me nga tatauranga. E waatea ana ma te taunoa kaore he taapiri taapiri, ka taea e koe te whakamahi tonu, maataki, tango korero mai i reira. A tera ano nga takoha. He mana nga takoha. Ka taea e koe te whakauru i te putea postgresql-contrib (hei tauira, postgresql94-contrib), utaina te waahanga e tika ana i roto i te whirihoranga, tohua nga tawhā mo taua mea, whakaara ano i te PostgreSQL ka taea e koe te whakamahi. (Tuhipoka. I runga i te tohatoha, i nga putanga tata o te takoha ko te kete te waahanga o te kete matua).
  • A he takoha kore mana. Karekau e tukuna me te tohatoha PostgreSQL paerewa. Me whakahiato, me whakauru ranei hei whare pukapuka. He rereke pea nga whiringa, i runga ano i ta te kaiwhakawhanake o tenei takoha kore mana.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Ko tenei kiriata e whakaatu ana i aua tirohanga katoa (VIEW) me etahi o aua mahi e waatea ana i PostgreSQL 9.4. Ka kite tatou, he maha tonu o raatau. A he tino ngawari ki te raruraru mena ka pa ki a koe mo te wa tuatahi.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Heoi, ki te tango tatou i te pikitia o mua Как тратится время на PostgreSQL me te hototahi ki tenei rarangi, ka whiwhi tatou i tenei pikitia. Ia tirohanga (VIEWs), ia mahi ranei, ka taea e tatou te whakamahi mo tetahi kaupapa, mo tetahi atu ki te tiki i nga tatauranga e tika ana i te wa e rere ana a PostgreSQL. A ka taea e taatau te tiki korero mo te mahi o te punaha iti.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Ko te mea tuatahi ka tirohia e tatou pg_stat_database. Ka kite tatou, he tohu tenei. He maha nga korero kei roto. Ko nga korero tino rereke. A ka hoatu he matauranga tino whai hua mo nga mea e mahia ana e matou i roto i te papaa raraunga.

He aha ta tatou e tango mai i reira? Me timata ki nga mea ngawari.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

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

Ko te mea tuatahi ka taea e tatou te titiro ko te paheketanga keteroki hit. He ine whaihua te paheketanga o te keteroki patua. Ka taea e koe te whakatau tata i te nui o nga raraunga ka tangohia mai i te keteroki buffers tiritahi, me te nui o te panui mai i te kōpae.

E marama ana tera Ko te nui ake o te keteroki i ta tatou, ko te pai ake. Ka arotakehia e matou tenei ine hei ōrau. A, hei tauira, ki te mea he paheketanga o enei keteroki ka eke ki runga ake i te 90%, he pai tenei. Mena ka heke iho ki raro i te 90%, karekau he nui o te mahara ki te pupuri i te upoko wera o nga raraunga ki te mahara. A, hei whakamahi i enei raraunga, ka akiakihia a PostgreSQL ki te uru atu ki te kōpae, he puhoi ake tenei i te mea ka panuihia nga raraunga mai i te mahara. A me whakaaro koe mo te whakanui ake i te mahara: te whakanui ake i nga parepare tiritahi, te whakanui ranei i te mahara rino (RAM).

Te ruku hohonu ki nga tatauranga o roto o 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;

He aha atu ano te tango mai i tenei mahi? Ka taea e koe te kite i nga kohihiko e puta ana i roto i te paataka raraunga. He aha te whakaaturanga i konei? He commits, rollbacks, te hanga i nga konae rangitahi, te rahi, nga kati me nga papā.

Ka taea e tatou te whakamahi i tenei tono. He tino ngawari tenei SQL. A ka taea e tatou te kite i enei korero mo tatou ake.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Anei nga uara paepae. Ka tirohia e matou te owehenga o nga mahi me nga hokinga whakamuri. Ko te Whakaaetanga he whakapumautanga angitu o te tauwhitinga. Ko te whakamuri he whakamuri, ara, i mahi te tauwhitinga, i whakatakahia te paataka korero, i whakaarohia tetahi mea, katahi ka puta he rahua, ka makahia nga hua o te tauwhitinga. i.e. he kino te maha o nga hurihanga kei te piki haere tonu. Na me karohia e koe, me te whakatika i te waehere kia kore ai e puta.

Ko nga raruraru e pa ana ki te tukurua. A me karohia ano hoki. Mena kei a koe etahi patai ka mahia i runga i te tauira ka ara ake nga papā, katahi koe me tātari enei papā me te kite ka ahatia. Ka kitea nga korero i roto i nga raarangi. A ka whakatau i nga raruraru kia mahi nga tono tono me te kore he.

He ahua kino ano te mate mate. Ka whakataetae nga tono mo nga rauemi, ka uru tetahi tono ki tetahi rauemi ka mau i te raka, ka uru te tono tuarua ki te rauemi tuarua ka mau ano hoki te raka, katahi ka uru atu nga tono e rua ki nga rauemi a tetahi, ka aukatihia kia tatari te hoa tata ki te tuku i te raka. He ahuatanga raruraru hoki tenei. Me whakatikahia i te taumata o te tuhi ano i nga tono me te raupapa raupapa uru ki nga rauemi. A, ki te kite koe kei te piki haere tonu o kati, me titiro koe ki nga korero i roto i nga raarangi, tātarihia nga ahuatanga kua ara ake ka kite he aha te raru.

He kino ano nga konae rangitahi (temp_files). Ki te kore e nui te mahara o te tono a te kaiwhakamahi ki te whakauru i nga raraunga whakahaere, rangitahi, ka hangaia he konae ki runga kōpae. A ko nga mahi katoa ka taea e ia te mahi i roto i te putunga rangitahi i roto i te mahara ka timata ki te mahi i runga i te kōpae. He puhoi. Ka piki ake te wa mahi uiui. A ko te kaihoko i tuku tono ki a PostgreSQL ka whiwhi whakautu i muri tata nei. Mena ka mahia enei mahinga katoa i roto i te mahara, ka tere ake te whakautu a Postgres, ka iti ake te tatari o te kiritaki.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

pg_stat_bgwriter - Ko tenei tirohanga e whakaatu ana i te mahinga o nga punaha papamuri PostgreSQL e rua: checkpointer и background writer.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Hei timata, me wetewete i nga waahi whakahaere, ko nga mea e kiia nei. checkpoints. He aha nga waahi tirotiro? Ko te tohutaki he waahi kei roto i te raarangi tauwhitinga e tohu ana ko nga huringa raraunga katoa i mahia i roto i te raarangi kua pai te tukutahi me nga raraunga kei runga i te kōpae. Ko te tukanga, i runga i te kawenga mahi me nga tautuhinga, ka roa pea ko te nuinga ko te tukutahi i nga wharangi paru i roto i nga parepare tiritahi me nga konae raraunga kei runga kopae. Hei aha? Mena kei te uru atu a PostgreSQL ki te kōpae i nga wa katoa me te tango raraunga mai i reira, me te tuhi raraunga mo ia urunga, ka puhoi. Na reira, he waahanga mahara a PostgreSQL, ko te rahi e whakawhirinaki ana ki nga tawhā o te whirihoranga. Ka tohatohahia e Postgres nga raraunga whakahaere i roto i tenei mahara mo etahi atu tukatuka, patai ranei. Mo nga tono whakarereke raraunga, ka hurihia. Na ka whiwhi tatou i nga putanga e rua o nga raraunga. Kei te mahara tetahi, kei te kōpae tetahi. A i ia wa ka hiahia koe ki te tukutahi i enei raraunga. Ko nga mea kua whakarereketia i roto i te mahara kia tukutahia ki te kōpae. Me whai waahi tirotiro tenei.

Ka haere te waahi tirotiro i roto i nga parepare tiritahi, ka tohu i nga wharangi paru e hiahiatia ana mo te waahi tirotiro. Katahi ka timata te haere tuarua ma nga parepare tiritahi. A ko nga wharangi kua tohua mo te waahi tirotiro, kua tukutahia e ia. Na, kua tukutahia nga raraunga me te kōpae.

E rua nga momo tohu whakahaere. Kotahi te waahi taki ka mahia i te wa mutunga. He pai, he pai hoki tenei waahi tirotiro - checkpoint_timed. A kei reira nga waahi tirotiro i runga i te tono - checkpoint required. Ka puta he waahi tirotiro ina he rekoata raraunga nui rawa atu. I tuhia e matou te maha o nga raarangi hokohoko. A e whakapono ana a PostgreSQL me tere te tukutahi i enei mea katoa, me hanga he waahi tirotiro ka haere tonu.

A ki te titiro koe ki nga tatauranga pg_stat_bgwriter a ka kite he aha kei a koe He nui ake te tohu_req i te wa_takitaki, he kino tenei. He aha te kino? Ko te tikanga kei raro tonu a PostgreSQL i te ahotea ina hiahia ana ia ki te tuhi raraunga ki te kōpae. He iti ake te taumaha o te waahi arowhai ma te waahi ka mahia i runga i te waarangi o roto, a, me te mea kua roa te roa. Kei a PostgreSQL te kaha ki te okioki i roto i te mahi me te kore e tarai i te punaha iti o te kōpae. He pai tenei mo PostgreSQL. A ko nga tono ka mahia i te wa e tirotirohia ana e kore e pa ki te taumahatanga na te mea kei te pukumahi te puunaha kopae.

A e toru nga tawhā hei whakatika i te tohutaki:

  • сheckpoint_segments.

  • сheckpoint_timeout.

  • сheckpoint_competion_target.

Ka taea e koe te whakahaere i nga mahi o nga waahi whakahaere. Engari e kore ahau e whakaaro ki a ratou. He take motuhake to ratou awe.

Whakatupato: Ko te Putanga 9.4 i whakaarohia i roto i te ripoata kua kore e whai take. I nga putanga hou o PostgreSQL, te tawhā checkpoint_segments whakakapihia e nga tawhā min_wal_size и max_wal_size.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Ko te punaha iti e whai ake nei ko te kaituhi papamuri − background writer. He aha tana mahi? Ka rere tonu i roto i te kopikopiko mutunga kore. Ka matawai i nga wharangi ki roto i nga parepare tiritahi ka peehia nga wharangi paru ka kitea ki te kōpae. Ma tenei ara, ka awhina te kaitirotiro kia iti ake nga mahi i te wa e tirotirohia ana.

He aha atu ano e hiahiatia ana e ia? E whakarato ana mo te hiahia mo nga wharangi ma i roto i nga parepare tiri mena ka hiahiatia ohorere (i roto i te nui me te wa tonu) ki te whakauru raraunga. Mehemea ka puta ake he ahuatanga i te wa e hiahia ana te tono ki nga wharangi ma, a, kei roto kee ratou i nga parepare tiritahi. Postgres backend ka tangohia noa e ia, ka whakamahia, kaore he mea hei horoi i a ia ano. Engari ki te ohorere karekau he wharangi penei, ka okioki te tuara ka timata ki te rapu i nga wharangi hei kokiri ki te kopae me te tango mo ona ake hiahia - ka pa kino ki te wa o te tono e mahia ana i tenei wa. Mena ka kite koe kei a koe he tawhā maxwritten_clean nui, ko te tikanga kaore te kaituhi papamuri e mahi ana i tana mahi ka hiahia koe ki te whakanui ake i nga tawhā bgwriter_lru_maxpageskia nui ake tana mahi i roto i te huringa kotahi, kia maha ake nga wharangi.

A ko tetahi atu tohu tino whai hua buffers_backend_fsync. Ko nga pito o muri kaore e mahi i te fsync na te mea he puhoi. Ka tukuna atu e ratou te kaitirotiro IO. Kei te kaitirotiro tana ake rarangi, ka whakahaere i ia waa te fsync me te tukutahi i nga wharangi i roto i te mahara me nga konae kei runga i te kōpae. Mena he nui, he ki tonu te rarangi kaitirotiro, ka pehia te pito o muri ki te mahi i te fsync ano ka whakaroa te mutunga o te tuara., i.e. ka whiwhi whakautu te kiritaki i muri mai i tera i taea. Mena ka kite koe he nui ake tenei uara i te kore, he raru ke tenei me aro koe ki nga tautuhinga o te kaituhi papamuri me te arotake ano hoki i te mahi o te puunaha kopae.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Whakatupato: _Ko te tuhinga e whai ake nei e whakaatu ana i nga tirohanga tauanga e pa ana ki te tukurua. Ko te nuinga o nga ingoa tirohanga me nga ingoa mahi kua whakaingoatia ki Postgres 10. xlog i runga i wal и location i runga i lsn i roto i nga ingoa mahi/tirohia, etc. He tauira motuhake, mahi pg_xlog_location_diff() i whakaingoatia ki pg_wal_lsn_diff()._

He nui hoki a matou i konei. Engari ka hiahia noa matou ki nga mea e pa ana ki te waahi.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Mena ka kite tatou he rite nga uara katoa, he pai tenei, kaore hoki te tauira e taka ki muri i te rangatira.

Ko tenei waahi hexadecimal i konei ko te waahi kei roto i te raarangi tauwhitinga. Ka piki tonu mena he mahi kei roto i te paataka: whakauru, muku, aha atu.

Te ruku hohonu ki nga tatauranga o roto o 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());

Mena he rereke enei mea, katahi ano he momo takamuri. Ko te takamuri te taarua o te tauira mai i te rangatira, ara, he rereke nga raraunga i waenga i nga kaitoro.

E toru nga take mo te whakaroa:

  • Ko te punaha iti kopae kaore e taea te whakahaere i nga tuhi tukutahi konae.
  • Ko enei he hapa whatunga pea, he nui rawa te whatunga, ka kore e whai wa nga raraunga ki te tae atu ki te tauira ka kore e taea te whakaputa.
  • Me te tukatuka. Ko te pūtukatuka he take tino onge. A kua kite ahau i tera e rua, e toru nga wa, engari ka taea ano.

Anei nga patai e toru ka taea e matou te whakamahi i nga tatauranga. Ka taea e matou te whakatau tata ki te nui o nga rekoata i roto i ta maatau pukapuka hokohoko. He mahi pera pg_xlog_location_diff a ka taea e tatou te whakatau tata i te takamuri tukurua i roto i nga paita me nga hēkona. Ka whakamahia hoki e matou te uara mai i tenei tirohanga (VIEWs) mo tenei.

Tuhipoka: _Ko te pg_xlog_locationdiff(), ka taea e koe te whakamahi i te kaiwhakahaere tango me te tango i tetahi waahi mai i tetahi atu. Te whakamarie.

Ki te takamuri, i roto i te hēkona, he wa kotahi. Mena karekau he mahi i runga i te rangatira, he 15 meneti pea te roa o te tauwhitinga, karekau he mahi, a ki te titiro tatou ki tenei takamuri i runga i te tauira, ka kite tatou i te tomuri o te 15 meneti. He mea tika tenei kia maumahara. A tera pea ka paheke i te wa e matakitaki ana koe i tenei takamuri.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

pg_stat_all_tables tetahi atu tirohanga whaihua. E whakaatu ana i nga tatauranga ki nga ripanga. Ina he ripanga kei roto i te putunga korero, kei reira etahi mahi, etahi mahi, ka taea e tatou enei korero mai i tenei tirohanga.

Te ruku hohonu ki nga tatauranga o roto o 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;

Ko te mea tuatahi ka taea e tatou te titiro ko nga matawai ripanga raupapa. Ko te nama ake i muri i enei waahanga ehara i te mea he kino, kaore hoki e tohu me mahi kee taatau.

Heoi ano, he inenga tuarua - seq_tup_read. Koinei te maha o nga rarangi i whakahokia mai i te karapa raupapa. Mena ka nui ake te nama toharite i te 1, 000, 10, 000, he tohu tera pea ka hiahia koe ki te hanga i tetahi taurangi ki tetahi waahi kia mau ai nga urunga ma te taurangi, ka taea ranei te arotau i nga patai e whakamahi ana i nga matawai raupapa kia taea ai. e kore tenei e tupu.

He tauira ngawari - me kii he tono me te OFFSET nui me te LIMIT he utu. Hei tauira, 100 nga rarangi o te ripanga ka karapahia, a muri iho ka tangohia e 000 nga rarangi e hiahiatia ana, a ka makahia nga rarangi karapa o mua. He take kino ano tenei. A me arotau nga tono penei. Anei tetahi patai SQL ngawari ka taea e koe te kite me te arotake i nga nama kua riro.

Te ruku hohonu ki nga tatauranga o roto o 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;

Ka taea hoki te tiki i nga rahi o te ripanga ma te whakamahi i tenei ripanga me te whakamahi i etahi atu mahi pg_total_relation_size(), pg_relation_size().

I te nuinga o te waa, he tono meta dt и di, ka taea e koe te whakamahi i roto i te PSQL me te kite hoki i nga rahi o te ripanga me te tohu tohu.

Heoi, ma te whakamahi i nga mahi ka awhina i a tatou ki te titiro ki nga rahi o nga tepu, tae noa ki te whai whakaaro ki nga tohu tohu, me te kore e whai whakaaro ki nga tohu tohu, me te whakarite i etahi whakatau i runga i te tipu o te papaarangi, ara, me pehea te tipu ki a tatou, me he aha te kaha, me te tuhi i etahi whakatau mo te arotautanga rahi.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Tuhia mahi. He aha te rekoata? Kia titiro tatou ki te mahi UPDATE – te mahi whakahōu rarangi i te ripanga. Ko te mea pono, ko te whakahou e rua nga mahi (he nui atu ranei). Kei te whakaurua he putanga rarangi hou me te tohu i te putanga rarangi tawhito kua tawhitotia. A muri ake nei, ka haere mai te mokowaauau ka horoi i enei putanga tawhito o nga raina, tohuhia tenei waahi mo te whakamahi ano.

Ano, ko te whakahou ehara i te mea mo te whakahou noa i te ripanga. He whakahoutanga taurangi tonu. Mena he maha nga taurangi kei runga i te teepu, na me te whakahou, me whakahou ano nga taurangi katoa e uru mai ai nga mara kua whakahoutia ki te patai. Ko enei taurangi ka whai putanga haupae tawhito me horoi.

Te ruku hohonu ki nga tatauranga o roto o 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;

A, na tona hoahoa, ko te UPDATE he mahi taumahamaha. Engari ka ngawari ake. Kai hot updates. I puta mai i te putanga PostgreSQL 8.3. A he aha tenei? He whakamohoatanga mama tenei e kore ai e hanga ano nga taurangi. Arā, i whakahouhia e mātou te rekoata, engari ko te rekoata o te wharangi (no te ripanga) i whakahoutia, ka tohu tonu nga tohu ki te rekoata kotahi i te wharangi. He ahua o te whakaaro pai o te mahi, ka tae mai te korehau, katahi ano enei mekameka hot ka hanga ano, ka mahi tonu nga mea katoa me te kore e whakahou i nga tohu, ka tupu nga mea katoa me te iti o te ururua o nga rauemi.

A ka whai koe n_tup_hot_upd nui, he tino pai. Ko te tikanga kei te kaha tonu nga whakahoutanga ngawari, he iti ake te utu mo taatau i runga i nga rauemi me te pai katoa.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

ALTER TABLE table_name SET (fillfactor = 70);

Me pehea te whakanui ake i te rōrahi hot updateov? Ka taea e tatou te whakamahi fillfactor. Ka whakatauhia te rahi o te mokowā noa kua rahuitia ina whakakiia he wharangi ki te ripanga ma te whakamahi i nga INSERTs. Ina haere nga whakaurunga ki te tepu, ka whakakiia katoatia te wharangi, kaua e waiho he waahi kau ki roto. Katahi ka tohua he wharangi hou. Ka whakakiia ano nga raraunga. A koinei te whanonga taunoa, fillfactor = 100%.

Ka taea e taatau te tautuhi i te whakakii ki te 70%. Arā, me ngā kōkuhu, he whārangi hou i tohatohahia, engari 70% noa iho o te wharangi i whakakiia. A he 30% e toe ana ki te rahui. Ina hiahia koe ki te mahi whakahou, tera pea ka puta ki te wharangi kotahi, ka uru te putanga hou o te rarangi ki te wharangi kotahi. A ka mahi hot_update. Ma tenei ka ngawari ake te tuhi ki nga ripanga.

Te ruku hohonu ki nga tatauranga o roto o 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));

Tutira mokohauaunoa. Ko Autovacuum he punaha iti nei he iti noa nga tatauranga kei PostgreSQL. Ka kitea noa e tatou i roto i nga ripanga i pg_stat_activity te maha o nga waatea kei a tatou i tenei wa. Heoi, he tino uaua ki te mohio ki te maha o nga ripanga kei roto i te rarangi kei te neke.

Tuhipoka: _Mai i te Postgres 10, kua tino pai ake te ahuatanga me te whai i te korehau korehau - kua puta te tirohanga pg_stat_progresskorehau, e tino ngawari ana te take o te aro turuki autovacuum.

Ka taea e tatou te whakamahi i tenei patai ngawari. A ka taea e tatou te kite i te wa e tika ai te hanga i te korehau. Engari, me pehea me te wa ka timata te korehau? Ko nga putanga tawhito enei o nga aho i korerohia e ahau i mua. Kua puta te whakahou, kua whakauruhia te putanga hou o te haupae. Kua puta he putanga tawhito o te aho. Ripanga pg_stat_user_tables he tawhā pera n_dead_tup. E whakaatu ana i te maha o nga rarangi "mate". A, no te mea kua neke ake te maha o nga rarangi mate i tetahi paepae, ka tae mai he mokorua ki te tepu.

A me pehea te tatau i tenei paepae? He paheketanga tino motuhake tenei o te tapeke o nga rarangi o te ripanga. He tawhā autovacuum_vacuum_scale_factor. Ka tautuhia te ōrau. Me kii 10% + he taapiri turanga mo te 50 rarangi. A ka aha? Ina nui ake a tatou rarangi mate i te "10% + 50" o nga rarangi katoa o te tepu, ka waiho te teepu ki runga aunoa.

Te ruku hohonu ki nga tatauranga o roto o 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));

Heoi ano, kotahi te waahi. Paepae taketake mo nga tawhā av_base_thresh и av_scale_factor ka taea te tuku takitahi. A, no reira, ehara te paepae i te ao, engari mo te tangata takitahi mo te tepu. Na reira, ki te tatau, i reira me whakamahi koe i nga mahi tinihanga. A, ki te hiahia koe, ka taea e koe te titiro ki te wheako o o maatau hoa mahi mai i Avito (he muhu te hono i runga i te kiriata, kua whakahoutia i roto i te tuhinga).

I tuhituhi ratou mo mono monoe whakaaro ana ki enei mea. He kakahu waewae kei runga i nga rau e rua. Engari he tika tana whakaaro me te tino whai hua ka taea e maatau te aromatawai i te waahi e hiahia ana kia nui te waatea mo nga tepu, he iti noa.

He aha ta tatou e mahi ai? Mena he roa ta tatou rarangi ka kore e taea e te autovacuum te whakatutuki, katahi ka taea e tatou te whakanui ake i te maha o nga kaimahi korehau, ka kaha noa ake ranei te mahi a te miihini.kia puta ai i mua, ka tukatukahia te tepu ki nga mongamonga iti. Na ka heke iho te rarangi. - Ko te mea nui i konei ko te aro turuki i te kawenga i runga i nga kopae, na te mea. Ko te mea korekore kaore he utu, ahakoa i te taenga mai o nga taputapu SSD / NVMe, kua iti ake te kite o te raru.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

pg_stat_all_indexes he tatauranga mo nga taupū. Ehara ia i te rahi. A ka taea e tatou te tiki korero mo te whakamahinga o nga tohu tohu mai i tera. Hei tauira, ka taea e taatau te whakatau ko wai nga tohu taapiri kei a maatau.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Ka rite ki taku korero i mua ake nei, Ko te whakahou ehara i te whakahou noa i nga ripanga, kei te whakahou ano i nga tohu. No reira, mena he maha nga taurangi kei runga i te teepu, katahi ka whakahou i nga rarangi o te ripanga, me whakahou ano nga tohu tohu o nga mara kua tohua, me ki te mea kei a matou nga taurangi kaore i whakamahia kaore he matawai taurangi, ka whakairihia ki a matou hei peera. A ka hiahia koe ki te whakakore i a raatau. Mo tenei ka hiahia maatau he mara idx_scan. Ka titiro noa tatou ki te maha o nga tohu tohu. Mena he kore karapa o nga tohu mo te wa roa o te rokiroki tatauranga (i te iti rawa ki te 2-3 wiki), katahi pea he tohu kino enei, me whakakore atu.

Tuhipoka: I te wa e rapu ana koe i nga tohu kaore i whakamahia i roto i te keehi o nga tautau tukurua, me tirotiro koe i nga waahanga katoa o te tautau, na te mea Ko nga tatauranga kaore i te ao, a, ki te kore e whakamahia te tohu ki runga i te rangatira, ka taea te whakamahi i runga i nga tauira (mehemea he kawenga).

E rua nga hononga:

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

He tauira uinga matatau ake enei mo te rapu i nga taurangi kaore i whakamahia.

Ko te hononga tuarua he patai tino pai. He arorau tino kore-iti kei roto. Ka tūtohu ahau mo te arotake.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

He aha atu me whakarapopotohia e nga taurangi?

  • He kino nga tohu tohu kaore i whakamahia.

  • Ka tango i te waahi.

  • Whakaturia nga mahi whakahou.

  • Mahi atu mo te korehau.

Mena ka tangohia e matou nga taupū kaore i whakamahia, katahi ka pai ake te papanga raraunga.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Ko te tirohanga e whai ake nei pg_stat_activity. He rite tenei mo te whaipainga ps, kei PostgreSQL anake. Mehemea ps'ohm ka matakitaki koe i nga tukanga i roto i te punaha whakahaere, na pg_stat_activity ka whakaatu ki a koe te mahi i roto i te PostgreSQL.

He aha ta tatou e tango mai i reira?

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

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

Ka taea e tatou te kite i nga mahi katoa e mahia ana i roto i te paataka raraunga. Ka taea e tatou te hanga i tetahi waahanga hou. I pupuhi nga mea katoa ki reira, kaore i te whakaaetia nga hononga hou, kei te pakaru nga hapa i roto i te tono.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

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

Ka taea e tatou te whakahaere patai penei me te kite i te katoa o te ōrau o ngā hononga e pā ana ki te tepe hononga mōrahi me te kite ko wai te nuinga o nga hononga. Na i tenei keehi, ka kite tatou i taua kaiwhakamahi cron_role whakatuwheratia 508 hononga. Na ka pa tetahi mea ki a ia. Me mahi koe me te kite. A tera pea he ahua keehe tenei o nga hononga.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Mena he kawenga OLTP ta matou, me tere nga patai, kia tere rawa, kia kaua e roa nga patai. Engari, mehemea he roa nga tono, na i roto i te wa poto kaore he mea hei manukanuka, engari i te wa roa, ka kino nga paatai ​​​​roa i te paataka raraunga, ka piki ake te hua o te pupuhi o nga ripanga ka puta te wehenga tepu. Me whakakore nga paatai ​​​​me nga patai roa.

Te ruku hohonu ki nga tatauranga o roto o 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;

Kia mahara: me te tono penei, ka taea e matou te tautuhi i nga tono roa me nga whakawhitinga. Ka whakamahia e matou te mahi clock_timestamp() ki te whakatau i te wa mahi. Ko nga tono roa i kitea e matou, ka maumahara, ka mahia explain, titiro ki nga mahere me te ahua arotau. Ka pupuhihia e matou nga tono roa o naianei ka ora tonu.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

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

Ko nga whakawhitinga kino he mangere i roto i nga whakawhitinga me te mangere i roto i nga whakawhitinga (kua whakakorehia).

He aha te tikanga? He maha nga ahuatanga o nga whakawhitinga. A ka taea e tetahi o enei whenua te tango i nga wa katoa. He mara hei tautuhi i nga kawanatanga state i tenei tirohanga. Na ka whakamahia e matou hei whakatau i te kawanatanga.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

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

A, pera me taku korero i runga ake nei, enei whenua e rua Ko te mangere i roto i te hokohoko me te noho mangere i roto i te hokohoko (kua whakatakahia) he kino. He aha tena? Koinei te wa i whakatuwherahia ai e te tono tetahi tauwhitinga, i mahi etahi mahi me te whakahaere i ana mahi. Ka noho tuwhera tonu te tauwhitinga. Ka iri, karekau he mea e tupu ana, he hononga, he raka ki nga rarangi kua whakarerekehia, ka piki tonu te pupuhi o etahi atu teepu, na te hoahoanga o te miihini whakawhitiwhiti Postrges. A me pupuhi ano nga whakawhitinga pera, no te mea he kino te nuinga, ahakoa he aha.

Mena ka kite koe he nui ake i te 5-10-20 o raatau kei roto i to papaunga raraunga, katahi koe me awangawanga koe ka timata ki te mahi tahi me ratou.

I konei ka whakamahia ano e matou mo te wa tatau clock_timestamp(). Ka koperehia e matou nga whakawhitiwhitinga, ka arotau taatau i te tono.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Ka rite ki taku korero i runga ake nei, ko nga raka ko te wa e whakataetae ana nga whakawhitinga e rua, neke atu ranei mo te kotahi, mo te roopu rauemi ranei. Mo tenei he mara ta matou waiting me te uara boolean true ranei false.

Pono - ko te tikanga kei te tatari te mahi, me mahi tetahi mea. I te wa e tatari ana tetahi tukanga, kei te tatari ano te kiritaki nana i timata te tukanga. Ka noho te kiritaki i roto i te kaitirotiro ka tatari hoki.

Whakatupato: _Timata mai i te Postgres 9.6, te mara waiting tangohia, ka whakakapihia e etahi atu mara korero e rua wait_event_type и wait_event._

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Me aha ahau? Mena ka kite koe i te pono mo te wa roa, me whakakorehia e koe enei tono. Ka pupuhi noa matou i aua whakawhitinga. Ka tuhia e matou ki nga kaiwhakawhanake he aha te mea hei whakapai ake kia kore ai he whakataetae mo nga rawa. Na ka whakatika nga kaihanga i te tono kia kore ai e puta.

Na te tino, engari i te wa ano pea e kore te take mate ko te puta o nga kati. E rua nga whakawhitiwhitinga kua whakahou ake i nga rauemi e rua, katahi ka uru ano ki a raatau, kua tae ki nga rauemi rereke. Ko te PostgreSQL i tenei keehi ka tango me te kopere i te tauwhitinga ake kia taea ai e tetahi atu te mahi tonu. He ahua mate tenei kaore ia e mohio ana ki a ia ano. Na reira, ka akiakihia a PostgreSQL ki te tango i nga mahi tino nui.

Te ruku hohonu ki nga tatauranga o roto o 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/

Anei nga patai e rua ka taea e koe te whai i nga raka. Ka whakamahia e matou te tirohanga pg_locks, ka taea e koe te whai i nga raka taumaha.

A ko te hononga tuatahi ko te tuhinga tono ano. He tino roa.

A ko te hononga tuarua he tuhinga mo nga raka. He pai ki te panui, he tino pai.

Na he aha ta tatou e kite nei? Ka kite matou e rua nga tono. Whakawhitiwhiti me ALTER TABLE he tauwhitinga aukati. I timata, engari kaore i mutu, a ko te tono nana i tuku tenei tauwhitinga kei te mahi i etahi atu mea i tetahi waahi. A ko te tono tuarua ko te whakahou. Ka tatari kia mutu te ripanga whakarereke i mua i te mahi tonu.

Ma tenei ka kitea ko wai i tutakina ko wai, ko wai e pupuri ana ko wai, a ka taea e tatou te mahi atu.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Ko te kōwae e whai ake nei pg_stat_statements. Ka rite ki taku korero, he kōwae. Hei whakamahi, me utaina e koe tana whare pukapuka i roto i te whirihoranga, whakaara ano i te PostgreSQL, whakauruhia te kōwae (me te whakahau kotahi), katahi ka whai tirohanga hou.

Te ruku hohonu ki nga tatauranga o roto o 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;

He aha ta tatou e tango mai i reira? Mena ka korero tatou mo nga mea ngawari, ka taea e tatou te tango i te wa roa o te mahi uiui. Kei te tipu haere te wa, ko te tikanga kei te ata whakahoki a PostgreSQL me tetahi mea hei mahi.

Ka taea e tatou te kite i nga whakawhitinga tuhi tino kaha i roto i te papaarangi e huri ana i nga raraunga i roto i nga parepare tiritahi. Tirohia ko wai e whakahōu ana, e muku ana ranei i nga raraunga i reira.

A ka taea e taatau te titiro ki nga tatauranga rereke mo enei patai.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

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

Tatou pg_stat_statements whakamahia hei hanga purongo. Ka tautuhi ano matou i nga tatauranga kotahi ia ra. Kia whakaemi tatou. I mua i te tautuhi i nga tatauranga a muri ake nei, ka hanga he ripoata. Anei he hononga ki te purongo. Ka taea e koe te matakitaki.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Kei te aha tatou? Ka tatauhia e matou nga tatauranga katoa mo nga tono katoa. Na, mo ia patai, ka tatauhia e matou tana takoha takitahi ki tenei tatauranga whanui.

A he aha ta tatou e kite ai? Ka taea e tatou te kite i te tapeke o te wa mahi o nga tono katoa o tetahi momo ki te papamuri o etahi atu tono katoa. Ka taea e tatou te titiro ki te whakamahi CPU me te I/O e pa ana ki te pikitia katoa. Na ki te arotau i enei tono. E hanga ana matou i nga patai matua i runga i tenei purongo, kei te whai whakaaro ano matou mo nga mea hei arotau.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

He aha ta tatou kei muri i nga whakaaturanga? He ruarua tonu nga tukunga kaore au i whakaaro, na te mea he iti te wa.

He pgstattuple he kōwae tāpiri anō mai i te mōkihi takoha paerewa. Ka taea e koe te arotake bloat tepu, e kiia nei. wehewehe tepu. A, ki te nui te wehenga, me tango e koe, whakamahia nga taputapu rereke. Me te mahi pgstattuple mahi mo te wa roa. A, ka nui ake nga tepu, ka roa te mahi.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

Ko te takoha e whai ake nei pg_buffercache. Ka taea e koe te tirotiro i nga papaaa tiritiri: pehea te kaha me te whakamahi i nga wharangi papaaa tepu. A ka taea noa e koe te titiro ki nga paanui tiritahi me te arotake i nga mea kei reira.

Ko te kōwae e whai ake nei pgfincore. Ka taea e koe te mahi i nga mahi ripanga taumata-iti ma te waea punaha mincore(), ara ka taea e koe te uta i te teepu ki roto i nga parepare tiritahi, ka wetewete ranei. A ka taea e ia, i roto i era atu mea, ki te tirotiro i te keteroki wharangi o te punaha whakahaere, ara, te nui o te teepu kei roto i te keteroki wharangi, i roto i nga papaa tiritiri, ka taea noa e koe te arotake i te kawenga i runga i te tepu.

Ko te kōwae e whai ake nei pg_stat_kcache. Ka whakamahia hoki e ia te waea punaha getrusage(). A ka mahia e ia i mua i muri i te tononga o te tono. A, i roto i nga tatauranga kua whiwhi, ka taea e maatau te whakatau i te nui o ta matou tono i whakapaua ki te kōpae I / O, ara, nga mahi me te punaha konae me te titiro ki te whakamahinga o te tukatuka. Heoi, he rangatahi (khe-khe) te kōwae, ā, mō āna mahi ka hiahiatia te PostgreSQL 9.4 me te pg_stat_statements, i kōrerohia e au i mua.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

  • He whai hua te kaha ki te whakamahi i nga tatauranga. Kaore koe e hiahia ana ki te rorohiko tuatoru. Ka taea e koe te titiro, te kite, te mahi i tetahi mea, te mahi.

  • He ngawari te whakamahi i nga tatauranga, he SQL noa. I kohia e koe he tono, i whakahiato, i tukuna, i tirohia.

  • Ka awhina nga tatauranga ki te whakautu i nga paatai. Mena kei a koe nga patai, ka huri koe ki nga tatauranga - tirohia, whakatauhia, tātarihia nga hua.

  • Me te whakamatautau. He maha nga tono, he maha nga raraunga. Ka taea e koe te arotau i etahi patai o naianei. Ka taea e koe te hanga i to ake ake putanga o te tono e pai ake ana ki a koe i te mea taketake me te whakamahi.

Te ruku hohonu ki nga tatauranga o roto o PostgreSQL. Alexey Lesovsky

tohutoro

Ko nga hononga whaimana i kitea i roto i te tuhinga, i runga i era, kei roto i te ripoata.

Kaituhi tuhi atu
https://dataegret.com/news-blog (eng)

Te Kaikohi Tauanga
https://www.postgresql.org/docs/current/monitoring-stats.html

Nga Mahi Whakahaere Pūnaha
https://www.postgresql.org/docs/current/functions-admin.html

Whakauruhia nga waahanga
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

Nga taputapu SQL me nga tauira waehere sql
https://github.com/dataegret/pg-utils

Nga mihi ki a koutou katoa mo to koutou aro!

Source: will.com

Tāpiri i te kōrero