Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Athscríbhinn de chaint Bruce Momjian 2020 "Díghlasáil Bainisteoir Glas Postgres".

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

(Nóta: Is féidir gach ceist SQL ó na sleamhnáin a fháil ón nasc seo: http://momjian.us/main/writings/pgsql/locking.sql)

Dia dhuit! Tá sé iontach a bheith anseo sa Rúis arís. Tá brón orm nach raibh mé in ann teacht anuraidh, ach i mbliana tá pleananna móra ag Ivan agus mé féin. Tá súil agam a bheith anseo i bhfad níos minice. Is breá liom teacht go dtí an Rúis. Tabharfaidh mé cuairt ar Tyumen, Tver. Tá an-áthas orm go mbeidh mé in ann cuairt a thabhairt ar na cathracha seo.

Bruce Momjian is ainm dom. Oibrím ag EnterpriseDB agus táim ag obair le Postgres le breis agus 23 bliain. Tá mé i mo chónaí i Philadelphia, SAM. Taistealaim thart ar 90 lá sa bhliain. Agus freastalaíonn mé ar thart ar 40 comhdháil. Mo láithreán gréasáin, ina bhfuil na sleamhnáin a thaispeánfaidh mé duit anois. Mar sin, tar éis na comhdhála is féidir leat iad a íoslódáil ó mo shuíomh Gréasáin pearsanta. Tá thart ar 30 cur i láthair ann freisin. Tá físeáin agus líon mór iontrálacha blag ann freisin, níos mó ná 500. Is acmhainn sách faisnéiseach é seo. Agus má tá suim agat san ábhar seo, ansin tugaim cuireadh duit é a úsáid.

Bhíodh mé i mo mhúinteoir, i mo ollamh sular thosaigh mé ag obair le Postgres. Agus is mór an t-áthas orm go mbeidh mé in ann anois a insint duit cad atá mé ar tí a insint duit. Seo ceann de na cur i láthair is suimiúla atá agam. Agus tá 110 sleamhnán sa chur i láthair seo. Tosóimid ag caint le rudaí simplí, agus faoi dheireadh beidh an tuarascáil ag éirí níos casta agus níos casta.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is comhrá sách míthaitneamhach é seo. Ní blocáil an t-ábhar is coitianta. Ba mhaith linn go n-imeoidh sé seo áit éigin. Tá sé cosúil le dul chuig an bhfiaclóir.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

  1. Is fadhb é an glasáil do go leor daoine a oibríonn i mbunachair shonraí agus a bhfuil próisis iolracha ar siúl acu ag an am céanna. Caithfidh siad blocáil. Is é sin, inniu tabharfaidh mé eolas bunúsach duit ar bhlocáil.
  2. Aitheantais idirbhirt. Is cuid sách leadránach é seo den chur i láthair, ach ní mór iad a thuiscint.
  3. Next beidh muid ag caint faoi na cineálacha blocála. Is cuid measartha meicniúil é seo.
  4. Agus thíos tabharfaimid roinnt samplaí de bhlocáil. Agus beidh sé deacair go leor a thuiscint.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Labhraímis faoi bhlocáil.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Tá ár dtéarmaíocht casta go leor. Cé mhéad agaibh a bhfuil a fhios agat cad as a dtagann an sliocht seo? Beirt. Tá sé seo ó chluiche ar a dtugtar Colossal Cave Adventure. Cluiche ríomhaire téacsbhunaithe a bhí ann sna 80í, sílim. Bhí ort dul isteach i bpluais ansin, isteach i labyrinth, agus d'athraigh an téacs, ach bhí an t-ábhar beagnach mar an gcéanna gach uair. Sin mar is cuimhin liom an cluiche seo.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus anseo feicimid ainm na glais a tháinig chugainn ó Oracle. Úsáidimid iad.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Anseo feicimid téarmaí a chuireann mearbhall orm. Mar shampla, SHARE Update ECXLUSIVE. Ar Aghaidh SHARE RAW ECXLUSIVE. Chun a bheith macánta, níl na hainmneacha seo an-soiléir. Déanfaimid iarracht iad a mheas go mion. Tá an focal “roinnt” i gcuid acu, rud a chiallaíonn scaradh. Tá an focal “eisiach” i gcuid acu. Tá an dá fhocal seo i gcuid acu. Ba mhaith liom tosú leis an gcaoi a n-oibríonn na glais seo.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus tá an focal “rochtain” an-tábhachtach freisin. Agus is teaghrán iad na focail “as a chéile”. Is é sin, dáileadh rochtana, dáileadh rónna.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Saincheist eile nach mór a thuiscint in Postgres, ar an drochuair ní bheidh mé in ann a chlúdach le linn mo chuid cainte, ná MVCC. Tá cur i láthair ar leith agam ar an ábhar seo ar mo shuíomh Gréasáin. Agus má cheapann tú go bhfuil an cur i láthair seo deacair, is dócha gurb é MVCC an ceann is deacra orm. Agus má tá suim agat, is féidir leat féachaint air ar an suíomh Gréasáin. Is féidir leat féachaint ar an bhfíseán.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Rud eile nach mór dúinn a thuiscint ná IDanna idirbheart. Ní féidir le go leor idirbheart oibriú gan aitheantóirí uathúla. Agus anseo tá míniú againn ar cad is idirbheart ann. Tá dhá chóras uimhrithe idirbheart ag Postgres. Tá a fhios agam nach réiteach an-deas é seo.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Chomh maith leis sin a choinneáil i gcuimhne go mbeidh na sleamhnáin sách deacair a thuiscint, mar sin is é an rud atá aibhsithe i dearg ná an méid is gá duit aird a thabhairt air.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

http://momjian.us/main/writings/pgsql/locking.sql

Ligean ar a fheiceáil. Tá uimhir an idirbhirt aibhsithe i dearg. Taispeántar an fheidhm SELECT pg_back anseo. Tugann sé m'idirbheart ar ais agus aitheantas an idirbhirt.

Rud amháin eile, más maith leat an cur i láthair seo agus más mian leat é a rith ar do bhunachar sonraí, is féidir leat dul chuig an nasc seo i bándearg agus an SQL a íoslódáil don chur i láthair seo. Agus is féidir leat é a rith go simplí i do PSQL agus beidh an cur i láthair iomlán ar do scáileán láithreach. Ní bheidh bláthanna ann, ach ar a laghad is féidir linn é a fheiceáil.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Sa chás seo feicimid ID an idirbhirt. Seo í an uimhir a thugamar di. Agus tá cineál eile aitheantais idirbhirt i Postgres, ar a dtugtar ID idirbheart fíorúil

Agus ní mór dúinn a thuiscint seo. Tá sé seo an-tábhachtach, ar shlí eile ní bheidh muid in ann glasáil i Postgres a thuiscint.

Is ionann ID idirbhirt fhíorúil agus aitheantas idirbhirt nach bhfuil luachanna marthanacha ann. Mar shampla, má rithim ordú SELECT, ansin is dócha nach n-athróidh mé an bunachar sonraí, ní ghlasfaidh mé rud ar bith. Mar sin nuair a bhíonn SELECT simplí á reáchtáil againn, ní thugaimid aitheantas leanúnach don idirbheart sin. Ní thugaimid ach ID fíorúil di ansin.

Agus feabhsaíonn sé seo feidhmíocht Postgres, feabhsaíonn sé cumais glanta, agus mar sin tá dhá uimhir san ID idirbheart fíorúil. Is é an chéad uimhir roimh an slaise ná an t-aitheantas backend. Agus ar dheis ní fheicimid ach cuntar.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Mar sin, má rithim iarratas, deir sé gurb é 2 an t-aitheantas backend.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus má ritheann mé sraith idirbheart den sórt sin, ansin feicimid go méadaíonn an gcuntar gach uair a ritheann mé ceist. Mar shampla, nuair a ritheann mé an cheist 2/10, 2/11, 2/12, etc.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Coinnigh i gcuimhne go bhfuil dhá cholún anseo. Ar thaobh na láimhe clé feicimid ID an idirbhirt fhíorúil - 2/12. Agus ar dheis tá ID idirbhirt bhuan againn. Agus tá an réimse seo folamh. Agus ní athraíonn an t-idirbheart seo an bunachar sonraí. Mar sin ní thugaim aitheantas idirbhirt bhuan dó.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Chomh luath agus a ritheann mé an t-ordú anailíse ((ANALYZE)), tugann an cheist chéanna aitheantas idirbhirt bhuan dom. Féach mar a d'athraigh sé seo dúinn. Ní raibh an t-aitheantas seo agam roimhe seo, ach tá sé agam anois.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Mar sin, seo iarratas eile, idirbheart eile. Is é an uimhir idirbhirt fíorúil 2/13. Agus má iarraim ID idirbhirt leanúnach, ansin nuair a ritheann mé an cheist, gheobhaidh mé é.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Mar sin, uair amháin eile. Tá aitheantas idirbhirt fhíorúil againn agus aitheantas idirbhirt marthanach. Just a thuiscint an bpointe seo chun iompar Postgres a thuiscint.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Bogaimid ar aghaidh go dtí an tríú cuid. Anseo beimid ag siúl go simplí trí na cineálacha éagsúla glais i Postgres. Níl sé an-suimiúil. Beidh an chuid dheireanach i bhfad níos suimiúla. Ach ní mór dúinn na rudaí bunúsacha a mheas, mar ar shlí eile ní thuigfimid cad a tharlóidh.

Rachaimid tríd an alt seo, féachfaimid ar gach cineál glas. Agus taispeánfaidh mé samplaí duit de conas a shuiteáiltear iad, conas a oibríonn siad, taispeánfaidh mé roinnt ceisteanna duit is féidir leat a úsáid chun a fheiceáil conas a oibríonn glasáil i Postgres.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Chun ceist a chruthú agus a fheiceáil cad atá ag tarlú i Postgres, ní mór dúinn an cheist a eisiúint i radharc an chórais. Sa chás seo, tá pg_lock aibhsithe i dearg. Is tábla córais é Pg_lock a insíonn dúinn cad iad na glais atá in úsáid faoi láthair i Postgres.

Mar sin féin, tá sé an-deacair dom pg_lock a thaispeáint duit leis féin toisc go bhfuil sé casta go leor. Mar sin chruthaigh mé radharc a thaispeánann pg_locks. Agus déanann sé roinnt oibre dom freisin a ligeann dom tuiscint níos fearr a fháil. Is é sin, fágann sé mo ghlais, mo sheisiún féin, etc. Níl ann ach SQL caighdeánach agus ligeann sé duit a thaispeáint duit cad atá ar siúl.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Fadhb eile ná go bhfuil an dearcadh seo an-leathan, mar sin caithfidh mé an dara ceann a chruthú - lockview2.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian Agus taispeánann sé níos mó colúin ón tábla dom. Agus ceann eile a thaispeánann dom an chuid eile de na colúin. Tá sé seo casta go leor, agus mar sin rinne mé iarracht é a chur i láthair chomh simplí agus is féidir.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Mar sin chruthaigh muid tábla ar a dtugtar Lockdemo. Agus chruthaigh muid líne amháin ann. Is é seo ár tábla samplach. Agus beidh rannóga á gcruthú againn ach chun samplaí de ghlais a thaispeáint duit.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Mar sin, sraith amháin, colún amháin. Tugtar ROCHTAIN SHARE ar an gcéad chineál glas. Is é seo an blocáil is lú srianta. Ciallaíonn sé seo go praiticiúil nach bhfuil sé salach ar a chéile le glais eile.

Agus más mian linn glas a shainiú go sainráite, rithimid an t-ordú “tábla glasála”. Agus cuirfidh sé bac ar ndóigh, ie i mód ACCESS SHARE seolann muid an tábla glasála. Agus má ritheann mé PSQL sa chúlra, ansin cuirim tús leis an dara seisiún ó mo chéad seisiún ar an mbealach seo. Is é sin, cad a dhéanfaidh mé anseo? Téim chuig seisiún eile agus deirim leis "taispeáin dom an lockview don iarratas seo." Agus anseo tá AccessShareLock agam sa tábla seo. Is é seo go díreach a d'iarr mé. Agus deir sé go bhfuil an bloc sannta. An-simplí.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Thairis sin, má táimid ar an dara colún, ansin níl aon rud ann. Tá siad folamh.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus má ritheann mé an t-ordú "SELECT", ansin is é seo an bealach intuigthe (follasach) chun AccessShareLock a iarraidh. Mar sin scaoilim mo bhord agus rithim an cheist agus filleann an cheist i sraitheanna iolracha. Agus i gceann de na línte feicimid AccessShareLock. Mar sin, cuireann SELECT glaoch ar AccessShareLock ar an tábla. Agus ní thagann sé salach ar beagnach rud ar bith mar is glas íseal-leibhéil é.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Cad a tharlóidh má rithim SELECT agus go bhfuil trí tábla éagsúla agam? Roimhe seo ní raibh mé ag rith ach tábla amháin, anois tá mé ag rith trí: pg_class, pg_namespace agus pg_attribute.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus anois nuair a fhéachaim ar an gceist, feicim 9 AccessShareLocks i dtrí tábla. Cén fáth? Aibhsítear trí thábla i gorm: pg_attribute, pg_class, pg_namespace. Ach is féidir leat a fheiceáil freisin go bhfuil AccessShareLock ag gach innéacs a shainítear trí na táblaí seo.

Agus is glas é seo nach dtagann salach ar dhaoine eile go praiticiúil. Agus is é an rud a dhéanann sé ach cosc ​​​​a chur orainn an tábla a athshocrú agus muid á roghnú. Déanann sé ciall. Is é sin, má roghnaíonn muid tábla, imíonn sé ag an nóiméad, ansin tá sé seo mícheart, mar sin Is glas leibhéal íseal é AccessShare a insíonn dúinn "ná scaoil an tábla seo agus mé ag obair". Go bunúsach, sin é go léir a dhéanann sí.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

ROW SHARE - Tá an glas seo beagán difriúil.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Glacaimis sampla. ROGHNACH ROINN ROINNT modh chun gach sraith a ghlasáil ina n-aonar. Ar an mbealach seo ní féidir le duine ar bith iad a scriosadh nó iad a athrú agus muid ag breathnú orthu.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce MomjianMar sin cad a dhéanann SHARE LOCK? Feicimid gurb é ID an idirbhirt 681 le haghaidh SELECT. Agus tá sé seo suimiúil. Cad a tharla anseo? Is é an chéad uair a fheicimid an uimhir sa réimse “Lock”. Glacaimid ID an idirbhirt agus deir sé go bhfuil sé ag cur bac air i mód eisiach. Ní dhéanann sé ach a rá go bhfuil sraith agam atá faoi ghlas go teicniúil áit éigin sa tábla. Ach ní deir sé cá háit go díreach. Breathnóimid air seo beagán níos déanaí.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Anseo deirimid go bhfuil an glas in úsáid againn.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Mar sin, deir glas eisiach go sainráite go bhfuil sé eisiach. Agus freisin má scriosann tú as a chéile sa tábla seo, ansin is é seo a tharlóidh, mar a fheiceann tú.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is glas níos faide é SHARE EXCLUSIVE.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is é seo an t-ordú anailíseora (ANAILÍS) a úsáidfear.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

SHARE LOCK - is féidir leat a ghlasáil go sainráite i mód scaireanna.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is féidir leat innéacs uathúil a chruthú freisin. Agus is féidir leat a fheiceáil SHARE LOCK, atá mar chuid acu. Agus glas sé an bord agus cuireann SHARE LOCK air.

De réir réamhshocraithe, ciallaíonn SHARE LOCK ar tábla gur féidir le daoine eile an tábla a léamh, ach ní féidir le duine ar bith é a mhodhnú. Agus is é seo go díreach cad a tharlaíonn nuair a chruthaíonn tú innéacs uathúil.

Má chruthaím innéacs uathúil comhthráthach, ansin beidh cineál difriúil glasála agam mar, mar is cuimhin leat, laghdaítear an riachtanas glasála trí innéacsanna comhthráthacha a úsáid. Agus má úsáidim glas gnáth, gnáth-innéacs, ansin cuirfidh mé cosc ​​​​ar scríobh chuig an innéacs tábla agus é á chruthú. Má úsáidim innéacs comhthráthach, ansin is gá dom cineál difriúil glasála a úsáid.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

ROINN ROIMHE EISIACH – arís is féidir é a shocrú go sainráite (go follasach).

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Nó is féidir linn riail a chruthú, i.e. cás sonrach a ghlacadh ina n-úsáidfear í.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Ciallaíonn glasáil EXCLUSIVE nach féidir le duine ar bith eile an tábla a athrú.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Anseo feicimid cineálacha éagsúla glais.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is ordú blocála é ROCHTAIN EXCLUSIVE, mar shampla. Mar shampla, má dhéanann tú CLUSTER table, ansin ciallóidh sé seo nach mbeidh aon duine in ann scríobh ann. Agus glasann sé ní hamháin an tábla féin, ach freisin na hinnéacsanna.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is é seo an dara leathanach den bhlocáil ACCESS EXCLUSIVE, áit a bhfeicimid go díreach cad a bhlocálann sé sa tábla. Glais sé sraitheanna tábla aonair, rud atá suimiúil go leor.

Sin an t-eolas bunúsach ar fad a theastaigh uaim a thabhairt. Labhraíomar faoi ghlasanna, faoi aitheantais idirbhirt, labhair muid faoi IDanna idirbheart fíorúla, faoi aitheantais idirbheart buan.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus anois beidh muid ag dul trí roinnt samplaí blocála. Is é seo an chuid is suimiúla. Breathnóimid ar chásanna an-suimiúla. Agus is é an sprioc atá agam sa chur i láthair seo ná tuiscint níos fearr a thabhairt duit ar cad atá á dhéanamh i ndáiríre ag Postgres nuair a dhéanann sé iarracht bac a chur ar rudaí áirithe. Sílim go bhfuil sé an-mhaith ag blocáil páirteanna amach.

Breathnaímid ar roinnt samplaí sonracha.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Tosóimid le táblaí agus sraith amháin i dtábla. Nuair a chuirim rud éigin isteach tá ExclusiveLock, ID Idirbheart agus ExclusiveLock agam ar taispeáint ar an tábla.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Cad a tharlóidh má chuirim dhá shraith eile isteach? Agus anois tá trí shraith ar ár tábla. Agus chuir mé isteach as a chéile amháin agus fuair mé seo mar aschur. Agus má chuirim dhá shraith eile isteach, cad atá aisteach faoi sin? Tá rud aisteach anseo mar tá trí shraith curtha leis an tábla seo agam, ach tá dhá shraith sa tábla glas fós agam. Agus is é seo go bunúsach iompar bunúsach Postgres.

Síleann go leor daoine má ghlasálann tú 100 sraith i mbunachar sonraí, ansin beidh ort 100 iontráil glasála a chruthú. Má chuirim bac ar 1 sraith ag an am céanna, beidh 000 ceist den sórt sin ag teastáil uaim. Agus má theastaíonn milliún nó billiún uaim le blocáil. Ach má dhéanaimid é seo, ní oibreoidh sé go han-mhaith. Má d'úsáid tú córas a chruthaíonn iontrálacha blocála do gach sraith aonair, is féidir leat a fheiceáil go bhfuil sé seo casta. Toisc go gcaithfidh tú tábla glais a shainiú láithreach a fhéadfaidh cur thar maoil, ach ní dhéanann Postgres é sin.

Agus is é an rud atá fíor-thábhachtach faoin sleamhnán seo ná go léiríonn sé go soiléir go bhfuil córas eile a ritheann taobh istigh de MVCC a ghlasálann sraitheanna aonair. Mar sin nuair a ghlasálann tú na billiúin sraitheanna, ní chruthaíonn Postgres billiún ordú glasála ar leith. Agus tá éifeacht an-mhaith aige seo ar tháirgiúlacht.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Cad mar gheall ar nuashonrú? Tá an tsraith nua á nuashonrú agam anois, agus is féidir leat a fheiceáil go bhfuil dhá oibríocht dhifriúla déanta aige ag an am céanna. ghlas sé an tábla ag an am céanna, ach ghlas sé an t-innéacs freisin. Agus b'éigean dó an t-innéacs a ghlasáil mar go bhfuil srianta uathúla ar an tábla seo. Agus ba mhaith linn a chinntiú nach n-athraíonn aon duine é, mar sin cuirimid bac air.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Cad a tharlaíonn má theastaíonn uaim dhá shraith a nuashonrú? Agus feicimid go n-iompraíonn sé ar an mbealach céanna. Déanaimid dhá oiread nuashonruithe, ach go díreach an líon céanna línte glais.

Má tá tú ag smaoineamh ar conas a dhéanann Postgres é seo, beidh ort éisteacht le mo chuid cainteanna ar MVCC chun a fháil amach conas a mharcálann Postgres go hinmheánach na línte seo a athraíonn sé. Agus tá bealach ag Postgres ina ndéanann sé é seo, ach ní dhéanann sé é ag leibhéal glasála an bhoird, déanann sé é ag leibhéal níos ísle agus níos éifeachtaí.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Cad a tharlóidh má theastaíonn uaim rud éigin a scriosadh? Má scriosann mé, mar shampla, sraith amháin agus tá mo dhá ionchur blocála fós agam, agus fiú má theastaíonn uaim iad go léir a scriosadh, tá siad fós ann.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus, mar shampla, ba mhaith liom 1 líne a chur isteach, agus ansin 000 líne a scriosadh nó a chur leis, ansin na línte aonair sin a chuireann mé nó a athraíonn mé, ní dhéantar iad a thaifeadadh anseo. Tá siad scríofa ag leibhéal níos ísle laistigh den tsraith féin. Agus le linn óráid an MVCC labhair mé faoi seo go mion. Ach tá sé an-tábhachtach agus tú ag déanamh anailís ar ghlais chun a chinntiú go bhfuil tú ag glasáil ar leibhéal an tábla agus nach bhfuil tú ag feiceáil conas a dhéantar sraitheanna aonair a thaifeadadh anseo.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Cad mar gheall ar bhlocáil follasach?

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Má chliceálann mé athnuachan, tá dhá shraith glasáilte agam. Agus má roghnaíonn mé iad go léir agus cliceáil "nuashonraigh i ngach áit," tá dhá thaifead blocála fós agam.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Ní chruthaímid taifid ar leith do gach ró ar leith. Toisc go dtiteann táirgiúlacht ansin, d’fhéadfadh go mbeadh an iomarca de ann. Agus b’fhéidir go mbeimid i gcás míthaitneamhach.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus an rud céanna, má dhéanaimid roinnte, is féidir linn é a dhéanamh 30 uair.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Déanaimid ár tábla a athchóiriú, scriosaimid gach rud, ansin cuir isteach sraith amháin arís.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Iompar eile a fheiceann tú i Postgres a bhfuil an-aithne air agus iompraíocht inmhianaithe is ea gur féidir leat nuashonrú nó rogha a dhéanamh. Agus is féidir leat é seo a dhéanamh ag an am céanna. Agus ní chuireann roghnú bac ar nuashonrú agus an rud céanna sa treo eile. Deirimid leis an léitheoir gan bac a chur ar an scríbhneoir, agus níor bhac an scríbhneoir leis an léitheoir.

Taispeánfaidh mé sampla de seo duit. Déanfaidh mé rogha anois. Déanfaimid an INSERT ansin. Agus ansin is féidir leat a fheiceáil - 694. Is féidir leat a fheiceáil ar an ID an idirbhirt a rinne seo a chur isteach. Agus sin mar a oibríonn sé.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus má fhéachaim ar m'aitheantas inneall anois, is é 695 é anois.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus is féidir liom 695 a fheiceáil le feiceáil i mo tábla.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus má dhéanaim nuashonrú mar seo anseo, gheobhaidh mé cás difriúil ansin. Sa chás seo, is glas eisiach é 695, agus tá an iompar céanna ag nuashonrú, ach níl aon choimhlint eatarthu, rud atá neamhghnách go leor.

Agus is féidir leat a fheiceáil go bhfuil ShareLock ag an mbarr, agus ag an mbun is é ExclusiveLock é. Agus d'oibrigh an dá idirbheart amach.

Agus ní mór duit éisteacht le mo chaint ag MVCC chun tuiscint a fháil ar conas a tharlaíonn sé seo. Ach is léiriú é seo gur féidir leat é a dhéanamh ag an am céanna, i.e. ROGHNÚ agus NUASHONRUITHE a dhéanamh ag an am céanna.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

A ligean ar a athshocrú agus a dhéanamh oibríocht amháin eile.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Má dhéanann tú iarracht dhá nuashonrú a rith go comhuaineach ar an tsraith chéanna, cuirfear bac air. Agus cuimhnigh, dúirt mé nach gcuireann an léitheoir bac ar an scríbhneoir, agus nach gcuireann an scríbhneoir bac ar an léitheoir, ach go gcuireann scríbhneoir amháin bac ar scríbhneoir eile. Is é sin le rá, ní féidir linn beirt a thabhairt cothrom le dáta an tsraith chéanna ag an am céanna. Caithfidh tú fanacht go dtí go gcríochnaíonn ceann acu.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus chun é seo a léiriú, féachfaidh mé ar an tábla Lockdemo. Agus féachfaimid ar a chéile amháin. In aghaidh an idirbhirt 698.

Táimid tar éis é seo a nuashonrú go 2. Is é 699 an chéad nuashonrú. Agus d'éirigh leis nó go bhfuil sé in idirbheart ar feitheamh agus tá sé ag fanacht linn a dhearbhú nó a chealú.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Ach féach ar rud éigin eile - is é 2/51 ár gcéad idirbheart, ár gcéad seisiún. Is é 3/112 an dara hiarratas a tháinig ón mbarr a d’athraigh an luach sin go 3. Agus má thugann tú faoi deara, ghlas an ceann is airde é féin, is é sin 699. Ach níor dheonaigh 3/112 an glas. Deir an colún Lock_mode cad a bhfuil sé ag fanacht. Tá sé ag súil le 699. Agus má fhéachann tú ar an áit a bhfuil 699, tá sé níos airde. Agus cad a rinne an chéad seisiún? Chruthaigh sí glas eisiach ar a haitheantas idirbhirt féin. Seo mar a dhéanann Postgres é. Blocann sé a ID idirbhirt féin. Agus más mian leat fanacht le duine éigin a dhearbhú nó a chealú, ansin ní mór duit fanacht fad is atá idirbheart ar feitheamh. Agus sin an fáth gur féidir linn líne aisteach a fheiceáil.

Breathnaímis arís. Ar thaobh na láimhe clé feicimid ár ID próiseála. Sa dara colún feicimid ár ID idirbheart fíorúil, agus sa tríú feicimid lock_type. Cad a chiallaíonn sé seo? Go bunúsach is é an rud a deir sé ná go bhfuil sé ag cur bac ar ID an idirbhirt. Ach faoi deara go bhfuil a rá go léir na sraitheanna ag bun an gaol. Agus mar sin tá dhá chineál glais agat ar an tábla. Tá glas gaol ann. Agus ansin tá an blocáil idirbheartaíochta, áit a ndéanann tú bac ar do chuid féin, agus is é sin go díreach a tharlaíonn ar an gcéad sraith nó ag an mbun, áit a bhfuil an t-idirbheart, áit a bhfuilimid ag fanacht le 699 chun a oibríocht a chríochnú.

Feicfidh mé cad a tharlaíonn anseo. Agus anseo tarlaíonn dhá rud ag an am céanna. Tá tú ag féachaint ar ghlas aitheantais idirbhirt sa chéad ró a ghlasálann é féin. Agus bloic sí í féin a chur ar dhaoine fanacht.

Má fhéachann tú ar an 6ú líne, is é an iontráil chéanna é leis an gcéad cheann. Agus dá bhrí sin tá bac ar idirbheart 699. Tá 700 féinghlasáladh freisin. Agus ansin sa tsraith íochtair feicfidh tú go bhfuil muid ag fanacht le 699 chun a oibriú a chríochnú.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus i lock_type, tuple fheiceann tú uimhreacha.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is féidir leat a fheiceáil go bhfuil sé 0/10. Agus is é seo uimhir an leathanaigh, agus freisin fritháireamh an tsraith áirithe seo.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus feiceann tú go mbeidh sé 0/11 nuair a thabhairt cothrom le dáta againn.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Ach i ndáiríre tá sé 0/10, toisc go bhfuil fanacht ar an oibríocht. Tá deis againn a fheiceáil gurb í seo an tsraith atá mé ag fanacht le deimhniú.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Nuair a bheidh sé deimhnithe againn agus tiomantas brúite, agus nuair a bheidh an nuashonrú críochnaithe, is é seo a gheobhaidh muid arís. Is é Idirbheart 700 an t-aon ghlas, ní fhanann sé le haon duine eile toisc go ndearnadh é. Fanann sé go simplí leis an idirbheart a chríochnú. Nuair a ritheann 699 amach, ní fhanaimid le haon rud a thuilleadh. Agus anois deir idirbheart 700 go bhfuil gach rud go breá, go bhfuil na glais go léir a theastaíonn uaidh ar na táblaí ceadaithe go léir.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus chun an rud iomlán seo a dhéanamh níos casta fós, cruthaímid radharc eile, a sholáthróidh an t-am seo ordlathas dúinn. Nílim ag súil go dtuigfidh tú an t-iarratas seo. Ach tabharfaidh sé seo léargas níos soiléire dúinn ar cad atá ar siúl.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is dearcadh athfhillteach é seo a bhfuil alt eile ann freisin. Agus ansin tugann sé gach rud ar ais le chéile arís. A ligean ar úsáid seo.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Cad a tharlaíonn má dhéanaimid trí nuashonrú comhuaineach agus a rá go bhfuil an tsraith anois trí. Agus athróimid 3 go 4.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus anseo feicimid 4. Agus ID idirbheart 702.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus ansin athróidh mé 4 go 5. Agus 5 go 6, agus 6 go 7. Agus beidh mé ag teacht suas le roinnt daoine a bheidh ag fanacht go dtiocfaidh deireadh leis an idirbheart amháin seo.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus éiríonn gach rud soiléir. Cad é an chéad sraith? Is é seo 702. Seo an t-aitheantas idirbhirt a shocraigh an luach seo ar dtús. Cad atá scríofa i mo cholún Deonaithe? Tá marcanna agam f. Seo iad mo nuashonruithe nach féidir (5, 6, 7) a cheadú toisc go bhfuilimid ag fanacht le deireadh a chur le hID idirbheart 702. Tá blocáil aitheantais idirbhirt againn ansin. Agus bíonn 5 ghlais ID idirbheartaíochta mar thoradh air seo.

Agus má fhéachann tú ar 704, ar 705, níl aon rud scríofa ann fós, mar níl a fhios acu cad atá ar siúl go fóill. Scríobhann siad go simplí nach bhfuil aon tuairim acu cad atá ag tarlú. Agus beidh siad ag dul a chodladh díreach mar go bhfuil siad ag fanacht le duine éigin a chríochnú agus a bheith dúisithe nuair a bhíonn deis chun sraitheanna a athrú.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Seo an chuma atá air. Is léir go bhfuil siad ar fad ag fanacht leis an 12ú líne.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Seo an méid a chonaic muid anseo. Seo é 0/12.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Mar sin, nuair a bheidh an chéad idirbheart ceadaithe, is féidir leat a fheiceáil anseo conas a oibríonn an t-ordlathas. Agus anois éiríonn gach rud soiléir. Éiríonn siad go léir glan. Agus tá siad i ndáiríre fós ag fanacht.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Seo an méid atá ag tarlú. 702 gealltanas. Agus anois faigheann 703 an glas sraithe seo, agus ansin tosaíonn 704 ag fanacht le 703 a ghealladh. Agus tá an 705 ag fanacht leis seo freisin. Agus nuair a bheidh sé seo go léir críochnaithe, siad iad féin a ghlanadh suas. Agus ba mhaith liom a chur in iúl go bhfuil gach duine i líne suas. Agus tá sé seo an-chosúil le staid i marmalÚid tráchta nuair a bhíonn gach duine ag fanacht leis an gcéad charr. Stopann an chéad charr agus téann gach duine i líne fhada. Ansin bogann sé, ansin is féidir leis an gcéad charr eile tiomáint ar aghaidh agus a bhloc a fháil, etc.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus más rud é nach raibh an chuma air seo casta go leor duit, ansin labhróimid leat anois faoi na spárálaíscáileáin. Níl a fhios agam cé acu agaibh a casadh orthu. Is fadhb choitianta í seo i gcórais bhunachar sonraí. Ach is é an rud is tábhachtaí ná nuair a bhíonn seisiún amháin ag fanacht le seisiún eile chun rud éigin a dhéanamh. Agus ag an nóiméad seo tá seisiún eile ag fanacht leis an gcéad seisiún rud éigin a dhéanamh.

Agus, mar shampla, má deir Ivan: "Tabhair rud éigin dom," agus deirim: "Ní thabharfaidh mé duit é ach má thugann tú rud éigin eile dom." Agus deir sé, "Ní thabharfaidh mé duit é mura dtabharfaidh tú dom é." Agus deireadh muid suas i staid deadlock. Tá mé cinnte nach ndéanfaidh Ivan é seo, ach tuigeann tú an bhrí go bhfuil beirt againn atá ag iarraidh rud éigin a fháil agus nach bhfuil siad réidh é a thabhairt ar shiúl go dtí go dtugann an duine eile dóibh cad is mian leo. Agus níl aon réiteach ann.

Agus go bunúsach, ní mór do do bhunachar sonraí é seo a bhrath. Agus ansin ní mór duit ceann de na seisiúin a scriosadh nó a dhúnadh, mar ar shlí eile fanfaidh siad ann go deo. Agus feicimid é i bunachair shonraí, feicimid é i gcórais oibriúcháin. Agus i ngach áit ina bhfuil próisis chomhthreomhara againn, féadfaidh sé seo tarlú.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus anois déanfaimid dhá deadlocks a shuiteáil. Cuirfimid 50 agus 80. Sa chéad ró, nuashonróidh mé ó 50 go 50. Gheobhaidh mé uimhir idirbheart 710.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus ansin athróidh mé 80 go 81, agus 50 go 51.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus is é seo an chuma a bheidh air. Agus mar sin tá bac ar shraith 710, agus tá 711 ag fanacht le deimhniú. Chonaiceamar é seo nuair a thugamar cothrom le dáta. Is é 710 úinéir ár sraithe. Agus fanann 711 ar 710 chun an t-idirbheart a chríochnú.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus deir sé fiú ar a chéile a tharlaíonn na deadlocks. Agus anseo nuair a thosaíonn sé a fháil aisteach.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Anois táimid ag nuashonrú 80 go 80.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus is é seo an áit a dtosaíonn na deadlocks. Tá 710 ag fanacht le freagra ó 711, agus tá 711 ag fanacht le 710. Agus ní chríochnaíonn sé seo go maith. Agus níl aon bhealach amach as seo. Agus beidh siad ag súil le freagra óna chéile.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus beidh sé tús ach moill a chur ar gach rud. Agus nílimid ag iarraidh sin.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus tá bealaí ag Postgres a thabhairt faoi deara nuair a tharlaíonn sé seo. Agus nuair a tharlaíonn sé seo, gheobhaidh tú an earráid seo. Agus as seo tá sé soiléir go bhfuil a leithéid agus próiseas den sórt sin ag fanacht le SHARE LOCK ó phróiseas eile, i.e., a bhfuil bac ar phróiseas 711 air. Agus bhí an próiseas sin ag fanacht le SHARE LOCK a thabhairt ar a leithéid agus a leithéid d’aitheantas idirbhirt agus cuireadh bac air le próiseas dá leithéid. Mar sin, tá staid sáinnithe anseo.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

An bhfuil glas trí bhealaigh ann? An féidir? Tá.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Cuirimid na huimhreacha seo isteach i dtábla. Athraíonn muid 40 go 40, déanaimid blocáil.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Athraíonn muid 60 go 61, 80 go 81.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus ansin athraíonn muid 80 agus ansin borradh!

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus tá 714 ag fanacht anois ar 715. Tá an 716ú ag fanacht leis an 715ú. Agus ní féidir aon rud a dhéanamh faoi.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Níl beirt anseo a thuilleadh, tá triúr anseo cheana féin. Ba mhaith liom rud éigin uait, tá an ceann seo ag iarraidh rud éigin ó thríú duine, agus tá an tríú duine ag iarraidh rud éigin uaimse. Agus deireadh muid suas i fanacht trí-bhealach mar go bhfuil muid go léir ag fanacht leis an duine eile a chur i gcrích cad is gá dóibh a dhéanamh.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus tá a fhios ag Postgres cén tsraith a tharlaíonn sé seo. Agus mar sin tabharfaidh sé an teachtaireacht seo a leanas duit, a thaispeánann go bhfuil fadhb agat áit a bhfuil trí ionchur ag cur bac ar a chéile. Agus níl aon srianta anseo. Seans gurb é seo an cás nuair a chuireann 20 iontráil bac ar a chéile.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is é an chéad fhadhb eile serializable.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Más glas sraitheach speisialta é.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus filleann muid ar 719. Tá a aschur go leor gnáth.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus is féidir leat cliceáil chun an t-idirbheart a dhéanamh ó serializable.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus tuigeann tú go bhfuil glas SA de chineál difriúil agat anois - ciallaíonn sé go bhfuil sraitheach in ann.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus mar sin tá cineál nua glas againn ar a dtugtar SARieadLock, ar glas sraitheach é agus a ligeann duit sraithuimhir a chur isteach.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus freisin is féidir leat innéacsanna uathúla a chur isteach.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Sa tábla seo tá innéacsanna uathúla againn.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Mar sin má chuir mé an uimhir 2 isteach anseo, mar sin tá mé 2. Ach ag an mbarr, chuir mé 2 eile isteach Agus is féidir leat a fheiceáil go bhfuil glas eisiach ag 721. Ach anois tá 722 ag fanacht le 721 lena oibríocht a chur i gcrích toisc nach féidir leis 2 a chur isteach go dtí go mbeidh a fhios aige cad a tharlóidh do 721.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus má dhéanaimid fo-idirbheart.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Anseo tá 723 againn.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus má shábhálann muid an pointe agus ansin é a nuashonrú, ansin faigheann muid ID idirbheart nua. Is patrún iompair eile é seo nach mór duit a bheith feasach air. Má sheolaimid é seo ar ais, ansin imíonn ID an idirbhirt. Tá 724 ag imeacht. Ach anois tá 725 againn.

Mar sin, cad tá mé ag iarraidh a dhéanamh anseo? Tá mé ag iarraidh samplaí de ghlais neamhghnácha a d'fhéadfá a fháil a thaispeáint duit: cibé an glais sraitheach iad nó SAVEPOINT, is cineálacha éagsúla glais iad seo a thaispeánfar sa tábla glasála.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is éard atá i gceist leis seo ná glais shoiléir (follasacha) a chruthú, a bhfuil pg_advisory_lock orthu.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus feiceann tú go bhfuil an cineál blocála liostaithe mar chomhairleach. Agus anseo deir sé "comhairle" i dearg. Agus is féidir leat blocáil mar seo ag an am céanna le pg_advisory_unlock.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus mar fhocal scoir, ba mhaith liom rud meabhrach amháin eile a thaispeáint duit. Cruthóidh mé radharc eile. Ach rachaidh mé isteach sa tábla pg_locks leis an tábla pg_stat_activity. Agus cén fáth ar mhaith liom é seo a dhéanamh? Toisc go dtabharfaidh sé seo deis dom na seisiúin reatha go léir a fheiceáil agus a fheiceáil agus a fheiceáil go díreach cén cineál glais a bhfuil siad ag fanacht leo. Agus tá sé seo suimiúil go leor nuair a chuirimid an tábla glas agus an tábla ceisteanna le chéile.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus anseo cruthaímid pg_stat_view.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus déanaimid nuashonrú ar an tsraith ar cheann. Agus anseo feicimid 724. Agus ansin déanaimid ár sraith a nuashonrú go trí. Agus cad a fheiceann tú anseo anois? Is iarratais iad seo, i.e. feiceann tú liosta iomlán na n-iarratas atá liostaithe sa cholún ar chlé. Agus ansin ar an taobh dheis is féidir leat na bacainní agus na rudaí a chruthaíonn siad a fheiceáil. Agus is féidir é a bheith níos soiléire duit ionas nach gá duit dul ar ais chuig gach seisiún gach uair agus féachaint an gá duit a bheith páirteach ann nó nach bhfuil. Déanann siad é dúinn.

Gné eile atá an-úsáideach ná pg_blocking_pids. Is dócha nár chuala tú trácht uirthi. Cad atá sí ag déanamh? Ligeann sé dúinn é sin a insint don seisiún seo 11740 cad iad na haitheantais próisis ar leith a bhfuil sé ag fanacht leo. Agus is féidir leat a fheiceáil go bhfuil 11740 ag fanacht le 724. Agus tá 724 ag an mbarr. Agus is é 11306 d'aitheantas próisis. Go bunúsach, téann an fheidhm seo trí do tábla glasála. Agus tá a fhios agam go bhfuil sé beagán casta, ach bainistíonn tú é a thuiscint. Go bunúsach téann an fheidhm seo tríd an tábla glasála seo agus déanann sé iarracht a fháil amach cá háit a dtugtar na glais ar a bhfuil sé ag fanacht leis an aitheantas próisis seo. Agus déanann sé iarracht freisin a dhéanamh amach cén ID próisis atá ag an bpróiseas atá ag fanacht leis an glas. Mar sin is féidir leat an fheidhm seo a rith pg_blocking_pids.

Agus is féidir é seo a bheith an-úsáideach. Níor chuir muid é seo ach i leagan 9.6, mar sin níl an ghné seo ach 5 bliana d'aois, ach tá sé an-úsáideach. Agus baineann an rud céanna leis an dara hiarratas. Léiríonn sé go díreach cad is gá dúinn a fheiceáil.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Is é seo a theastaigh uaim labhairt leat faoi. Agus mar a bhí mé ag súil, d'úsáideamar ár gcuid ama ar fad mar go raibh an oiread sin sleamhnáin ann. Agus tá na sleamhnáin ar fáil le híoslódáil. Ba mhaith liom buíochas a ghabháil leat as a bheith anseo. Tá mé cinnte go mbainfidh tú taitneamh as an chuid eile den chomhdháil, go raibh míle maith agat!

Ceisteanna:

Mar shampla, má tá mé ag iarraidh sraitheanna a nuashonrú, agus tá an dara seisiún ag iarraidh an tábla ar fad a scriosadh. Chomh fada agus a thuigim, ba chóir go mbeadh rud éigin cosúil le glas hintinn. An bhfuil a leithéid i Postgres?

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

A ligean ar dul ar ais go dtí an tús an-. B'fhéidir gur cuimhin leat nuair a dhéanann tú rud ar bith, mar shampla nuair a dhéanann tú SELECT, eiseoimid AccessShareLock. Agus cuireann sé seo cosc ​​​​ar an tábla a thit. Mar sin más mian leat, mar shampla, as a chéile a nuashonrú i dtábla nó as a chéile a scriosadh, ní féidir le duine an tábla iomlán a scriosadh ag an am céanna toisc go bhfuil an AccessShareLock seo á shealbhú agat thar an tábla ar fad agus thar an tsraith iomlán. Agus nuair a bheidh tú críochnaithe, is féidir leo é a scriosadh. Ach cé go n-athraíonn tú rud éigin go díreach ann, ní bheidh siad in ann é a dhéanamh.

Déanaimis arís é. A ligean ar bogadh ar aghaidh go dtí an sampla a scriosadh. Agus feiceann tú go bhfuil glas eisiach ar an tsraith os cionn an tábla ar fad.

Beidh sé seo cosúil le glas eisiach, ceart?

Sea, tá cuma air. Tuigim cad atá á rá agat. Tá tú ag rá má dhéanaim SELECT ansin go bhfuil ShareExclusive agam agus ansin déanaim Row Eisiach é, an bhfuil fadhb ann sin? Ach ní haon ionadh é seo ina fhadhb. Breathnaíonn sé seo cosúil le méadú ar an leibhéal glas, ach go bunúsach tá glas agam a chuireann cosc ​​​​ar scriosadh. Agus anois, nuair a dhéanaim an glas seo níos cumhachtaí, cuireann sé cosc ​​​​ar scriosadh fós. Mar sin níl sé cosúil go bhfuil mé ag dul suas. Is é sin, chuir sé cosc ​​​​air ó tharla nuair a bhí sé ag leibhéal níos ísle freisin, agus mar sin nuair a ardaíonn mé a leibhéal cuireann sé cosc ​​​​ar an tábla a scriosadh fós.

Tuigim cad atá á rá agat. Níl aon chás ardaithe glasa, áit a bhfuil tú ag iarraidh glas amháin a thabhairt suas chun glas níos láidre a thabhairt isteach. Anseo méadaíonn sé an cosc ​​seo i gcoitinne, mar sin ní cúis le coinbhleacht ar bith é. Ach is ceist mhaith í. Go raibh míle maith agat as é seo a iarraidh!

Cad is gá dúinn a dhéanamh chun staid stoptha a sheachaint nuair a bhíonn go leor seisiún againn, líon mór úsáideoirí?

Tugann Postgres staideanna gan stad faoi deara go huathoibríoch. Agus scriosfaidh sé ceann de na seisiúin go huathoibríoch. Is é an t-aon bhealach chun blocáil marbh a sheachaint ná bac a chur ar dhaoine san ord céanna. Mar sin, nuair a bhreathnaíonn tú ar d'iarratas, is minic a bhíonn an t-am ar fad... Samhlaigh go dteastaíonn uaim bac a chur ar dhá rud difriúil. Glasálann feidhmchlár amháin tábla 1, agus glasann feidhmchlár eile 2, agus ansin glasáil tábla 1. Agus is é an bealach is éasca chun stopanna a sheachaint ná féachaint ar d'iarratas agus iarracht a dhéanamh a chinntiú go dtarlaíonn an glasáil san ord céanna ar fud na n-iarratas go léir. Agus de ghnáth cuireann sé seo deireadh le 80% de na fadhbanna, toisc go scríobhann gach cineál daoine na hiarratais seo. Agus má chuireann tú bac orthu san ord céanna, ní thagann tú trasna ar chor ar bith.

Go raibh míle maith agat as do fheidhmíocht! Labhair tú faoi lánfholús agus, má thuigim i gceart, déanann folús iomlán ord na dtaifead i stóráil ar leith a shaobhadh, agus mar sin coinníonn siad na taifid reatha gan athrú. Cén fáth a nglacann lánfholús le rochtain eisiach faoi ghlas agus cén fáth a bhfuil sé ag teacht salach ar oibríochtaí scríbhneoireachta?

Sin ceist mhaith. Is é an chúis atá leis ná go dtógann folús iomlán an tábla. Agus go bunúsach táimid ag cruthú leagan nua den tábla. Agus beidh an tábla a bheith nua. Tharlaíonn sé go raibh sé seo ina leagan iomlán nua den tábla. Agus is í an fhadhb atá ann, nuair a dhéanaimid é seo, nach bhfuil muid ag iarraidh ar dhaoine é a léamh mar ní mór dúinn iad a fheiceáil ar an tábla nua. Agus mar sin nascann sé seo leis an gceist roimhe seo. Dá bhféadfaimis léamh ag an am céanna, ní bheimis in ann é a bhogadh agus daoine a threorú chuig tábla nua. Bheadh ​​orainn fanacht go gcríochnódh gach duine ag léamh an tábla seo, agus mar sin go bunúsach is cás glas-eisiatach é.
Níl le rá againn ach go ndéanaimid glasáil ón tús mar tá a fhios againn go mbeidh glas eisiach de dhíth orainn ag an deireadh chun gach duine a aistriú chuig an gcóip nua. Mar sin is féidir linn é seo a réiteach. Agus déanaimid é ar an mbealach seo le hinnéacsú comhuaineach. Ach tá sé seo i bhfad níos deacra a dhéanamh. Agus baineann sé seo go mór le do cheist roimhe seo faoi ghlas eisiach.

An féidir teorainn ama glasála a chur leis in Postgres? In Oracle, is féidir liom, mar shampla, "roghnaigh nuashonrú" a scríobh agus fanacht 50 soicind roimh nuashonrú. Bhí sé go maith don iarratas. Ach i Postgres, ní mór dom a dhéanamh láithreach bonn agus gan fanacht ar chor ar bith, nó fanacht go dtí am éigin.

Sea, is féidir leat teorainn ama a roghnú ar do ghlais, ar do ghlais. Is féidir leat ordú gan bealaigh a eisiúint freisin, rud a... mura féidir leat an glas a fháil láithreach. Mar sin, bíodh teorainn ama leis an nglais nó rud éigin eile a ligfidh duit é seo a dhéanamh. Ní dhéantar é seo ar an leibhéal syntactic. Déantar é seo mar athróg ar an bhfreastalaí. Uaireanta ní féidir é seo a úsáid.

An féidir leat sleamhnán 75 a oscailt?

Is ea.

Bainisteoir Glais Postgres a dhíghlasáil. Bruce Momjian

Agus seo a leanas mo cheist. Cén fáth a bhfuil an dá phróiseas nuashonraithe ag súil le 703?

Agus is ceist iontach í seo. Ní thuigim, dála an scéil, cén fáth a ndéanann Postgres é seo. Ach nuair a cruthaíodh 703, bhí sé ag súil le 702. Agus nuair a thaispeánann 704 agus 705 suas, is cosúil nach bhfuil a fhios acu cad a bhfuil siad ag súil leis toisc nach bhfuil aon rud ann fós. Agus déanann Postgres é ar an mbealach seo: nuair nach féidir leat glas a fháil, scríobhann sé “Cad é an pointe chun tú a phróiseáil?”, toisc go bhfuil tú ag fanacht le duine éigin cheana féin. Mar sin ní ligfimid dó crochadh san aer, ní nuashonróidh sé ar chor ar bith é. Ach cad a tharla anseo? Chomh luath agus a chríochnaigh 702 an próiseas agus a fuair 703 a ghlas, d'fhill an córas ar ais. Agus dúirt sí go bhfuil anois againn beirt atá ag fanacht. Agus ansin déanaimis iad a nuashonrú le chéile. Agus in iúl dúinn go bhfuil an dá ag súil.

Níl a fhios agam cén fáth a ndéanann Postgres é seo. Ach tá fadhb ar a dtugtar f…. Feictear dom nach téarma sa Rúisis é seo. Seo é nuair a bhíonn gach duine ag fanacht le caisleán amháin, fiú má tá 20 údarás ag fanacht leis an gcaisleán. Agus go tobann dúisíonn siad go léir ag an am céanna. Agus tosaíonn gach duine ag iarraidh freagairt. Ach déanann an córas é ionas go mbeidh gach duine ag fanacht le 703. Toisc go bhfuil siad go léir ag fanacht, agus déanfaimid líne láithreach iad go léir. Agus má thagann aon iarratas nua eile le feiceáil a gineadh ina dhiaidh seo, mar shampla, 707, ansin beidh folmhú arís.

Agus feictear dom go ndéantar é seo ionas gur féidir linn a rá go bhfuil 702 ag fanacht le 703 ag an gcéim seo, agus nach mbeidh aon iontráil sa réimse seo ag gach duine a thiocfaidh ina dhiaidh sin. Ach a luaithe a fhágann an chéad fhreastalaí, faigheann gach duine a bhí ag fanacht ag an nóiméad sin roimh an nuashonrú an comhartha céanna. Agus mar sin is dóigh liom go ndéantar é seo ionas gur féidir linn próiseáil a dhéanamh in ord ionas go mbeidh siad in ord ceart.

Bhreathnaigh mé i gcónaí ar seo mar fheiniméan sách aisteach. Toisc anseo, mar shampla, ní liostaímid iad ar chor ar bith. Ach feictear domsa, gach uair a thugaimid glas nua, breathnú orthu siúd go léir atá i mbun feithimh. Ansin líne againn iad go léir suas. Agus ansin ní théann aon cheann nua a thagann isteach sa scuaine ach amháin nuair a bhíonn an chéad duine eile críochnaithe á phróiseáil. Ceist an-mhaith. Go raibh míle maith agat as do cheist!

Feictear dom go bhfuil sé i bhfad níos loighciúla nuair a bhíonn 705 ag súil le 704.

Ach is é an fhadhb anseo a leanas. Go teicniúil, is féidir leat ceann amháin nó an ceann eile a mhúscailt. Agus mar sin dúiseoidh muid ceann amháin nó an ceann eile. Ach cad a tharlaíonn sa chóras? Is féidir leat a fheiceáil conas a chuir 703 ag an mbarr bac ar a ID idirbhirt féin. Seo mar a oibríonn Postgres. Agus tá 703 bac ar a ID idirbheart féin, mar sin má tá duine ag iarraidh fanacht, ansin fanfaidh siad le haghaidh 703. Agus, go bunúsach, críochnaíonn 703. Agus go dtí go bhfuil sé críochnaithe a dhúisíonn ceann de na próisis. Agus níl a fhios againn cad go díreach a bheidh sa phróiseas seo. Ansin déanaimid gach rud a phróiseáil de réir a chéile. Ach níl sé soiléir cén próiseas a dhúisítear ar dtús, toisc go bhféadfadh sé a bheith ina cheann de na próisis seo. Go bunúsach, bhí sceidealóir againn a dúirt gur féidir linn aon cheann de na próisis seo a mhúscailt anois. Ní dhéanaimid ach ceann a phiocadh go randamach. Mar sin ní mór an bheirt acu a thabhairt faoi deara mar is féidir linn ceachtar acu a mhúscailt.

Agus is í an fhadhb atá ann go bhfuil CP-infinity againn. Agus mar sin, is dócha go leor gur féidir linn múscail an ceann is déanaí. Agus más rud é, mar shampla, go ndúisímid an ceann is déanaí, fanfaimid leis an gceann a fuair an bloc, mar sin ní chinnimid cé go díreach a dhúiseofar ar dtús. Ní dhéanaimid ach cás den sórt sin a chruthú, agus dúiseoidh an córas iad in ord randamach.

ailt faoi loic ag Egor Rogov. Féach, tá siad suimiúil agus úsáideach freisin. Tá an topaic, ar ndóigh, thar a bheith casta. Go raibh míle maith agat, Bruce!

Foinse: will.com

Add a comment