Debloke Manadjè a Lock Postgres. Bruce Momjian

Transkripsyon diskou Bruce Momjian pou 2020 "Debloke Manadjè Lock Postgres la".

Debloke Manadjè a Lock Postgres. Bruce Momjian

(Remak: Tout demann SQL ki soti nan glisad yo ka jwenn nan lyen sa a: http://momjian.us/main/writings/pgsql/locking.sql)

Bonjou! Li se gwo yo dwe isit la nan Larisi ankò. Mwen regrèt mwen pa t 'kapab vini ane pase a, men ane sa a Ivan ak mwen gen gwo plan. Mwen espere vin isit la pi souvan. Mwen renmen vini nan Larisi. Mwen pral vizite Tyumen, Tver. Mwen byen kontan ke mwen pral kapab vizite vil sa yo.

Non mwen se Bruce Momjian. Mwen travay nan EnterpriseDB epi mwen te travay ak Postgres pou plis pase 23 ane. Mwen rete nan Philadelphia, USA. Mwen vwayaje anviwon 90 jou pa ane. E mwen asiste anviwon 40 konferans. mwen Sit wèb, ki gen diapositives ke mwen pral montre w kounye a. Se poutèt sa, apre konferans lan ou ka telechaje yo nan sit entènèt pèsonèl mwen an. Li genyen tou anviwon 30 prezantasyon. Genyen tou videyo ak yon gwo kantite antre blog, plis pase 500. Sa a se yon resous san patipri enfòmatif. Men, si ou enterese nan materyèl sa a, Lè sa a, mwen envite ou sèvi ak li.

Mwen te konn se yon pwofesè, yon pwofesè anvan mwen te kòmanse travay ak Postgres. Apre sa, mwen byen kontan ke mwen pral kapab kounye a di ou sa mwen pral di ou. Sa a se youn nan prezantasyon ki pi enteresan mwen yo. Ak prezantasyon sa a gen 110 glisad. Nou pral kòmanse pale ak bagay ki senp, ak nan fen rapò a ap vin pi plis ak plis konplèks, epi yo pral vin byen konplèks.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Sa a se yon konvèsasyon olye dezagreyab. Bloke se pa sijè ki pi popilè. Nou vle sa a disparèt yon kote. Se tankou ale nan dantis la.

Debloke Manadjè a Lock Postgres. Bruce Momjian

  1. Bloke se yon pwoblèm pou anpil moun ki travay nan baz done epi ki gen plizyè pwosesis kouri an menm tan. Yo bezwen bloke. Sa vle di, jodi a mwen pral ba ou konesans debaz sou bloke.
  2. ID tranzaksyon yo. Sa a se yon pati olye raz nan prezantasyon an, men yo bezwen yo dwe konprann.
  3. Apre sa, nou pral pale sou kalite bloke. Sa a se yon pati san patipri mekanik.
  4. Ak anba a nou pral bay kèk egzanp nan bloke. Epi li pral byen difisil pou konprann.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ann pale de bloke.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Terminoloji nou an byen konplèks. Konbyen nan nou ki konnen ki kote pasaj sa a soti? De moun. Sa a soti nan yon jwèt ki rele Colossal Cave Adventure. Se te yon jwèt òdinatè ki baze sou tèks nan ane 80 yo, mwen panse. Se la ou te oblije antre nan yon twou wòch, nan yon labirent, ak tèks la chanje, men kontni an te apeprè menm bagay la chak fwa. Se konsa mwen sonje jwèt sa a.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak isit la nou wè non kadna yo ki te vin jwenn nou nan Oracle. Nou itilize yo.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Isit la nou wè tèm ki konfonn mwen. Pa egzanp, SHARE UPDATE ECXLUSIVE. Next PATAJE RAW ECXLUSIVE. Yo dwe onèt, non sa yo pa trè klè. Nou pral eseye konsidere yo an plis detay. Gen kèk ki genyen mo "pataje", ki vle di separe. Gen kèk ki genyen mo "eksklizif". Gen kèk ki genyen tou de mo sa yo. Mwen ta renmen kòmanse ak ki jan kadna sa yo travay.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak mo "aksè" a tou trè enpòtan. Ak mo "ranje" yo se yon fisèl. Sa vle di, distribisyon aksè, distribisyon ranje.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Yon lòt pwoblèm ki bezwen konprann nan Postgres, ke mwen malerezman pa pral kapab kouvri nan diskou mwen an, se MVCC. Mwen gen yon prezantasyon separe sou sijè sa a sou sit entènèt mwen an. Men, si ou panse prezantasyon sa a difisil, MVCC se pwobableman pi difisil mwen an. Men, si w enterese, ou ka gade li sou sit entènèt la. Ou ka gade videyo a.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Yon lòt bagay nou bezwen konprann se ID tranzaksyon yo. Anpil tranzaksyon pa ka travay san idantifyan inik. Ak isit la nou gen yon eksplikasyon sou sa yon tranzaksyon se. Postgres gen de sistèm nimero tranzaksyon yo. Mwen konnen sa a se pa yon solisyon trè bèl.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epitou kenbe nan tèt ou ke glisad yo pral byen difisil pou konprann, kidonk sa ki make an wouj se sa ou bezwen peye atansyon a.

Debloke Manadjè a Lock Postgres. Bruce Momjian

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

Ann wè. Nimewo tranzaksyon an make an wouj. Fonksyon SELECT pg_back yo montre isit la. Li retounen tranzaksyon mwen an ak ID tranzaksyon an.

Yon lòt bagay, si ou renmen prezantasyon sa a epi ou vle kouri li sou baz done ou a, Lè sa a, ou ka ale nan lyen sa a nan woz epi telechaje SQL la pou prezantasyon sa a. Epi ou ka tou senpleman kouri li nan PSQL ou ak prezantasyon an antye pral sou ekran ou imedyatman. Li p ap gen flè, men omwen nou ka wè li.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Nan ka sa a nou wè ID tranzaksyon an. Se nimewo nou te ba li a. Epi gen yon lòt kalite ID tranzaksyon nan Postgres, ki rele ID tranzaksyon vityèl

E nou dwe konprann sa. Sa a trè enpòtan, otreman nou pa pral kapab konprann bloke nan Postgres.

Yon ID tranzaksyon vityèl se yon ID tranzaksyon ki pa genyen valè ki pèsistan. Pou egzanp, si mwen kouri yon lòd SELECT, Lè sa a, mwen gen plis chans pa pral chanje baz done a, mwen pa pral fèmen anyen. Se konsa, lè nou kouri yon senp SELECT, nou pa bay tranzaksyon sa a yon ID ki pèsistan. Nou sèlman ba li yon ID vityèl la.

Ak sa a amelyore pèfòmans Postgres, amelyore kapasite netwayaj, kidonk ID tranzaksyon vityèl la konsiste de de nimewo. Premye nimewo anvan koupe a se ID backend la. Ak sou bò dwat la nou wè jis yon kontwa.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Se poutèt sa, si mwen kouri yon demann, li di ke ID backend la se 2.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Men, si mwen kouri yon seri de tranzaksyon sa yo, Lè sa a, nou wè ke kontwa a ogmante chak fwa mwen kouri yon rechèch. Pou egzanp, lè mwen kouri rechèch la 2/10, 2/11, 2/12, elatriye.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Kenbe nan tèt ou ke gen de kolòn isit la. Sou bò gòch la nou wè ID tranzaksyon vityèl la - 2/12. Ak sou bò dwat la nou gen yon ID tranzaksyon pèmanan. Ak jaden sa a se vid. Ak tranzaksyon sa a pa modifye baz done a. Se konsa, mwen pa bay li yon ID tranzaksyon pèmanan.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Le pli vit ke mwen kouri analiz kòmandman an ((ANALYZE)), menm rechèch la ban m 'yon ID tranzaksyon pèmanan. Gade kijan sa chanje pou nou. Mwen pa t 'gen ID sa a anvan, men kounye a mwen genyen li.

Debloke Manadjè a Lock Postgres. Bruce Momjian

So i annan en lot demann, en lot tranzaksyon. Nimewo tranzaksyon vityèl la se 2/13. Men, si mwen mande pou yon ID tranzaksyon ki pèsistan, Lè sa a, lè mwen kouri rechèch la, mwen pral jwenn li.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Se konsa, yon lòt fwa ankò. Nou gen yon ID tranzaksyon vityèl ak yon ID tranzaksyon ki pèsistan. Jis konprann pwen sa a pou w konprann konpòtman Postgres.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Nou ale nan twazyèm seksyon an. Isit la nou pral tou senpleman mache nan diferan kalite kadna nan Postgres. Li pa trè enteresan. Dènye seksyon an pral pi enteresan. Men, nou dwe konsidere bagay debaz yo, paske sinon nou pa pral konprann sa ki pral rive apre.

Nou pral ale nan seksyon sa a, nou pral gade nan chak kalite seri. Apre sa, mwen pral montre w egzanp sou ki jan yo enstale, ki jan yo travay, mwen pral montre w kèk demann ke ou ka itilize yo wè ki jan bloke fonksyone nan Postgres.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Pou kreye yon rechèch ak wè sa k ap pase nan Postgres, nou bezwen bay rechèch la nan gade nan sistèm. Nan ka sa a, pg_lock make an wouj. Pg_lock se yon tablo sistèm ki di nou ki kadna yo itilize kounye a nan Postgres.

Sepandan, li trè difisil pou mwen montre w pg_lock poukont li paske li byen konplèks. Se konsa, mwen te kreye yon View ki montre pg_locks. Epi tou li fè kèk travay pou mwen ki pèmèt mwen konprann pi byen. Sa vle di, li eskli kadna mwen an, pwòp sesyon mwen an, elatriye. Li jis estanda SQL epi li pèmèt ou pi byen montre w sa k ap pase.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Yon lòt pwoblèm se ke View sa a trè laj, kidonk mwen dwe kreye yon dezyèm - lockview2.

Debloke Manadjè a Lock Postgres. Bruce Momjian Epi li montre m plis kolòn nan tablo a. Ak yon lòt ki montre m 'rès kolòn yo. Sa a se byen konplèks, kidonk mwen te eseye prezante li kòm tou senpleman posib.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Se konsa, nou te kreye yon tab ki rele Lockdemo. Epi nou te kreye yon sèl liy la. Sa a se tab echantiyon nou an. Epi nou pral kreye seksyon jis pou montre w egzanp kadna.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Se konsa, yon ranje, yon kolòn. Premye kalite seri a rele ACCESS SHARE. Sa a se pi piti bloke restriksyon an. Sa vle di ke li pratikman pa konfli ak lòt kadna.

Men, si nou vle klèman defini yon seri, nou kouri kòmandman an "lock tab". Epi li pral evidamman bloke, sa vle di nan mòd ACCESS SHARE nou lanse tab la fèmen. Men, si mwen kouri PSQL nan background nan, Lè sa a, mwen kòmanse dezyèm sesyon an soti nan premye sesyon mwen an fason sa a. Sa vle di, kisa mwen pral fè la a? Mwen ale nan yon lòt sesyon epi di li "montre m 'lockview la pou demann sa a." Ak isit la mwen gen AccessShareLock nan tablo sa a. Sa a se egzakteman sa mwen te mande. Epi li di ke blòk la te plase. Trè senp.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Pli lwen, si nou gade nan dezyèm kolòn nan, Lè sa a, pa gen anyen la. Yo vid.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Men, si mwen kouri "SELECT" kòmandman an, Lè sa a, sa a se fason ki implicite (eksplis) pou mande AccessShareLock. Se konsa, mwen lage tab mwen an epi kouri rechèch la ak rechèch la retounen plizyè ranje. Ak nan youn nan liy yo nou wè AccessShareLock. Kidonk, SELECT rele AccessShareLock sou tab la. Epi li pa gen konfli ak nòmalman anyen paske li se yon seri ba-nivo.

Debloke Manadjè a Lock Postgres. Bruce Momjian

E si mwen kouri yon SELECT epi mwen gen twa tab diferan? Anvan mwen te kouri sèlman yon tab, kounye a mwen ap kouri twa: pg_class, pg_namespace ak pg_attribute.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi, koulye a, lè mwen gade nan rechèch la, mwen wè 9 AccessShareLocks nan twa tab. Poukisa? Twa tab yo make an ble: pg_attribute, pg_class, pg_namespace. Men, ou ka wè tou ke tout endèks ki defini nan tablo sa yo tou gen AccessShareLock.

Lè sa a se yon seri ki pratikman pa konfli ak lòt moun. Ak tout sa li fè se tou senpleman anpeche nou reset tab la pandan ke nou chwazi li. Li fè sans. Sa vle di, si nou chwazi yon tab, li disparèt nan moman sa a, Lè sa a, sa a se mal, kidonk AccessShare se yon kadna nivo ki ba ki di nou "pa lage tab sa a pandan m ap travay". Esansyèlman, se tout sa li fè.

Debloke Manadjè a Lock Postgres. Bruce Momjian

ROW SHARE - Lock sa a yon ti kras diferan.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ann pran yon egzanp. SELECT ROW SHARE metòd pou bloke chak ranje endividyèlman. Nan fason sa a pèsonn pa ka efase yo oswa chanje yo pandan n ap gade yo.

Debloke Manadjè a Lock Postgres. Bruce MomjianSe konsa, kisa SHARE LOCK fè? Nou wè ke ID tranzaksyon an se 681 pou SELECT. Ak sa a se enteresan. Kisa ki te pase isit la? Premye fwa nou wè nimewo a se nan jaden "Lock". Nou pran ID tranzaksyon an epi li di li bloke li nan mòd eksklizif. Tout sa li fè se li di mwen gen yon ranje ki teknikman fèmen yon kote nan tab la. Men, li pa di ki kote egzakteman. Nou pral gade sa a an plis detay yon ti kras pita.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Isit la nou di ke fèmen a se itilize pa nou.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Se konsa, yon seri eksklizif klèman di ke li se eksklizif. Epi tou si ou efase yon ranje nan tablo sa a, Lè sa a, sa a se sa ki pral rive, jan ou ka wè.

Debloke Manadjè a Lock Postgres. Bruce Momjian

SHARE EXCLUSIVE se yon seri ki pi long.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Sa a se (ANALYZE) kòmandman analizè yo pral itilize.

Debloke Manadjè a Lock Postgres. Bruce Momjian

SHARE LOCK - ou ka klèman fèmen nan mòd pataje.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ou kapab tou kreye yon endèks inik. Epi la ou ka wè SHARE LOCK, ki fè pati yo. Epi li fèmen tab la epi li mete yon LOCK SHARE sou li.

Pa default, SHARE LOCK sou yon tab vle di ke lòt moun ka li tab la, men pèsonn pa ka modifye li. Ak sa a se egzakteman sa k ap pase lè ou kreye yon endèks inik.

Si mwen kreye yon inik endèks ansanm, Lè sa a, mwen pral gen yon kalite diferan nan bloke paske, jan ou sonje, lè l sèvi avèk endis ansanm diminye kondisyon an bloke. Men, si mwen sèvi ak yon seri nòmal, yon endèks nòmal, Lè sa a, mwen pral konsa anpeche ekri nan endèks la tab pandan y ap kreye li. Si mwen sèvi ak yon endèks ansanm, Lè sa a, mwen bezwen sèvi ak yon kalite diferan nan bloke.

Debloke Manadjè a Lock Postgres. Bruce Momjian

SHARE ROW EXCLUSIVE - ankò li ka mete klèman (ekslisiteman).

Debloke Manadjè a Lock Postgres. Bruce Momjian

Oswa nou ka kreye yon règ, sa vle di, pran yon ka espesifik kote li pral itilize.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Bloke EXCLUSIVE vle di ke pèsonn pa ka chanje tab la.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Isit la nou wè diferan kalite kadna.

Debloke Manadjè a Lock Postgres. Bruce Momjian

ACCESS EXCLUSIVE, pou egzanp, se yon lòd bloke. Pou egzanp, si ou fè sa CLUSTER table, Lè sa a, sa a pral vle di ke pèsonn pa pral kapab ekri la. Epi li fèmen pa sèlman tab la tèt li, men tou, endis yo.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Sa a se dezyèm paj la nan blokaj la ACCESS EXCLUSIVE, kote nou wè egzakteman sa li bloke nan tablo a. Li fèmen ranje tab endividyèl yo, ki se byen enteresan.

Se tout enfòmasyon debaz mwen te vle bay. Nou te pale de kadna, sou ID tranzaksyon, nou te pale de ID tranzaksyon vityèl, sou ID tranzaksyon pèmanan.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi, koulye a nou pral ale nan kèk egzanp bloke. Sa a se pati ki pi enteresan an. Nou pral gade nan ka trè enteresan. Ak objektif mwen nan prezantasyon sa a se ba ou yon pi bon konpreyansyon sou sa Postgres aktyèlman ap fè lè li eseye bloke kèk bagay. Mwen panse ke li trè bon nan bloke soti pati yo.

Ann gade kèk egzanp espesifik.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Nou pral kòmanse ak tab ak yon ranje nan yon tab. Lè mwen mete yon bagay mwen gen ExclusiveLock, Tranzaksyon ID ak ExclusiveLock parèt sou tab la.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Kisa k ap pase si mwen mete de lòt ranje? Epi, koulye a tab nou an gen twa ranje. Apre sa, mwen mete yon sèl ranje epi li te resevwa sa a kòm yon pwodiksyon. Men, si mwen mete de lòt ranje, ki sa ki etranj sou sa? Gen yon bagay etranj isit la paske mwen te ajoute twa ranje nan tablo sa a, men mwen toujou gen de ranje nan tab la fèmen. Ak sa a se esansyèlman konpòtman an fondamantal nan Postgres.

Anpil moun panse ke si nan yon baz done ou fèmen 100 ranje, Lè sa a, w ap bezwen kreye 100 antre fèmen. Si mwen bloke 1 ranje nan yon fwa, Lè sa a, mwen pral bezwen 000 demann sa yo. Men, si mwen bezwen yon milyon oswa yon milya dola bloke. Men, si nou fè sa, li p ap travay trè byen. Si ou te itilize yon sistèm ki kreye antre bloke pou chak ranje endividyèl, Lè sa a, ou ka wè ke sa a se konplike. Paske ou bezwen imedyatman defini yon tab fèmen ki ka debòde, men Postgres pa fè sa.

Ak sa ki vrèman enpòtan nan glise sa a se ke li montre klèman ke gen yon lòt sistèm ki kouri andedan MVCC ki fèmen ranje endividyèl yo. Se konsa, lè ou fèmen dè milya de ranje, Postgres pa kreye yon milya kòmand bloke separe. Ak sa a gen yon efè trè bon sou pwodiktivite.

Debloke Manadjè a Lock Postgres. Bruce Momjian

E yon ajou? Mwen mete ajou ranje a kounye a, epi ou ka wè ke li te fè de operasyon diferan nan yon fwa. Li fèmen tab la an menm tan, men li tou fèmen endèks la. Epi li te bezwen fèmen endèks la paske gen kontrent inik sou tab sa a. Epi nou vle asire w ke pèsonn pa chanje li, kidonk nou bloke li.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Kisa k ap pase si mwen vle mete ajou de ranje? Epi nou wè ke li konpòte menm jan an. Nou fè de fwa plis mizajou, men egzakteman menm kantite liy fèmen.

Si w ap mande ki jan Postgres fè sa, w ap bezwen koute diskou mwen yo sou MVCC pou aprann kijan Postgres entènman make liy sa yo ke li chanje. Ak Postgres gen yon fason nan ki li fè sa, men li pa fè li nan nivo a bloke tab, li fè li nan yon nivo pi ba ak pi efikas.

Debloke Manadjè a Lock Postgres. Bruce Momjian

E si mwen vle efase yon bagay? Si mwen efase, pou egzanp, yon ranje epi mwen toujou gen de antre bloke mwen an, e menm si mwen vle efase yo tout, yo toujou la.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi, pou egzanp, mwen vle insert 1 liy, ak Lè sa a, swa efase oswa ajoute 000 liy, Lè sa a, sa yo liy endividyèl ke mwen ajoute oswa chanje, yo pa anrejistre isit la. Yo ekri nan yon nivo pi ba nan seri a tèt li. E pandan diskou MVCC mon ti koz lo sa an detay. Men, li enpòtan anpil lè w ap analize kadna pou asire w ke w ap bloke nan nivo tab la e ke ou pa wè ki jan ranje endividyèl yo ap anrejistre isit la.

Debloke Manadjè a Lock Postgres. Bruce Momjian

E bloke eksplisit?

Debloke Manadjè a Lock Postgres. Bruce Momjian

Si mwen klike sou rafrechi, mwen gen de ranje fèmen. Men, si mwen chwazi yo tout epi klike "Mizajou toupatou," Lè sa a, mwen toujou gen de dosye bloke.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Nou pa kreye dosye separe pou chak ranje endividyèl. Paske Lè sa a, pwodiktivite gout, ka gen twòp nan li. Epi nou ka jwenn tèt nou nan yon sitiyasyon dezagreyab.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak menm bagay la, si nou fè pataje, nou ka fè li tout 30 fwa.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Nou retabli tab nou an, efase tout bagay, Lè sa a, mete yon ranje ankò.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Yon lòt konpòtman ke ou wè nan Postgres ki trè byen li te ye ak konpòtman vle se ke ou ka fè yon aktyalizasyon oswa yon seleksyon. Epi ou ka fè sa an menm tan. Epi chwazi pa bloke aktyalizasyon ak menm bagay la nan direksyon opoze a. Nou di lektè a pa bloke ekriven an, epi ekriven an pa bloke lektè a.

Mwen pral montre w yon egzanp sa a. Mwen pral fè yon chwa kounye a. Lè sa a, nou pral fè INSERT la. Lè sa a, ou ka wè - 694. Ou ka wè ID tranzaksyon an ki fè ensèsyon sa a. Epi se konsa li fonksyone.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Men, si mwen gade nan ID backend mwen an kounye a, li nan kounye a 695.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Apre sa, mwen ka wè 695 parèt nan tablo mwen an.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Men, si mwen mete ajou isit la tankou sa a, Lè sa a, mwen jwenn yon ka diferan. Nan ka sa a, 695 se yon seri eksklizif, ak aktyalizasyon gen menm konpòtman an, men pa gen okenn konfli ant yo, ki se byen etranj.

Epi ou ka wè ke nan tèt li se ShareLock, ak nan pati anba a li se ExclusiveLock. Ak tou de tranzaksyon yo te travay deyò.

Epi ou bezwen koute diskou mwen an nan MVCC pou w konprann ki jan sa rive. Men, sa a se yon ilistrasyon ke ou ka fè li an menm tan an, sa vle di fè yon SELECT ak yon UPDATE an menm tan an.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ann reset epi fè yon lòt operasyon ankò.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Si ou eseye kouri de mizajou ansanm sou menm ranje a, li pral bloke. Epi sonje, mwen te di ke lektè a pa bloke ekriven an, ak ekriven an pa bloke lektè a, men yon ekriven bloke yon lòt ekriven. Sa vle di, nou pa ka fè de moun mete ajou menm ranje a an menm tan. Ou dwe tann jiskaske youn nan yo fini.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak nan lòd yo ilistre sa a, mwen pral gade nan tablo a Lockdemo. Epi nou pral gade nan yon sèl ranje. Pou chak tranzaksyon 698.

Nou mete sa a 2. 699 se premye aktyalizasyon an. Epi li te reyisi oswa li nan yon tranzaksyon annatant epi li ap tann pou nou konfime oswa anile.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Men, gade nan yon lòt bagay - 2/51 se premye tranzaksyon nou an, premye sesyon nou an. 3/112 se dezyèm demann ki soti nan tèt la ki chanje valè sa a nan 3. Men, si w remake, youn nan tèt fèmen tèt li, ki se 699. Men, 3/112 pa t 'akòde seri a. Kolòn Lock_mode a di sa l ap tann. Li espere 699. E si ou gade kote 699 ye, li pi wo. E ki sa premye sesyon an te fè? Li te kreye yon seri eksklizif sou pwòp ID tranzaksyon li. Men ki jan Postgres fè li. Li bloke pwòp ID tranzaksyon li yo. Men, si ou vle tann pou yon moun konfime oswa anile, Lè sa a, ou bezwen rete tann pandan gen yon tranzaksyon annatant. Epi se poutèt sa nou ka wè yon liy etranj.

Ann gade ankò. Sou bò gòch la nou wè ID pwosesis nou an. Nan dezyèm kolòn nan nou wè ID tranzaksyon vityèl nou an, ak nan twazyèm nan nou wè lock_type. Ki sa sa a vle di? Esansyèlman sa li di se ke li bloke ID tranzaksyon an. Men, remake ke tout ranje ki anba a di relasyon. Se konsa, ou gen de kalite kadna sou tab la. Gen yon seri relasyon. Apre sa, gen blokaj la transactionid, kote ou bloke sou pwòp ou a, ki se egzakteman sa k ap pase nan premye ranje a oswa nan anba a anpil, kote transactionid la se, kote nou tann pou 699 fini operasyon li yo.

Mwen pral wè sa k ap pase isit la. Ak isit la de bagay ki rive ansanm. Ou ap gade yon seri ID tranzaksyon nan premye ranje ki fèmen tèt li. Epi li bloke tèt li pou fè moun tann.

Si w gade 6yèm liy lan, li se menm antre ak premye a. Se poutèt sa tranzaksyon 699 bloke. 700 se tou pwòp tèt ou-bloke. Apre sa, nan ranje anba a ou pral wè ke nou ap tann pou 699 fini operasyon li yo.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak nan lock_type, tuple ou wè nimewo.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ou ka wè li se 0/10. Epi sa a se nimewo paj la, epi tou konpanse a nan ranje patikilye sa a.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi ou wè li vin 0/11 lè nou mete ajou.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Men, an reyalite li se 0/10, paske gen yon rete tann pou operasyon sa a. Nou gen opòtinite pou nou wè ke sa a se seri a ke mwen ap tann konfime.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Yon fwa nou te konfime li ak peze komèt, epi lè aktyalizasyon a fini, sa a se sa nou jwenn ankò. Tranzaksyon 700 se sèl kadna a, li pa tann pèsonn lòt paske li te komèt. Li tou senpleman tann pou tranzaksyon an fini. Yon fwa 699 fini, nou pa tann anyen ankò. Epi kounye a tranzaksyon 700 di ke tout bagay anfòm, ke li gen tout kadna li bezwen sou tout tab pèmèt.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi pou fè tout bagay sa a pi konplike toujou, nou kreye yon lòt View, ki fwa sa a pral bay nou yon yerachi. Mwen pa atann ou konprann demann sa a. Men, sa ap ban nou yon vizyon pi klè sou sa k ap pase.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Sa a se yon View recursive ki tou gen yon lòt seksyon. Apre sa, li pote tout bagay tounen ansanm ankò. Ann sèvi ak sa a.

Debloke Manadjè a Lock Postgres. Bruce Momjian

E si nou fè twa mizajou similtane epi nou di ke ranje a se kounye a twa. Epi nou pral chanje 3 a 4.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak isit la nou wè 4. Ak tranzaksyon ID 702.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Apre sa, mwen pral chanje 4 a 5. Ak 5 a 6, ak 6 a 7. Apre sa, mwen pral liy yon kantite moun ki pral tann pou yon sèl tranzaksyon sa a fini.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak tout bagay vin klè. Ki premye ranje a? Sa a se 702. Sa a se ID tranzaksyon an ki okòmansman mete valè sa a. Kisa ki ekri nan kolòn Granted mwen an? Mwen gen mak f. Sa yo se mizajou mwen yo ki (5, 6, 7) pa ka apwouve paske n ap tann tranzaksyon ID 702 fini. La nou gen tranzaksyon ID bloke. Ak sa a rezilta nan 5 kadna ID tranzaksyon.

E si ou gade nan 704, nan 705, pa gen anyen ki te ekri la ankò, paske yo pa konnen sa k ap pase ankò. Yo senpleman ekri ke yo pa gen okenn lide sa k ap pase. Epi yo pral jis ale nan dòmi paske yo ap tann pou yon moun fini ak reveye lè gen yon opòtinite pou chanje ranje.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Sa a se sa li sanble. Li klè ke yo tout ap tann 12yèm liy lan.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Sa a se sa nou te wè isit la. Men 0/12.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Se konsa, yon fwa premye tranzaksyon an apwouve, ou ka wè isit la ki jan yerachi a ap travay. Epi, koulye a tout bagay vin klè. Yo tout vin pwòp. Epi yo aktyèlman toujou ap tann.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Men sa k ap pase. 702 komèt. Epi, koulye a 703 vin ranje ranje sa a, ak Lè sa a, 704 kòmanse ap tann pou 703 komèt. Epi 705 la ap tann sa tou. Epi lè tout bagay sa yo fini, yo netwaye tèt yo. Apre sa, mwen ta renmen fè remake ke tout moun ap fè liy. Lè sa a se trè menm jan ak yon sitiyasyon nan yon blokis lè tout moun ap tann pou premye machin nan. Premye machin nan sispann epi tout moun nan liy yo nan yon liy long. Lè sa a, li deplase, Lè sa a, pwochen machin nan ka kondwi pi devan epi jwenn blòk li yo, elatriye.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Men, si sa a pa t 'sanble konplike ase pou ou, Lè sa a, nou pral kounye a pale ak ou sou enpas. Mwen pa konnen kiyès nan nou ki te rankontre yo. Sa a se yon pwoblèm jistis komen nan sistèm baz done. Men, enpas se lè yon sesyon ap tann pou yon lòt sesyon fè yon bagay. Ak nan moman sa a yon lòt sesyon ap tann pou premye sesyon an fè yon bagay.

Epi, pa egzanp, si Ivan di: "Ban m yon bagay," epi mwen di: "Non, m ap ba w li sèlman si w ban m yon lòt bagay." Epi li di, "Non, mwen p'ap ba ou li si ou pa ban mwen li." Epi nou fini nan yon sitiyasyon enpas. Mwen sèten Ivan pap fè sa, men ou konprann sans nou gen de moun ki vle jwenn yon bagay e yo pa prè pou bay li jiskaske lòt moun nan ba yo sa yo vle. E pa gen solisyon.

Ak esansyèlman, baz done ou a bezwen detekte sa a. Lè sa a, ou bezwen efase oswa fèmen youn nan sesyon yo, paske otreman yo pral rete la pou tout tan. Epi nou wè li nan baz done, nou wè li nan sistèm opere. Ak nan tout kote nou gen pwosesis paralèl, sa ka rive.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi, koulye a nou pral enstale de enpas. Nou pral mete 50 ak 80. Nan premye ranje a, mwen pral mete ajou soti nan 50 a 50. Mwen pral jwenn nimewo tranzaksyon 710.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Apre sa, mwen pral chanje 80 a 81, ak 50 a 51.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak sa a se sa li pral sanble. Se konsa, 710 gen yon ranje bloke, ak 711 ap tann pou konfimasyon. Nou te wè sa lè nou mete ajou. 710 se pwopriyetè seri nou an. Ak 711 tann pou 710 pou konplete tranzaksyon an.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi li menm di sou ki ranje enpas yo rive. Ak isit la se kote li kòmanse vin etranj.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Koulye a, nou mete ajou 80 a 80.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi sa a se kote enpas yo kòmanse. 710 ap tann yon repons nan men 711, ak 711 ap tann pou 710. Epi sa a pa pral byen fini. Epi pa gen okenn fason soti nan sa a. Epi yo pral atann yon repons youn ak lòt.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi li pral jis kòmanse retade tout bagay. E nou pa vle sa.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak Postgres gen fason pou remake lè sa rive. Lè sa rive, ou jwenn erè sa a. E apati sa a li klè ke tèl ak tèl pwosesis ap tann yon SHARE LOCK soti nan yon lòt pwosesis, sa vle di, ki bloke pa pwosesis 711. Ak pwosesis sa a t ap tann pou yo bay yon SHARE LOCK sou tèl ak tèl yon ID tranzaksyon e li te bloke pa tèl ak tèl pwosesis. Se poutèt sa, gen yon sitiyasyon enpas isit la.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Èske gen twa-fason enpas? Èske li posib? Wi.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Nou antre nimewo sa yo nan yon tablo. Nou chanje 40 a 40, nou fè bloke.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Nou chanje 60 a 61, 80 a 81.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Lè sa a, nou chanje 80 ak Lè sa a, boom!

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak 714 kounye a ap tann pou 715. 716th la ap tann pou 715th la. E pa gen anyen ki ka fè sou li.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Pa gen de moun ankò, gen twa moun deja. Mwen vle yon bagay nan men ou, youn sa a vle yon bagay nan men yon twazyèm moun, ak twazyèm moun nan vle yon bagay nan men mwen. Apre sa, nou fini nan yon tann twa fason paske nou tout ap tann pou lòt moun nan konplete sa yo bezwen fè.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak Postgres konnen sou ki ranje sa rive. Se konsa, li pral ba ou mesaj sa a, ki montre ke ou gen yon pwoblèm kote twa entrées yo bloke youn ak lòt. Epi pa gen okenn restriksyon isit la. Sa a se ka a kote 20 antre bloke youn ak lòt.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Pwoblèm nan pwochen se serilizabl.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Si espesyal serilizable fèmen a kle.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi nou retounen nan 719. Pwodiksyon li se byen nòmal.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi ou ka klike sou fè tranzaksyon an soti nan serilizabl.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi ou reyalize ke kounye a ou gen yon lòt kalite fèmen SA - sa vle di serilizabl.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Debloke Manadjè a Lock Postgres. Bruce Momjian

Se konsa, nou gen yon nouvo kalite seri ki rele SARieadLock, ki se yon seri seri epi ki pèmèt ou antre nan seri.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi tou ou ka mete endèks inik.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Nan tablo sa a nou gen endis inik.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Se konsa, si mwen mete nan nimewo a 2 isit la, Se konsa, mwen gen yon 2. Men, nan tèt la, mwen mete yon lòt 2 pous Epi ou ka wè ke 721 gen yon seri eksklizif. Men kounye a 722 ap tann pou 721 fini operasyon li paske li pa ka mete 2 jiskaske li konnen sa ki pral rive 721.

Debloke Manadjè a Lock Postgres. Bruce Momjian

E si nou fer subtranzaksyon.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Isit la nou gen 723.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Men, si nou sove pwen an ak Lè sa a, mete ajou li, Lè sa a, nou jwenn yon nouvo ID tranzaksyon. Sa a se yon lòt modèl konpòtman ou bezwen konnen. Si nou retounen sa a, Lè sa a, ID tranzaksyon an ale. 724 fèy. Men kounye a nou gen 725.

Se konsa, kisa mwen ap eseye fè isit la? M ap eseye montre w kèk egzanp kadna ki pa nòmal ke w ka jwenn: kit se seri serilizab oswa SAVEPOINT, sa yo se diferan kalite kadna ki pral parèt nan tablo kadna a.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Sa a se kreyasyon eksplisit (eksplis) kadna, ki gen pg_advisory_lock.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi ou wè ke se kalite a bloke ki nan lis kòm konsiltatif. Epi isit la li di "konsiltatif" an wouj. Epi ou ka an menm tan bloke tankou sa a ak pg_advisory_unlock.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak nan konklizyon, mwen ta renmen montre w yon lòt bagay tèt-mouche. Mwen pral kreye yon lòt vi. Men, mwen pral rantre nan tab la pg_locks ak tab la pg_stat_activity. E poukisa mwen vle fè sa? Paske sa a pral pèmèt mwen gade ak wè tout sesyon aktyèl yo epi wè egzakteman ki kalite kadna yo ap tann. Lè sa a se byen enteresan lè nou mete ansanm tab la fèmen ak tab la rechèch.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ak isit la nou kreye pg_stat_view.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Epi nou mete ajou ranje a pa youn. Ak isit la nou wè 724. Lè sa a, nou mete ajou ranje nou an twa. Ak sa ou wè isit la kounye a? Sa yo se demann, sa vle di ou wè tout lis demann ki nan lis nan kolòn gòch la. Lè sa a, sou bò dwat la ou ka wè blokaj yo ak sa yo kreye. Epi li ka pi klè pou ou pou ou pa bezwen tounen nan chak sesyon chak fwa epi wè si ou bezwen rantre nan li oswa ou pa. Yo fè li pou nou.

Yon lòt karakteristik ki trè itil se pg_blocking_pids. Ou te genlè pa janm tande pale de li. Ki sa li ap fè? Li pèmèt nou di ke pou sesyon sa a 11740 ki ID pwosesis espesifik li ap tann. Epi ou ka wè ke 11740 ap tann 724. Epi 724 se nan tèt la. Ak 11306 se ID pwosesis ou a. Esansyèlman, fonksyon sa a ale nan tab fèmen ou a. E mwen konnen li yon ti kras konplike, men ou rive konprann li. Esansyèlman fonksyon sa a ale nan tab fèmen sa a epi eseye jwenn kote ID pwosesis sa a bay kadna li ap tann sou yo. Epi li tou eseye konnen ki pwosesis ID pwosesis la ki ap tann pou fèmen a genyen. Se konsa, ou ka kouri fonksyon sa a pg_blocking_pids.

Lè sa a ka trè itil. Nou sèlman ajoute sa a nan vèsyon 9.6, kidonk karakteristik sa a gen sèlman 5 ane fin vye granmoun, men li trè, trè itil. E menm bagay la tou aplike pou dezyèm demann lan. Li montre egzakteman sa nou bezwen wè.

Debloke Manadjè a Lock Postgres. Bruce Momjian

Se sa m te vle pale avè w. E jan mwen te espere, nou te itilize tout tan nou paske te gen anpil glisad. Ak glisad yo disponib pou telechaje. Mwen ta renmen remèsye ou paske ou la. Mwen sèten ou pral jwi rès konferans lan, mèsi anpil!

Kesyon:

Pou egzanp, si mwen ap eseye mete ajou ranje, ak dezyèm sesyon an ap eseye efase tab la tout antye. Osi lwen ke mwen konprann, ta dwe gen yon bagay tankou yon seri entansyon. Èske gen yon bagay konsa nan Postgres?

Debloke Manadjè a Lock Postgres. Bruce Momjian

Ann tounen nan kòmansman an menm. Ou ka sonje ke lè ou fè anyen, pa egzanp lè w fè yon SELECT, nou bay yon AccessShareLock. Epi sa a anpeche tab la tonbe. Se konsa, si ou, pou egzanp, vle mete ajou yon ranje nan yon tab oswa efase yon ranje, Lè sa a, yon moun pa ka efase tab la tout antye an menm tan an paske w ap kenbe AccessShareLock sa a sou tab la tout antye ak sou ranje a. Epi yon fwa w fini, yo ka efase li. Men, pandan ke ou dirèkteman chanje yon bagay la, yo pa yo pral kapab fè li.

Ann fè l ankò. Ann ale nan egzanp efase a. Epi ou wè ki jan gen yon seri eksklizif sou ranje ki anlè tab la tout antye.

Sa a pral sanble ak fèmen eksklizif, dwa?

Wi, li sanble li. Mwen konprann de sa w ap pale a. Ou ap di ke si mwen fè yon SELECT Lè sa a, mwen gen yon ShareExclusive ak Lè sa a, mwen fè li Row Exclusive, èske sa vin yon pwoblèm? Men, etonan sa a pa poze yon pwoblèm. Sa a sanble ogmante degre nan fèmen, men esansyèlman mwen gen yon seri ki anpeche sipresyon. Epi, koulye a, lè mwen fè kadna sa a pi pwisan, li toujou anpeche sipresyon. Donk se pa tankou m ap monte. Sa vle di, li anpeche li rive lè li te nan yon nivo pi ba tou, kidonk lè mwen ogmante nivo li toujou anpeche tab la efase.

Mwen konprann de sa w ap pale a. Pa gen okenn ka eskalasyon fèmen, kote w ap eseye bay moute yon seri a prezante yon sèl ki pi fò. Isit la li jis ogmante prevansyon sa a atravè tablo a, kidonk li pa lakòz okenn konfli. Men se yon bon kesyon. Mèsi anpil paske w mande sa!

Kisa nou bezwen fè pou nou evite yon sitiyasyon enpas lè nou gen anpil sesyon, yon gwo kantite itilizatè?

Postgres otomatikman remake sitiyasyon enpas. Epi li pral otomatikman efase youn nan sesyon yo. Sèl fason pou evite bloke mouri se bloke moun nan menm lòd la. Se konsa, lè ou gade nan aplikasyon w lan, souvan rezon ki fè yo enpas... Ann imajine ke mwen vle bloke de bagay diferan. Yon aplikasyon fèmen tab 1, ak yon lòt aplikasyon fèmen 2, ak Lè sa a, tab 1. Ak fason ki pi fasil pou fè pou evite enpas se gade aplikasyon w lan epi eseye asire w ke bloke a fèt nan menm lòd nan tout aplikasyon yo. Lè sa a anjeneral elimine 80% nan pwoblèm yo, paske tout kalite moun ekri aplikasyon sa yo. Men, si ou bloke yo nan menm lòd la, Lè sa a, ou pa rankontre yon sitiyasyon enpas.

Mèsi anpil pou pèfòmans ou! Ou te pale de vakyòm plen epi, si mwen byen konprann, vakyòm plen defòme lòd dosye yo nan depo separe, kidonk yo kenbe dosye aktyèl yo san okenn chanjman. Poukisa vakyòm plen pran aksè eksklizif fèmen ak poukisa li konfli ak operasyon ekri?

Sa se yon bon kesyon. Rezon ki fè la se ke vakyòm plen pran tab la. Epi nou esansyèlman kreye yon nouvo vèsyon tab la. Ak tab la pral nouvo. Li sanble ke sa a pral yon vèsyon konplètman nouvo nan tab la. Ak pwoblèm nan se ke lè nou fè sa, nou pa vle moun yo li li paske nou bezwen yo wè nouvo tablo a. Se konsa, sa a konekte ak kesyon anvan an. Si nou te kapab li an menm tan, nou pa ta ka deplase li epi dirije moun nan yon nouvo tab. Nou ta bezwen rete tann pou tout moun fini lekti tablo sa a, epi kidonk li se esansyèlman yon sitiyasyon eksklizif fèmen.
Nou jis di ke nou fèmen depi nan kòmansman paske nou konnen ke nan fen a anpil nou pral bezwen yon seri eksklizif yo nan lòd yo deplase tout moun nan nouvo kopi a. Se konsa, nou ka potansyèlman rezoud sa a. Epi nou fè li fason sa a ak endèks similtane. Men, sa a se pi plis difisil fè. Ak sa a anpil gen rapò ak kesyon anvan ou sou fèmen eksklizif.

Èske li posib pou ajoute tan fèmen nan Postgres? Nan Oracle, mwen ka, pou egzanp, ekri "chwazi pou mete ajou" epi tann 50 segonn anvan mete ajou. Li te bon pou aplikasyon an. Men, nan Postgres, mwen swa bezwen fè li touswit epi mwen pa tann ditou, oswa tann jiskaske kèk tan.

Wi, ou ka chwazi yon delè sou kadna ou yo, sou kadna ou yo. Ou kapab tou bay yon kòmand pa gen okenn fason, ki pral ... si ou pa ka imedyatman jwenn seri a. Se poutèt sa, swa yon tan fèmen oswa yon lòt bagay ki pral pèmèt ou fè sa. Sa pa fèt nan nivo sentaktik. Sa a se fè kòm yon varyab sou sèvè a. Pafwa sa a pa ka itilize.

Èske ou ka louvri glisad 75?

Wi.

Debloke Manadjè a Lock Postgres. Bruce Momjian

E mon kestyon i swivan. Poukisa tou de pwosesis aktyalizasyon yo ap tann 703?

Ak sa a se yon gwo kesyon. Mwen pa konprann poukisa Postgres fè sa. Men, lè 703 te kreye, li te espere 702. E lè 704 ak 705 parèt, sanble yo pa konnen sa yo ap tann paske pa gen anyen ankò. Apre sa, Postgres fè li nan fason sa a: lè ou pa ka jwenn yon seri, li ekri "Ki sa ki pwen nan pwosesis ou?", paske ou deja ap tann pou yon moun. Se konsa, nou pral jis kite li pann nan lè a, li pa pral mete ajou li ditou. Men, sa ki te pase isit la? Le pli vit ke 702 te konplete pwosesis la ak 703 te resevwa fèmen li yo, sistèm nan tounen tounen. Apre sa, li te di ke kounye a nou gen de moun ki ap tann. Apre sa, ann mete ajou yo ansanm. Epi ann endike ke tou de ap tann.

Mwen pa konnen poukisa Postgres fè sa. Men, gen yon pwoblèm ki rele f.... Li sanble ke sa a se pa yon tèm nan Ris. Se lè sa a tout moun ap tann yon sèl chato, menm si gen 20 otorite ki ap tann chato a. Epi toudenkou yo tout reveye an menm tan. Epi tout moun kòmanse eseye reyaji. Men, sistèm nan fè li pou tout moun ap tann pou 703. Paske yo tout ap tann, epi nou pral imedyatman liy yo tout. Men, si nenpòt lòt demann nouvo parèt ki te pwodwi apre sa a, pou egzanp, 707, Lè sa a, pral gen vid ankò.

E i paret mon’n fer sa pour nou kapab dir ki a sa staz 702 in tann 703, e tou sa ki vin apre sa pa pou ganny okenn antre dan sa domenn. Men, le pli vit ke premye gason an ale, tout moun ki t ap tann nan moman sa a anvan aktyalizasyon a resevwa menm siy la. E alor mon krwar sa i ganny fer pour nou kapab process in order pou zot byen komans.

Mwen toujou gade sa a kòm yon fenomèn olye etranj. Paske isit la, pou egzanp, nou pa lis yo ditou. Men, mwen sanble ke chak fwa nou bay yon nouvo kadna, nou gade nan tout moun ki nan pwosesis pou tann. Lè sa a, nou liy yo tout moute. Lè sa a, nenpòt nouvo ki vini nan sèlman vin nan keu la lè pwochen moun nan te fini ke yo te trete. Trè bon kesyon. Mèsi anpil pou kesyon ou a!

Li sanble pou mwen ke li pi lojik lè 705 espere 704.

Men, pwoblèm nan isit la se sa ki annapre yo. Teknikman, ou ka reveye youn oswa lòt. Se konsa, nou pral reveye youn oswa lòt. Men, sa k ap pase nan sistèm nan? Ou ka wè ki jan 703 nan tèt la te bloke pwòp ID tranzaksyon li. Men ki jan Postgres travay. Ak 703 se bloke pa pwòp ID tranzaksyon li yo, kidonk si yon moun vle rete tann, Lè sa a, yo pral tann pou 703. Epi, nan sans, 703 konplete. Epi sèlman apre yo fin fini youn nan pwosesis yo reveye. Epi nou pa konnen ki sa egzakteman pwosesis sa a pral ye. Lè sa a, nou trete tout bagay piti piti. Men, li pa klè ki pwosesis ki reveye an premye, paske li ta ka nenpòt nan pwosesis sa yo. Esansyèlman, nou te gen yon pwogramè ki te di nou kapab kounye a reveye nenpòt nan pwosesis sa yo. Nou jis chwazi youn nan o aza. Se konsa, tou de nan yo bezwen yo dwe te note paske nou ka reveye youn nan yo.

Ak pwoblèm nan se ke nou gen CP-enfini. Se poutèt sa, li se byen posib ke nou ka reveye youn nan pita. Men, si, pou egzanp, nou reveye youn nan pita, nou pral tann pou moun ki fèk resevwa blòk la, kidonk nou pa detèmine ki moun egzakteman ki pral reveye an premye. Nou tou senpleman kreye yon sitiyasyon konsa, epi sistèm nan ap reveye yo nan yon lòd o aza.

Gen atik sou kadna pa Egor Rogov. Gade, yo tou enteresan ak itil. Sijè a, nan kou, se fò anpil konplèks. Mèsi anpil, Bruce!

Sous: www.habr.com

Add nouvo kòmantè