Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Tar-sgrìobhadh de òraid Bruce Momjian ann an 2020 “Fuasgladh Manaidsear Lock Postgres”.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

(Nòta: Gheibh thu a h-uile ceist SQL bho na sleamhnagan aig a 'cheangal seo: http://momjian.us/main/writings/pgsql/locking.sql)

Halò! Tha e math a bhith an seo anns an Ruis a-rithist. Tha mi duilich nach b' urrainn dhomh tighinn an-uiridh, ach am-bliadhna tha planaichean mòra aig Ivan agus mise. Tha mi an dòchas a bhith an seo tòrr nas trice. Is toil leam a bhith a’ tighinn dhan Ruis. Tadhlaidh mi air Tyumen, Tver. Tha mi glè thoilichte gun urrainn dhomh tadhal air na bailtean-mòra sin.

Is e m ’ainm Bruce Momjian. Tha mi ag obair aig EnterpriseDB agus tha mi air a bhith ag obair le Postgres airson còrr air 23 bliadhna. Tha mi a fuireach ann am Philadelphia, USA. Bidh mi a’ siubhal timcheall air 90 latha sa bhliadhna. Agus bidh mi a’ frithealadh mu 40 co-labhairtean. Tha mi Làrach-lìn, anns a bheil na sleamhnagan a sheallas mi dhut a-nis. Mar sin, às deidh na co-labhairt, faodaidh tu an luchdachadh sìos bhon làrach pearsanta agam. Tha timcheall air 30 taisbeanaidhean ann cuideachd. Agus tha bhideothan ann cuideachd agus àireamh mhòr de inntrigidhean blog, barrachd air 500. Is e goireas fiosrachail a tha seo. Agus ma tha ùidh agad anns an stuth seo, tha mi a 'toirt cuireadh dhut a chleachdadh.

B’ àbhaist dhomh a bhith nam thidsear, nam ollamh mus do thòisich mi ag obair le Postgres. Agus tha mi glè thoilichte gun urrainn dhomh a-nis innse dhut na tha mi a 'dol a dh' innse dhut. Is e seo aon de na taisbeanaidhean as inntinniche agam. Agus tha 110 sleamhnagan anns an taisbeanadh seo. Tòisichidh sinn a 'bruidhinn le rudan sìmplidh, agus ro dheireadh na h-aithisge bidh e a' fàs nas iom-fhillte, agus bidh e gu math toinnte.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e còmhradh caran mì-thlachdmhor a tha seo. Chan e bacadh an cuspair as mòr-chòrdte. Tha sinn airson gun tèid e à sealladh am badeigin. Tha e coltach ri bhith a’ dol chun fhiaclair.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

  1. Tha glasadh na dhuilgheadas dha mòran dhaoine a tha ag obair air stòran-dàta agus aig a bheil grunn phròiseasan a’ ruith aig an aon àm. Feumaidh iad bacadh. Is e sin, an-diugh bheir mi eòlas bunaiteach dhut air bacadh.
  2. IDan malairt. Tha seo na phàirt caran dòrainneach den taisbeanadh, ach feumar an tuigsinn.
  3. An ath rud, bruidhnidh sinn mu na seòrsaichean bacadh. Tha e na phàirt gu math meacanaigeach.
  4. Agus an uairsin bheir sinn seachad eisimpleirean de bhacadh. Agus bidh e gu math duilich a thuigsinn.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Bruidhnidh sinn mu dheidhinn bacadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Tha ar briathrachas gu math toinnte. Cò mheud agaibh a tha fios cò às a tha an earrann seo a’ tighinn? Dithis dhaoine. Tha e bho gheama ris an canar Colossal Cave Adventure. B’ e geama coimpiutair stèidhichte air teacsa a bh’ ann anns na 80an, tha mi a’ smaoineachadh. An sin bha e riatanach a dhol a-steach don uaimh, a-steach don labyrinth agus chaidh an teacsa atharrachadh, ach bha an susbaint timcheall air an aon rud a h-uile turas. Sin mar a tha cuimhne agam air a’ gheama seo.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus an seo chì sinn ainm nan glasan a thàinig thugainn o Oracle. Bidh sinn gan cleachdadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

An seo chì sinn teirmean a tha gam mhealladh. Mar eisimpleir, ROINN ÙRACHADH ECXLUSIVE. Air adhart ROINN RAW ECXLUSIVE. Gu fìrinneach, chan eil na h-ainmean sin gu math soilleir. Feuchaidh sinn ri beachdachadh orra ann am barrachd mionaideachd. Ann an cuid tha am facal “share”, a tha a’ ciallachadh dealachadh. Ann an cuid tha am facal "exclusive" - ​​toirmeasgach. Tha an dà fhacal seo ann an cuid. Bu mhath leam tòiseachadh le mar a tha na glasan sin ag obair.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus tha am facal “ruigsinneachd” glè chudromach cuideachd. Agus na faclan "sreath" - loidhne. Is e sin, cuairteachadh ruigsinneachd, cuairteachadh sreath.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e duilgheadas eile a dh’ fheumar a thuigsinn ann am Postgres, nach urrainn dhomh gu mì-fhortanach a chòmhdach anns an òraid agam, is e MVCC. Tha taisbeanadh air leth agam air a’ chuspair seo air an làrach-lìn agam. Agus ma tha thu den bheachd gu bheil an taisbeanadh seo duilich, is dòcha gur e MVCC an rud as duilghe a th’ agam. Agus ma tha ùidh agad, chì thu e air an làrach. Faodaidh tu coimhead air a’ bhidio.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e rud eile a dh’ fheumas sinn a thuigsinn IDan malairt. Chan urrainn dha mòran ghnothaichean obrachadh às aonais aithnichearan sònraichte. Agus an seo tha mìneachadh againn air dè a th’ ann an malairt. Tha dà shiostam àireamhachaidh malairt aig Postgres. Tha fios agam nach e fuasgladh glè bhòidheach a th’ ann.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Cuimhnich cuideachd gum bi na sleamhnagan gu math duilich a leughadh, agus mar sin is e na tha air a chomharrachadh ann an dearg na dh'fheumas tu aire a thoirt dha.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

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

Tha sinn a' coimhead. Tha an àireamh malairt air a chomharrachadh ann an dearg. Air a shealltainn an seo tha an gnìomh SELECT pg_back. Bidh e a’ tilleadh mo ghnothach agus ID a’ ghnothaich sin.

Aon rud eile, mas toil leat an taisbeanadh seo agus gu bheil thu airson a ruith san stòr-dàta agad, faodaidh tu leantainn air a’ cheangal seo air a chomharrachadh ann am pinc agus luchdaich sìos SQL airson an taisbeanaidh seo. Agus faodaidh tu dìreach a ruith anns an PSQL agad agus bidh an taisbeanadh gu lèir air do sgrion ann an ùine sam bith. Cha bhi flùraichean ann, ach co-dhiù chì sinn e.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Anns a 'chùis seo, chì sinn ID a' ghnothaich. Seo an àireamh a thug sinn dhi. Agus tha seòrsa eile de ID malairt ann am Postgres ris an canar ID malairt brìgheil

Agus feumaidh sinn seo a thuigsinn. Tha seo glè chudromach, air neo cha bhith e comasach dhuinn glasadh ann am Postgres a thuigsinn.

Is e ID malairt brìgheil a th’ ann an ID malairt anns nach eil luachan seasmhach. Mar eisimpleir, ma ruitheas mi àithne SELECT, is coltaiche nach atharraich mi an stòr-dàta, cha ghlas mi dad. Mar sin nuair a bhios sinn a’ ruith SELECT sìmplidh, cha bhith sinn a’ toirt ID maireannach don ghnothach sin. Cha toir sinn ach ID brìgheil dhi an sin.

Agus bidh seo a’ leasachadh coileanadh Postgres, a’ leasachadh comas glanadh, agus mar sin tha dà àireamh anns an ID malairt brìgheil. Is e a’ chiad àireamh ron t-slais an ID cùl-fhiosrachaidh. Agus air an làimh dheis chì sinn dìreach cuntair.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Mar sin, ma ruitheas mi iarrtas, tha e ag ràdh gur e 2 an ID backend.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus ma ruitheas mi sreath de ghnothaichean mar sin, chì sinn gu bheil a’ chunntair air àrdachadh a h-uile uair a ruitheas mi a’ cheist. Mar eisimpleir nuair a bhios mi a’ ruith ceist 2/10, 2/11, 2/12 msaa.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Cumaibh cuimhne gu bheil dà cholbh an seo. Air an taobh chlì, chì sinn an ID malairt brìgheil - 2/12. Agus air an taobh cheart tha ID malairt maireannach againn. Agus tha an raon seo falamh. Agus chan eil an gnothach seo ag atharrachadh an stòr-dàta. Mar sin, cha bhith mi a’ sònrachadh ID malairt maireannach dha.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Cho luath ‘s a ruitheas mi an àithne mion-sgrùdaidh ((ANALYZE)), bheir an aon cheist ID malairt maireannach dhomh. Faic mar a tha sinn air atharrachadh. Roimhe seo, cha robh an ID seo agam, a-nis tha agam.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Mar sin seo iarrtas eile, malairt eile. Is e an àireamh malairt brìgheil 2/13. Agus ma dh’ iarras mi ID malairt maireannach, an uairsin nuair a ruitheas mi an t-iarrtas, gheibh mi e.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Mar sin, aon uair eile. Tha ID malairt brìgheil againn agus ID malairt maireannach. Dìreach gabh a’ phuing seo gus giùlan Postgres a thuigsinn.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Bidh sinn a 'dol air adhart chun an treas earrann. An seo bidh sinn dìreach a’ coiseachd tro na diofar sheòrsaichean glasan ann am Postgres. Chan eil e uabhasach inntinneach. Bidh an earrann mu dheireadh tòrr nas inntinniche. Ach feumaidh sinn beachdachadh air na rudan bunaiteach, oir air dhòigh eile cha bhi sinn a 'tuigsinn dè a thachras a-rithist.

Thèid sinn tron ​​​​roinn seo, bheir sinn sùil air gach seòrsa bacadh. Agus seallaidh mi eisimpleirean dhut air mar a tha iad air an stàladh, mar a tha iad ag obair, a 'sealltainn dhut cuid de cheistean a dh'fhaodas tu a chleachdadh gus faicinn mar a tha bacadh ag obair ann am Postgres.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Gus ceist a chruthachadh agus faicinn dè tha dol ann am Postgres, feumaidh sinn a’ cheist a chuir a-mach gu sealladh an t-siostaim. Anns a 'chùis seo, tha pg_lock air a chomharrachadh ann an dearg. Tha pg_lock na chlàr siostam a tha ag innse dhuinn dè na glasan a thathas a’ cleachdadh an-dràsta ann am Postgres.

Ach, tha e gu math duilich dhomh pg_lock a shealltainn dhut leis fhèin, oir tha e gu math toinnte. Mar sin chruthaich mi sealladh a sheallas pg_locks. Agus bidh e cuideachd a’ dèanamh beagan obrach dhòmhsa a leigeas leam tuigse nas fheàrr fhaighinn. Is e sin, tha e a 'dùnadh a-mach na glasan agam, an seisean agam fhìn, msaa. Is e dìreach SQL àbhaisteach a th' ann agus leigidh e leat sealltainn nas fheàrr na tha a 'dol air adhart.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e duilgheadas eile gu bheil an sealladh seo gu math farsaing, agus mar sin feumaidh mi dàrna fear a chruthachadh - lockview2.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian Agus tha e a’ sealltainn dhomh barrachd cholbhan bhon chlàr. Agus fear eile a sheallas dhomh an còrr de na colbhan. Tha seo gu math toinnte, agus mar sin dh’ fheuch mi ri a thaisbeanadh cho sìmplidh ‘s a ghabhas.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Mar sin, tha sinn air clàr a chruthachadh ris an canar Lockdemo. Agus chruthaich sinn aon loidhne an sin. Is e seo an clàr sampall againn. Agus cruthaichidh sinn earrannan dìreach airson eisimpleirean de bhacadh a shealltainn dhut.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Mar sin, aon sreath, aon cholbh. Canar ACCESS SHARE ris a’ chiad sheòrsa glasaidh. Is e seo an ìre as lugha de bhacadh. Tha seo a 'ciallachadh gu bheil e cha mhòr nach eil e a' strì ri glasan eile.

Agus ma tha sinn airson glas a mhìneachadh gu soilleir, bidh sinn a’ ruith an àithne “clàr glasaidh”. Agus cuiridh e bacadh gu soilleir, ie ann am modh ACCESS SHARE, bidh sinn a’ ruith a’ chlàr glasaidh. Agus ma thòisicheas mi PSQL air a 'chùl, an uairsin tòisichidh mi an dàrna seisean bhon chiad seisean agam san dòigh seo. Is e sin, dè nì mi an seo? Bidh mi a’ dol gu seisean eile agus ag innse dha “seall dhomh an lockview airson an iarrtas seo”. Agus an seo tha AccessShareLock agam air a’ chlàr seo. Is e seo dìreach na dh’ iarr mi. Agus tha e ag ràdh gun deach a’ ghlas a shònrachadh. Gu math sìmplidh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Nas fhaide, ma choimheadas sinn air an dàrna colbh, chan eil dad ann. Tha iad falamh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus ma ruitheas mi an àithne “SELECT”, is e seo an dòigh shoilleir (soilleir) airson AccessShareLock iarraidh. Mar sin bidh mi a’ leigeil ma sgaoil mo bhòrd agus a’ ruith ceist agus bidh a’ cheist a’ tilleadh grunn shreathan. Agus ann an aon de na loidhnichean chì sinn AccessShareLock. Mar sin bidh SELECT a’ gairm AccessShareLock air a’ bhòrd. Agus chan eil e an aghaidh cha mhòr rud sam bith, oir is e glas ìre ìosal a th’ ann.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Dè ma ruitheas mi SELECT agus gu bheil trì bùird eadar-dhealaichte agam? Roimhe sin cha robh mi a’ ruith ach aon bhòrd, a-nis tha mi a’ ruith trì: pg_class, pg_namespace agus pg_attribute.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus a-nis nuair a choimheadas mi air a’ cheist chì mi 9 AccessShareLocks ann an XNUMX clàran. Carson? Tha trì clàran air an comharrachadh ann an gorm: pg_attribute, pg_class, pg_namespace. Ach chì thu cuideachd gu bheil AccessShareLock aig a h-uile clàr-amais a tha air a mhìneachadh tro na clàran sin.

Agus is e casg a tha seo nach eil gu practaigeach a ’dol an aghaidh feadhainn eile. Agus chan eil ann ach dìreach ar cumail bho bhith a’ leigeil sìos a’ bhòrd fhad ‘s a thaghas sinn e. Tha e a’ dèanamh ciall. Is e sin, ma thaghas sinn clàr, falbhaidh e aig an àm sin, tha seo ceàrr, mar sin Is e glas ìre ìosal a th’ ann an AccessShare a tha ag innse dhuinn “na sguab às a’ chlàr seo fhad ‘s a tha mi ag obair”. Gu bunaiteach, is e sin a nì i.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

ROW SHARE - Tha a’ ghlas seo beagan eadar-dhealaichte.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Gabhamaid eisimpleir. SELECT ROW SHARE dòigh airson gach sreath a ghlasadh leotha fhèin. San dòigh sin chan urrainn dha duine an sguabadh às no an atharrachadh fhad ‘s a tha sinn gan coimhead.

Fuasgladh Manaidsear Lock Postgres. Brus MomjianMar sin, dè a bhios SHARE LOCK a’ dèanamh? Chì sinn gur e ID a’ ghnothaich 681 airson an SELECT. Agus tha e inntinneach. Dè thachair an seo? Airson a 'chiad uair chì sinn an àireamh anns an raon "Lock". Gabhaidh sinn an ID malairt, agus tha e ag ràdh gu bheil e ga bhacadh ann am modh sònraichte. Chan eil e a’ dèanamh ach tha e ag ràdh gu bheil sreath agam a tha glaiste gu teicnigeach an àiteigin sa chlàr. Ach chan eil e ag ràdh càite dìreach. Bheir sinn sùil nas mionaidiche air seo beagan nas fhaide air adhart.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

An seo tha sinn ag ràdh gu bheil an glas air a chleachdadh leinn.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Mar sin, tha glas toirmeasgach gu soilleir (gu follaiseach) ag ràdh gu bheil e toirmeasgach. Agus cuideachd ma sguabas tu às sreath sa chlàr seo, sin a thachras, mar a chì thu.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Tha SHARE EXCLUSIVE na ghlas nas fhaide.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e seo (ANALYZE) an àithne anailisiche a thèid a chleachdadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

SHARE LOCK - Faodaidh tu glasadh gu soilleir ann am modh roinneadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Faodaidh tu cuideachd clàr-amais sònraichte a chruthachadh. Agus an sin chì thu SHARE LOCK, a tha na phàirt dhiubh. Agus glasaidh e am bòrd agus cuiridh e glas SHARE LOCK air.

Tha am facal àbhaisteach SHARE LOCK air bòrd a’ ciallachadh gun urrainn do dhaoine eile an clàr a leughadh, ach chan urrainn do dhuine sam bith atharrachadh. Agus is e sin dìreach a thachras nuair a chruthaicheas tu clàr-amais sònraichte.

Ma chruthaicheas mi clàr-amais sònraichte aig an aon àm, bidh seòrsa eile de ghlas agam, oir, cuimhnich, bidh cleachdadh clàran-amais aig an aon àm a’ lughdachadh an riatanas glasaidh. Agus ma chleachdas mi glas àbhaisteach, clàr-amais àbhaisteach, bidh mi mar sin a 'cur casg air sgrìobhadh gu clàr-amais a' bhùird nuair a thèid a chruthachadh. Ma chleachdas mi clàr-amais aig an aon àm, feumaidh mi seòrsa eile de ghlas a chleachdadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

SHARE ROW EXCLUSIVE - a-rithist, faodar a shuidheachadh gu soilleir (gu follaiseach).

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

No faodaidh sinn riaghailt a chruthachadh, is e sin, cùis shònraichte a ghabhail anns am bi e air a chleachdadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Tha glas EXCLUSIVE a’ ciallachadh nach urrainn do dhuine sam bith eile am bòrd atharrachadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

An seo chì sinn diofar sheòrsaichean glasan.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Tha ACCESS EXCLUSIVE, mar eisimpleir, na àithne glasaidh. Mar eisimpleir, ma nì thu CLUSTER table, an uairsin bidh e a 'ciallachadh nach bi duine comasach air sgrìobhadh ann. Agus bidh e a’ glasadh chan e a-mhàin am bòrd fhèin, ach na clàran-amais cuideachd.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e seo an dàrna duilleag den ghlas ACCESS EXCLUSIVE far am faic sinn gu sònraichte na tha e a’ glasadh sa chlàr. Bidh e a 'glasadh sreathan bùird fa leth, a tha inntinneach gu leòr.

Sin a h-uile fiosrachadh bunaiteach a bha mi airson a thoirt seachad. Bhruidhinn sinn mu ghlasan, mu IDan malairt, bhruidhinn sinn mu IDan malairt brìgheil, mu IDan malairt maireannach.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus a-nis thèid sinn tro na h-eisimpleirean bacaidh. Is e seo am pàirt as inntinniche. Chì sinn cùisean gu math inntinneach. Agus is e an t-amas agam san taisbeanadh seo beachd nas fheàrr a thoirt dhut air na bhios Postgres a’ dèanamh nuair a dh’ fheuchas e ri rudan a bhacadh. Tha e coltach rium gu bheil e fìor mhath air casg a chuir air pàirtean fa leth.

Bheir sinn sùil air eisimpleirean sònraichte.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Tòisichidh sinn le bùird agus aon sreath gach clàr. Nuair a chuireas mi a-steach rudeigin, gheibh mi ExclusiveLock, Transaction ID agus ExclusiveLock air a’ bhòrd.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Dè thachras ma chuireas mi dà shreath eile a-steach? Agus a-nis tha trì sreathan aig a’ bhòrd againn. Agus chuir mi a-steach aon sreath agus fhuair mi seo mar thoradh. Agus ma chuireas mi dà shreath eile a-steach, dè a tha neònach an seo? Tha rud neònach an seo oir tha mi air trì sreathan a chuir ris a’ chlàr seo, ach tha dà shreath agam sa chlàr glasaidh fhathast. Agus is e seo, gu dearbh, giùlan bunaiteach Postgres.

Tha mòran den bheachd ma ghlasas tu 100 sreathan ann an stòr-dàta, feumaidh tu 100 inntrigeadh glasaidh a chruthachadh. Ma chuireas mi casg air 1 sreath aig an aon àm, bidh feum agam air 000 iarrtas mar sin. Agus ma tha feum agam air millean no billean airson bacadh. Ach ma nì sinn seo, cha obraich e glè mhath. Ma tha thu air siostam a chleachdadh a chruthaicheas inntrigidhean bacaidh airson gach sreath fa leth, chì thu gu bheil seo toinnte. Leis gu feum thu am bòrd glasaidh a mhìneachadh anns a’ bhad, a dh’ fhaodas cur thairis, ach cha bhith Postgres a’ dèanamh sin.

Agus tha e glè chudromach air an t-sleamhnag seo gu bheil e a 'sealltainn gu soilleir gu bheil siostam eile ann a tha ag obair taobh a-staigh MVCC a tha a' bacadh loidhnichean fa leth. Mar sin nuair a ghlasas tu billeanan de shreathan, cha bhith Postgres a’ cruthachadh billean stiùireadh glasaidh air leth. Agus tha seo fìor mhath airson coileanadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Dè mu dheidhinn ùrachadh? Tha mi ag ùrachadh an t-sreath a-nis agus chì thu gu bheil e air dà obair eadar-dhealaichte a dhèanamh aig an aon àm. Ghlas e am bòrd aig an aon àm, ach ghlas e an clàr-amais cuideachd. Agus dh'fheumadh e an clàr-amais a ghlasadh oir tha cuingeadan sònraichte air a' chlàr sin. Agus tha sinn airson dèanamh cinnteach nach atharraich duine e, agus mar sin bidh sinn ga bhacadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Dè thachras ma tha mi airson dà shreath ùrachadh? Agus chì sinn gu bheil e ga ghiùlan fhèin san aon dòigh. Bidh sinn a’ dèanamh a dhà uimhir de dh’ ùrachaidhean, ach dìreach an aon àireamh de loidhnichean bacaidh.

Ma tha thu a’ faighneachd ciamar a nì Postgres seo, bu chòir dhut èisteachd ris na còmhraidhean agam air MVCC gus faighinn a-mach mar a tha Postgres air an taobh a-staigh a’ comharrachadh nan loidhnichean sin gu bheil e ag atharrachadh. Agus tha dòigh aig Postgres air a dhèanamh, ach cha bhith e ga dhèanamh aig ìre glasaidh a’ bhùird, bidh e ga dhèanamh aig ìre nas ìsle agus nas èifeachdaiche.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Dè ma tha mi airson rudeigin a sguabadh às? Ma sguabas mi às, mar eisimpleir, aon sreath agus tha an dà chuir a-steach agam fhathast aig a’ ghlas, agus eadhon ma tha mi airson an sguabadh às uile, tha iad fhathast ann.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus, mar eisimpleir, tha mi airson loidhnichean 1 a chuir a-steach, agus an uairsin cuir às no cuir 000 loidhne ris, an uairsin na loidhnichean fa leth a chuireas mi ris no a dh’ atharraicheas mi, chan eil iad air an clàradh an seo. Tha iad sgrìobhte aig ìre nas ìsle taobh a-staigh an t-sreath fhèin. Agus rè òraid an MVCC, bhruidhinn mi mu dheidhinn gu mionaideach. Ach tha e glè chudromach nuair a bhios tu a’ dèanamh anailis air glasan gus dèanamh cinnteach gu bheil glas ìre-bùird agad agus nach fhaic thu mar a tha sreathan fa leth gan sgrìobhadh an seo.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Dè mu dheidhinn bacadh follaiseach?

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Ma bhriogas mi air “ùrachadh” tha dà shreath agam glaiste. Agus ma thaghas mi iad uile agus cliog air “ùrachadh anns a h-uile àite”, tha dà chlàr glasaidh agam fhathast.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Cha bhith sinn a’ cruthachadh inntrigidhean fa leth airson gach sreath fa leth. Leis gu bheil coileanadh an uairsin a’ tuiteam, is dòcha gu bheil cus dheth ann. Agus is dòcha gum bi sinn ann an suidheachadh mì-thlachdmhor.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus an aon rud, ma nì sinn co-roinnte, is urrainn dhuinn a h-uile càil a dhèanamh 30 uair.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Bidh sinn ag ath-nuadhachadh ar clàr, cuir às a h-uile càil, an uairsin cuir a-steach aon sreath a-rithist.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e seòrsa eile de ghiùlan a chì thu ann am Postgres a tha gu math aithnichte agus giùlan miannaichte gun urrainn dhut ùrachadh no taghadh a dhèanamh. Agus faodaidh tu a dhèanamh aig an aon àm. Agus cha chuir taghadh bacadh air ùrachadh agus an aon rud an taobh eile. Bidh sinn ag innse don leughadair gun a bhith a’ bacadh an sgrìobhadair, agus chan eil an sgrìobhadair air bacadh a chuir air an leughadair.

Seallaidh mi eisimpleir de seo dhut. Nì mi roghainn a-nis. Nì sinn INSERT an uairsin. Agus an uairsin chì thu - 694. Chì thu ID a 'ghnothaich a rinn an cuir a-steach seo. Agus seo mar a tha e ag obair.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus ma choimheadas mi a-nis air an ID backend agam, tha e air fàs gu bhith - 695.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus chì mi gu bheil 695 a 'nochdadh anns a' chlàr agam.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus ma dh’ ùraicheas mi an seo mar seo, gheibh mi cùis eile. Anns a 'chùis seo, tha 695 na ghlas sònraichte, agus tha an aon ghiùlan aig an ùrachadh, ach chan eil còmhstri eatorra, rud a tha gu math neo-àbhaisteach.

Agus chì thu gu bheil ShareLock air a’ mhullach agus gu h-ìosal tha ExclusiveLock. Agus shoirbhich leis an dà ghnothach.

Agus feumaidh tu èisteachd ris an òraid agam aig MVCC gus tuigsinn mar a thachras seo. Ach tha seo na eisimpleir den fhìrinn gun urrainn dhut a dhèanamh aig an aon àm, i.e. dèan SELECT agus ÙRACHADH aig an aon àm.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Leig leinn ath-shuidheachadh agus dèan aon obrachadh a-rithist.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Ma dh'fheuchas tu ri dà ùrachadh a ruith aig an aon àm air an aon sreath, cuiridh e bacadh air. Agus cuimhnich, thuirt mi nach e an leughadair a tha a 'bacadh an sgrìobhadair, ach an sgrìobhadair an leughadair, ach aon sgrìobhadair a' bacadh sgrìobhadair eile. Is e sin, chan urrainn dhuinn dithis a bhith ag ùrachadh an aon sreath aig an aon àm. Feumaidh tu feitheamh gus an tig aon dhiubh gu crìch.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus airson seo a shealltainn, seallaidh mi air clàr Lockdemo. Agus bheir sinn sùil air aon sreath. Airson malairt 698.

Tha sinn air àrdachadh gu 2. 'S e 699 a' chiad ùrachadh. Agus bha e soirbheachail no tha e ann an gnothach ri thighinn a’ feitheamh oirnn a ghealltainn no a chuir dheth.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Ach thoir sùil air rudeigin eile - is e 2/51 a’ chiad ghnothach againn, a’ chiad seisean againn. Is e 3/112 an dàrna iarrtas a thàinig bhon mhullach agus a dh'atharraich an luach sin gu 3. Agus ma bheir thu an aire, tha am fear as àirde air glasadh fhèin, is e sin 699. Ach cha do cheadaich 3/112 glas. Tha colbh Lock_mode ag ràdh gu bheil e a 'feitheamh. Tha dùil aige ri 699. Agus ma sheallas tu far a bheil 699, tha e nas àirde. Agus dè rinn a’ chiad sheisean? Chruthaich i glas sònraichte air an ID malairt aice fhèin. Seo mar a bhios Postgres ga dhèanamh. Bidh e a’ bacadh an ID malairt aige fhèin. Agus ma tha thu airson feitheamh gus cuideigin a ghealltainn no a chuir dheth, feumaidh tu feitheamh fhad ‘s a tha malairt ri thighinn. Agus mar sin chì sinn loidhne neònach.

Bheir sinn sùil a-rithist. Air an taobh chlì chì sinn an ID giollachd againn. Anns an dàrna colbh chì sinn an ID malairt brìgheil againn, agus san treas fear chì sinn an lock_type. Dè tha seo a' ciallachadh? Gu dearbh, tha i ag ràdh gu bheil i a 'bacadh ID a' ghnothaich. Ach mothaich gu bheil dàimh sgrìobhte anns a h-uile sreath aig a’ bhonn. Agus mar sin tha dà sheòrsa glasan agad air a’ bhòrd. Tha glas dàimh ann. Agus cuideachd tha glas malairt ann far am bi sinn a’ glasadh leinn fhìn, is e sin dìreach a thachras air a’ chiad sreath no aig a’ bhonn far a bheil an malairtiche far a bheil sinn an dùil gun cuir 699 crìoch air an obair aige.

Chì mi dè thachras an seo. Agus an seo tha dà rud a’ tachairt aig an aon àm. Tha thu a’ coimhead air a’ ghlas ID malairt sa chiad sreath, a tha ga ghlasadh fhèin. Agus tha i gam bacadh fhèin gus daoine a chumail a’ feitheamh.

Ma choimheadas tu air an 6mh loidhne, is e an aon inntrig a th’ ann ris a’ chiad fhear. Agus mar sin tha malairt 699 air a bhacadh. Tha 700 cuideachd fèin-glasadh. Agus an uairsin anns an t-sreath gu h-ìosal chì thu gu bheil sinn a’ feitheamh ri 699 gus an obair aige a chrìochnachadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus ann an lock_type, tuple chì thu àireamhan.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Chì thu gur e 0/10 a th’ ann. Agus is e sin àireamh na duilleige, agus cuideachd co-dhùnadh an t-sreath shònraichte sin.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus chì thu dè a thig gu bhith 0/11 nuair a bhios sinn ag ùrachadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Ach gu dearbh, is e 0/10 a th’ ann, oir tha dùil ris an obair seo. Tha cothrom againn faicinn gur e seo an t-sreath a tha mi a’ feitheamh ri dhearbhadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Aon uair ‘s gu bheil sinn air a dhearbhadh agus a’ brùthadh gealltanas, agus nuair a bhios an ùrachadh deiseil, is e seo a gheibh sinn a-rithist. Is e Transaction 700 an aon ghlas, chan eil e a 'feitheamh ri duine sam bith eile, oir chaidh a ghealltainn. Tha e dìreach a’ feitheamh ris a’ ghnothach a chrìochnachadh. Cho luath ‘s a thig 699 gu crìch, chan eil sinn a’ feitheamh ri dad sam bith eile. Agus a-nis tha malairt 700 ag ràdh gu bheil a h-uile dad gu math, gu bheil a h-uile glas a dh’ fheumas e anns a h-uile clàr ceadaichte.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus gus an rud gu lèir a dhèanamh nas iom-fhillte, bidh sinn a’ cruthachadh sealladh eile, a bheir an turas seo rangachd dhuinn. Chan eil mi an dùil gun tuig thu an t-iarrtas seo. Ach bheir e sealladh nas soilleire dhuinn air na tha dol.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e sealladh ath-chuairteach a tha seo anns a bheil aon earrann eile cuideachd. Agus an uairsin bheir e a h-uile càil air ais còmhla a-rithist. Cleachdamaid seo.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Dè ma nì sinn trì ùrachaidhean aig an aon àm agus ag ràdh gu bheil an loidhne a-nis trì. Agus atharraichidh sinn 3 gu 4.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus an seo chì sinn 4. Agus ID malairt 702.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus an uairsin nì mi iomlaid air 4 airson 5. Agus 5 airson 6, agus 6 airson 7. Agus bidh mi a’ loidhne suas grunn dhaoine gus feitheamh ris an aon ghnothach seo a chrìochnachadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus bidh a h-uile dad soilleir. Dè a’ chiad sreath? Is e seo 702. Seo an ID malairt a shuidhich an luach seo bho thùs. Dè th' agam anns a' cholbh Granted? Tha comharran agam f. Is iad seo na h-ùrachaidhean agam nach gabh (5, 6, 7) aontachadh leis gu bheil sinn a’ feitheamh ri ID malairt 702 a thighinn gu crìch. An sin tha glas ID malairt againn. Agus tha e a’ tionndadh a-mach 5 ID glasan malairt.

Agus ma sheallas tu air 704, air 705, chan eil dad sgrìobhte an sin fhathast, oir chan eil fios aca dè a tha a’ dol fhathast. Bidh iad dìreach a’ sgrìobhadh nach eil fios aca dè a tha a’ dol. Agus bidh iad dìreach a 'dol a chadal, oir tha iad a' feitheamh ri cuideigin a chrìochnachadh agus bidh iad air an dùsgadh nuair a bhios e comasach an t-sreath atharrachadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Seo mar a tha e coltach. Tha e follaiseach gu bheil iad uile a' feitheamh airson an 12mh loidhne.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Seo na chunnaic sinn an seo. Seo agaibh 0/12.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Mar sin, aon uair ‘s gu bheil a’ chiad ghnothach air aontachadh, chì thu mar a tha an rangachd ag obair an seo. Agus a-nis tha e uile soilleir. Bidh iad uile a’ fàs glan. Agus gu dearbh tha iad fhathast a 'feitheamh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Seo na tha a’ tachairt. 702 air a ghealltainn. Agus a-nis tha 703 a’ faighinn a’ ghlas sreath seo, agus an uairsin tòisichidh 704 a’ feitheamh ri 703 a ghealltainn. Agus tha an 705 cuideachd a’ feitheamh ri seo. Agus nuair a bhios seo uile deiseil, bidh iad gan glanadh fhèin. Agus bu mhath leam a chomharrachadh gu bheil a h-uile duine ann an loidhne. Agus tha e glè choltach ris an t-suidheachadh trafaic far a bheil a h-uile duine a’ feitheamh ris a’ chiad chàr. Tha a’ chiad chàr air stad agus tha a h-uile duine ann an loidhne fhada. An uairsin gluaisidh e, an uairsin faodaidh an ath chàr a thighinn air adhart agus a bhloc fhaighinn, agus mar sin air adhart.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus ma bha e coltach riut nach robh e doirbh gu leòr, an sin bruidhnidh sinn a-nis riut mu dheidhinn glasan marbh. Chan eil fhios agam cò agaibh a dh’fhiosraich iad. Tha seo na dhuilgheadas gu math cumanta ann an siostaman stòr-dàta. Ach ’s ann mar sin a tha cùisean nuair a tha aon seisean a’ feitheamh ri seisean eile airson rudeigin a dhèanamh. Agus aig an àm sin tha seisean eile a’ feitheamh ris a’ chiad seisean airson rudeigin a dhèanamh.

Agus, mar eisimpleir, ma tha Ivan ag ràdh: "Thoir dhomh rudeigin," agus tha mi ag ràdh: "Chan e, cha toir mi dhut ach ma bheir thu dhomh rudeigin eile." Agus tha e ag ràdh, "Chan eadh, cha toir mi dhut e mura toir thu dhomh e." Agus thig sinn gu crìch ann an suidheachadh duilich. Tha mi cinnteach nach dèan Ivan sin, ach gheibh thu a’ phuing gu bheil dithis againn ag iarraidh rudeigin agus nach eil iad deiseil airson a thoirt seachad gus an toir an neach eile dhaibh na tha iad ag iarraidh. Agus chan eil fuasgladh ann.

Agus, gu dearbh, feumaidh an stòr-dàta agad seo a lorg. Agus an uairsin feumaidh tu aon de na seiseanan a dhubhadh às no a dhùnadh, oir air dhòigh eile fuirichidh iad ann gu bràth. Agus chì sinn e ann an stòran-dàta, chì sinn e ann an siostaman obrachaidh. Agus anns a h-uile àite far a bheil pròiseasan co-shìnte againn, faodaidh seo tachairt.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus cuiridh sinn a-nis dà ghlas marbh. Cuiridh sinn 50 agus 80. Anns a 'chiad sreath, bheir mi ùrachadh bho 50 gu 50. Gheibh mi àireamh malairt 710.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus an uairsin atharraichidh mi 80 gu 81, agus 50 gu 51.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus seo cò ris a bhios e coltach. Agus mar sin tha glas sreath aig 710, agus tha 711 a’ feitheamh ri dearbhadh. Chunnaic sinn e nuair a dh’ ùraich sinn e. 710 - is e sealbhadair an t-sreath againn. Agus tha 711 a’ feitheamh ri 710 gus an gnothach a chrìochnachadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus tha e eadhon ag ràdh air an t-sreath anns a bheil glasan-glasaidh againn. Agus seo far a bheil e a 'tòiseachadh a' fàs neònach.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

A-nis tha sinn ag ùrachadh 80 gu 80.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus sin far a bheil na glasan-crìche a’ tòiseachadh. Tha 710 a' feitheamh ri freagairt bho 711, agus tha 711 a' feitheamh ri 710. Agus chan eil sin a' tighinn gu crìch gu math. Agus chan eil dòigh a-mach à seo. Agus bidh dùil aca ri freagairt bho chèile.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus tha e dìreach a 'tòiseachadh a' cur dàil air a h-uile càil. Agus chan eil sinn ag iarraidh sin.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus tha dòighean aig Postgres air mothachadh nuair a thachras seo. Agus nuair a thachras sin, gheibh thu a’ mhearachd seo. Agus bho seo tha e soilleir gu bheil a leithid agus a leithid de phròiseas a’ feitheamh ri SHARE LOCK bho phròiseas eile, ie, a tha air a bhacadh leis a’ phròiseas 711. Agus bha am pròiseas sin a’ feitheamh ri SHARE LOCK a thoirt dha leithid agus ID malairt mar sin agus a bhith air a bhacadh le leithid de phròiseas. Mar sin, tha suidheachadh de bhacadh marbh ann.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

A bheil glasan-glasaidh trì-shligheach ann? A bheil e comasach? Tha.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Bidh sinn a 'toirt na h-àireamhan sin dhan chlàr. Bidh sinn ag atharrachadh 40 gu 40, bidh sinn a’ dèanamh glas.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Atharraich 60 gu 61, 80 gu 81.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus an uairsin bidh sinn ag atharrachadh 80 agus an uairsin ag àrdachadh!

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus tha 714 a-nis a 'feitheamh airson 715. Tha 716 a' feitheamh ri 715. Agus chan eil dad ri dhèanamh mu dheidhinn.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Chan eil dithis ann tuilleadh, tha triùir ann mu thràth. Tha mi ag iarraidh rudeigin bhuat, tha am fear seo ag iarraidh rudeigin bhon treas neach, agus tha an treas neach ag iarraidh rudeigin bhuam. Agus thig sinn gu crìch ann am feitheamh trì-slighe oir tha sinn uile a’ feitheamh ris an neach eile na tha aca ri dhèanamh a choileanadh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus tha fios aig Postgres dè an sreath a bhios e a’ tachairt. Agus mar sin bheir e dhut an teachdaireachd a leanas a sheallas gu bheil duilgheadas agad far a bheil na trì cuir a-steach a’ bacadh a chèile. Agus chan eil cuingealachaidhean ann. Is dòcha gu bheil seo fìor far a bheil 20 inntrigeadh a’ bacadh a chèile.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Tha an ath iris air a thionndadh gu sreathach.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Ma tha glas sreathach sònraichte ann.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus tillidh sinn gu 719. Tha cùis gu tur àbhaisteach aige.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus faodaidh tu putadh gus malairt a dhèanamh bho serializable.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus tha thu a’ tuigsinn gu bheil seòrsa eile de bhacadh SA agad a-nis - tha seo a’ ciallachadh sreathach.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus mar sin tha seòrsa ùr de ghlas againn ris an canar SARieadLock, a tha na ghlas sreathach agus a leigeas leat àireamhan sreathach a chuir a-steach.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus cuideachd faodaidh tu clàran-amais sònraichte a chuir a-steach.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Anns a’ chlàr seo tha clàran-amais gun samhail againn.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Mar sin ma chuireas mi an àireamh 2 a-steach an seo, is e sin as coireach gu bheil 2 agam. Ach aig a 'mhullach, chuir mi a-steach 2 eile. Agus chì thu gu bheil glas sònraichte aig an 721. Ach a-nis tha 722 a’ feitheamh ri 721 gus an obair aige a chrìochnachadh leis nach urrainn dha 2 a chuir a-steach gus am bi fios aige dè a thachras do 721.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus ma nì sinn subtransaction.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

An seo tha 723 againn.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus ma shàbhaileas sinn a’ phuing agus an uairsin ùraich sinn e, gheibh sinn ID malairt ùr. Is e seo giùlan eile a dh'fheumas tu a bhith mothachail. Ma thilleas sinn sin, tha an ID malairt air falbh. Tha 724 a’ falbh. Ach a-nis tha 725 againn.

Agus dè tha mi a’ feuchainn ri dhèanamh an seo? Tha mi a’ feuchainn ri eisimpleirean a shealltainn dhut de ghlasan neo-àbhaisteach a lorgas tu: ge bith an e glasan sreathach a th’ ann no glasan SAVEPOINT, is iad sin diofar sheòrsaichean de ghlasan a nochdas air a’ chlàr glasaidh.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e seo cruthachadh ghlasan soilleir (follaiseach), aig a bheil pg_advisory_lock.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus chì thu gu bheil an seòrsa glasaidh air a liostadh an seo mar chomhairleach. Agus an seo tha e ag ràdh “comhairle” ann an dearg. Agus faodaidh tu bacadh aig an aon àm le pg_advisory_unlock.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus gu crìch, bu mhath leam aon rud inntinneach eile a shealltainn dhut. Cruthaichidh mi sealladh eile. Ach thèid mi còmhla ris a’ bhòrd pg_locks leis a’ chlàr pg_stat_activity. Agus carson a tha mi airson seo a dhèanamh? Leis gun toir e cothrom dhomh coimhead agus faicinn a h-uile seisean gnàthach agus faicinn dè an seòrsa glasan air a bheil iad a’ feitheamh. Agus tha e inntinneach gu leòr nuair a chuireas sinn clàr glasaidh agus bòrd ceiste ri chèile.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus an seo tha sinn a’ cruthachadh pg_stat_view.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus bidh sinn ag ùrachadh an t-sreath le aon. Agus an seo chì sinn 724. Agus an uairsin bidh sinn ag ùrachadh ar sreath gu trì. Agus dè a chì thu an seo a-nis? Is e iarrtasan a tha seo, i.e. chì thu an liosta iomlan de dh’iarrtasan a tha air an liostadh sa cholbh chlì. Agus an uairsin air an taobh cheart chì thu glasan agus na tha iad a 'cruthachadh. Agus faodaidh e a bhith nas so-thuigsinn dhut gus nach fheum thu a dhol air ais dha gach seisean a h-uile turas agus faicinn am feum thu a dhol còmhla ris no nach eil. Bidh iad ga dhèanamh dhuinne.

Is e feart eile a tha gu math feumail pg_blocking_pids. Is dòcha nach cuala tu a-riamh iomradh oirre. Dè tha i a' dèanamh? Leigidh e leinn sin innse airson an t-seisein seo 11740 dè na IDan pròiseas air a bheil e a’ feitheamh. Agus chì thu gu bheil 11740 an dùil ri 724. Agus tha 724 aig a’ mhullach. Agus is e 11306 an ID pròiseas agad. Gu bunaiteach, bidh an gnìomh seo a’ dol thairis air do bhòrd glasaidh. Agus tha fios agam gu bheil e rud beag toinnte, ach gheibh thu am beachd. Gu bunaiteach, bidh an gnìomh seo a’ dol tron ​​chlàr glasaidh seo agus a’ feuchainn ri faighinn a-mach càite a bheil an ID pròiseas seo, leis na glasan air a bheil e a’ feitheamh. Agus bidh e cuideachd a 'feuchainn ri faighinn a-mach dè an ID pròiseas a th' aig a 'phròiseas a tha a' feitheamh ris a 'ghlas. Mar sin faodaidh tu an gnìomh seo a ruith pg_blocking_pids.

Agus tha seo gu math feumail. Cha do chuir sinn seo ris ach bho dhreach 9.6, agus mar sin chan eil am feart seo ach 5 bliadhna a dh'aois, ach tha e glè, glè fheumail. Agus tha an aon rud a 'dol airson an dàrna iarrtas. Tha e a’ sealltainn gu dìreach na dh’ fheumas sinn fhaicinn.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Is e seo a bha mi airson bruidhinn riut mu dheidhinn. Agus mar a bha dùil agam, chleachd sinn ar n-ùine gu lèir oir bha na h-uimhir de shleamhnagan ann. Agus tha na sleamhnagan rim faighinn airson an luchdachadh sìos. Bu mhath leam taing a thoirt dhut airson a bhith an seo. Tha mi cinnteach gun còrd an còrr den cho-labhairt ribh, mòran taing!

Ceistean:

Mar eisimpleir, ma dh'fheuchas mi ris na sreathan ùrachadh, agus an dàrna seisean a 'feuchainn ris a' chlàr gu lèir a sguabadh às. Cho fad ‘s a tha mi a’ tuigsinn, bu chòir rudeigin mar ghlas rùn a bhith ann. A bheil leithid de rud ann am Postgres?

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Bidh sinn a’ tilleadh chun fhìor thoiseach. Is dòcha gu bheil cuimhne agad nuair a nì thu dad, mar nuair a nì thu SELECT, gun cuir sinn a-mach AccessShareLock. Agus tha e a 'cur casg air a' bhòrd a bhith air a leigeil sìos. Mar sin ma tha thu, mar eisimpleir, airson sreath ùrachadh ann an clàr no cuir às do shreath, chan urrainn dha cuideigin an clàr gu lèir a dhubhadh às aig an aon àm, oir tha an AccessShareLock seo agad thairis air a’ chlàr gu lèir agus thairis air an loidhne. Agus aon uair ‘s gu bheil thu deiseil, faodaidh iad a thoirt air falbh. Ach fhad ‘s a dh’ atharraicheas tu rudeigin gu dìreach an sin, cha bhith e comasach dhaibh a dhèanamh.

Dèanamaid a-rithist e. Gluaisidh sinn air adhart chun eisimpleir sguabaidh às. Agus chì thu mar a tha glas sònraichte air an t-sreath thairis air a’ bhòrd gu lèir.

Bidh e coltach ri glas toirmeasgach, ceart?

Tha, tha e coltach ris. Tha mi a’ tuigsinn na tha thu a’ bruidhinn. A bheil thu ag ràdh ma nì mi SELECT gu bheil ShareExclusive agam agus an uairsin cuiridh mi sin ann an staid Row Exclusive, a bheil sin na dhuilgheadas? Ach gu h-iongantach chan eil seo na dhuilgheadas. Tha e coltach ri bhith a 'meudachadh ìre a' ghlas, ach gu bunaiteach tha glas agam a chuireas casg air a bhith air a sguabadh às. Agus a-nis, nuair a nì mi a’ ghlas seo nas cumhachdaiche, tha e fhathast a’ cur casg air cuir às. Mar sin chan eil e mar gum biodh mi a’ dol suas. I.e. chuir e stad air nuair a bha e aig ìre nas ìsle cuideachd, agus mar sin nuair a dh’ àrdaicheas mi e, tha e fhathast a’ cur casg air a’ bhòrd a bhith air a leigeil sìos.

Tha mi a’ tuigsinn na tha thu a’ bruidhinn. Chan eil cùis sam bith ann a bhith a 'meudachadh na h-ìre de bhacadh, far a bheil thu a' feuchainn ri aon bhloc a leigeil seachad gus fear nas cumhachdaiche a thoirt a-steach. An seo tha e dìreach a’ meudachadh an seachnadh seo anns a h-uile àite, agus mar sin chan adhbhraich e còmhstri sam bith. Ach ’s e ceist mhath a th’ ann. Tapadh leibh gu mòr airson faighneachd!

Dè a dh'fheumas sinn a dhèanamh gus suidheachadh glasaidh a sheachnadh nuair a bhios mòran sheiseanan againn, àireamh mhòr de luchd-cleachdaidh?

Bidh Postgres gu fèin-ghluasadach a’ mothachadh suidheachaidhean dùnaidh. Agus sguabaidh e às gu fèin-ghluasadach aon de na seiseanan. Is e an aon dòigh air suidheachadh stad-stad a sheachnadh casg a chuir air daoine san aon òrdugh. Mar sin nuair a choimheadas tu air an tagradh agad, gu tric is e adhbhar stadan a th’ ann... Canaidh sinn gu bheil mi airson dà rud eadar-dhealaichte a bhacadh. Bidh aon aplacaid a’ glasadh clàr 1 agus aplacaid eile a’ glasadh clàr 2 agus an uairsin clàr 1. Agus is e an dòigh as fhasa air glasan-glasaidh a sheachnadh coimhead air an tagradh agad agus feuchainn ri dèanamh cinnteach gu bheil a’ ghlas a’ tachairt san aon òrdugh anns a h-uile tagradh. Agus mar as trice bidh seo a 'toirt air falbh 80% de na duilgheadasan, oir tha a h-uile seòrsa de dhaoine a' sgrìobhadh nan tagraidhean sin. Agus ma chuireas tu bacadh orra san aon òrdugh, cha bhith thu ann an suidheachadh stad.

Tapadh leibh gu mòr airson do choileanadh! Bhruidhinn thu mu dheidhinn falamh làn agus, ma tha mi a 'tuigsinn gu ceart, bidh falamh làn a' cur an òrdugh chlàran ann an stòr air leth, agus mar sin cumaidh e na clàran làithreach gun atharrachadh. Carson a tha falamh làn a’ toirt cothrom air glasadh a-mhàin agus carson a tha e an aghaidh obair sgrìobhaidh?

Sin ceist mhath. Is e an adhbhar gu bheil làn falamh a’ toirt bòrd. Agus tha sinn gu bunaiteach a’ cruthachadh dreach ùr den chlàr. Agus bidh am bòrd ùr. Tha e coltach gur e dreach gu tur ùr den chlàr a bhios ann. Agus is e an duilgheadas nuair a nì sinn sin, nach eil sinn airson gum bi daoine ga leughadh oir tha sinn airson gum faic iad am bòrd ùr. Agus mar sin tha seo a’ ceangal ris a’ cheist roimhe. Nam b 'urrainn dhuinn leughadh aig an aon àm, cha bhiodh e comasach dhuinn a ghluasad agus daoine a stiùireadh gu bòrd ùr. Dh'fheumamaid feitheamh gus an crìochnaich a h-uile duine an clàr seo a leughadh, agus mar sin, gu dearbh, is e suidheachadh gun ghlas a tha seo.
Tha sinn dìreach ag ràdh gu bheil sinn a’ glasadh bhon toiseach oir tha fios againn gum feum sinn glas sònraichte aig an fhìor cheann gus a h-uile duine a ghluasad chun leth-bhreac ùr. Mar sin is dòcha gun urrainn dhuinn fuasgladh fhaighinn air. Agus seo mar a nì sinn e le clàr-amais aig an aon àm. Ach tha seo tòrr nas duilghe a dhèanamh. Agus tha seo a’ buntainn gu làidir ris a’ cheist a bh’ agad roimhe mu ghlas a-mhàin.

A bheil e comasach ùine glasaidh a chuir ris ann am Postgres? Ann an Oracle, is urrainn dhomh, mar eisimpleir, sgrìobhadh “tagh airson ùrachadh” agus feitheamh 50 diogan mus ùraich thu. Bha e math airson an tagradh. Ach ann am Postgres, feumaidh mi an dàrna cuid seo a dhèanamh anns a’ bhad agus gun a bhith a’ feitheamh idir, no feitheamh gus àm air choreigin.

Faodaidh, faodaidh tu roghnachadh ùine a chuir a-mach do ghlasan, do ghlasan. Faodaidh tu cuideachd an òrdugh gun slighe a chuir a-mach, a bhios ... mura h-urrainn dhut a’ ghlas fhaighinn sa bhad. Mar sin, an dàrna cuid glasadh ùine-ama, no rudeigin eile a leigeas leat seo a dhèanamh. Chan eil seo air a dhèanamh aig ìre syntactic. Tha seo air a dhèanamh mar chaochladair air an fhrithealaiche. Uaireannan chan urrainnear a chleachdadh.

An urrainn dhut sleamhnag 75 fhosgladh?

Tha.

Fuasgladh Manaidsear Lock Postgres. Brus Momjian

Agus tha mo cheist an ath rud. Carson a tha an dà phròiseas ùrachaidh a’ feitheamh ri 703?

Agus ’s e ceist air leth a tha sin. Chan eil mi a’ tuigsinn carson a tha Postgres a’ dèanamh seo, co-dhiù. Ach nuair a chaidh 703 a chruthachadh, bha e a 'feitheamh ri 702. Agus nuair a nochdas 704 agus 705, chan eil coltas gu bheil fios aca dè a tha iad a' feitheamh, oir chan eil dad ann fhathast. Agus bidh Postgres ga dhèanamh mar seo: nuair nach urrainn dhut glas fhaighinn, tha e ag ràdh "Dè an adhbhar a bhith gad ghiollachd?", Leis gu bheil thu mu thràth a’ feitheamh ri cuideigin. Mar sin dìreach leig leis crochadh san adhar, chan ùraich e idir e. Ach dè thachair an seo? Cho luath 's a chuir 702 crìoch air a' phròiseas agus fhuair 703 a ghlas, thill an siostam air ais. Agus thuirt i gu bheil a-nis dithis againn a tha a 'feitheamh. Agus an uairsin ùraich sinn iad còmhla. Agus comharraich gu bheil dùil ris an dà chuid.

Chan eil fios agam carson a tha Postgres a’ dèanamh seo. Ach tha duilgheadas ann ris an canar f…. Tha e coltach rium nach e teirm ann an Ruisis a tha seo. Seo nuair a bhios a h-uile duine a’ feitheamh ri aon chaisteal, fiù ’s ma tha 20 suidheachadh ann a tha a’ feitheamh ris a’ chaisteal. Agus gu h-obann bidh iad uile a 'dùsgadh aig an aon àm. Agus tha a h-uile duine a 'tòiseachadh a' feuchainn ri freagairt. Ach tha an siostam ga dhèanamh gus am bi a h-uile duine a 'feitheamh ri 703. Leis gu bheil iad uile a' feitheamh, agus cuiridh sinn loidhne orra uile. Agus ma nochdas iarrtas ùr sam bith eile a chaidh a chruthachadh às deidh sin, mar eisimpleir, 707, bidh beàrn ann a-rithist.

Agus tha e coltach rium gu bheil seo air a dhèanamh gus an urrainn dhomh a ràdh gu bheil 702 aig an ìre seo a’ feitheamh ri 703, agus a h-uile duine a thig às deidh sin, nach bi inntrigeadh sam bith aca san raon seo. Ach cho luath ‘s a dh’ fhàgas a ’chiad neach-frithealaidh, agus a h-uile duine a bha a’ feitheamh aig an àm sin ron ùrachadh, gheibh iad an aon chomharra. Agus mar sin tha e coltach riumsa gu bheil seo air a dhèanamh gus an urrainn dhuinn pròiseasadh ann an òrdugh, gus am bi iad air an òrdachadh gu ceart.

Bha mi an-còmhnaidh a’ coimhead air mar rud caran neònach. Leis an seo, mar eisimpleir, chan eil iad air an liostadh idir. Ach, tha e coltach riumsa, a h-uile uair a bheir sinn glas ùr, bidh sinn a 'coimhead air a h-uile duine a tha a' feitheamh. An uairsin bidh sinn gan cur còmhla. Agus an uairsin bidh fear ùr sam bith a thig a-steach a’ ciudha suas dìreach nuair a bhios an ath neach deiseil a’ giullachd. Ceist fìor mhath. Tapadh leibh gu mòr airson do cheist!

Tha e coltach rium gu bheil e tòrr nas reusanta nuair a tha dùil aig 705 ri 704.

Ach tha an duilgheadas an seo mar a leanas. Gu teicnigeach, faodaidh tu aon no an tè sin a dhùsgadh. Agus mar sin bidh sinn a 'dùsgadh aon no an tè eile. Ach dè thachras ann an obrachadh an t-siostam? Chì thu mar a tha 703 aig a’ mhullach air an ID malairt aige fhèin a bhacadh. Seo mar a tha Postgres ag obair. Agus tha 703 air a bhacadh leis an ID malairt aige fhèin, mar sin ma tha cuideigin ag iarraidh feitheamh, an uairsin feitheamh ri 703. Agus, gu dearbh, tha 703 a 'crìochnachadh. Agus dìreach às deidh a chrìochnachadh, bidh aon de na pròiseasan a 'dùsgadh. Agus chan eil fios againn dè an seòrsa pròiseas a bhios ann. An uairsin bidh sinn a 'pròiseas a h-uile càil mean air mhean. Ach chan eil e soilleir dè am pròiseas a dhùisgeas an toiseach, oir dh’ fhaodadh gur e gin de na pròiseasan sin a th’ ann. Gu bunaiteach, bha clàr-ama againn a thuirt gum faodadh sinn a-nis gin de na pròiseasan sin a dhùsgadh. Bidh sinn dìreach a’ taghadh fear air thuaiream. Mar sin, bu chòir an dà chuid a thoirt fa-near, oir faodaidh sinn aon dhiubh a dhùsgadh.

Agus is e an duilgheadas a th’ ann gu bheil CP-Infinity againn. Agus mar sin, tha e glè choltach gun urrainn dhuinn an tè as fhaide air adhart a dhùsgadh. Agus ma tha, mar eisimpleir, bidh sinn a 'dùsgadh nas fhaide air adhart, bidh sinn a' feitheamh ris an fhear a fhuair a 'ghlas, agus mar sin chan eil sinn a' dearbhadh cò dìreach a thèid a dhùsgadh an toiseach. Bidh sinn a 'cruthachadh dìreach suidheachadh mar sin, agus dùisgidh an siostam iad air thuaiream.

tha artaigilean mu ghlasan-glasaidh Egor Rogov. Seall, tha iad cuideachd inntinneach agus feumail. Tha an cuspair, gu dearbh, uamhasach iom-fhillte. Mòran taing Bruce!

Source: www.habr.com

Cuir beachd ann