Pag-abli sa Postgres Lock Manager. Bruce Momjian

Transcript sa 2020 nga pakigpulong ni Bruce Momjian nga "Pag-abli sa Postgres Lock Manager".

Pag-abli sa Postgres Lock Manager. Bruce Momjian

(Pahinumdom: Tanang SQL query gikan sa mga slide mahimong makuha gikan niini nga link: http://momjian.us/main/writings/pgsql/locking.sql)

Hello! Nindot nga ania na usab sa Russia. Pasayloa ko nga dili ko makaadto sa miaging tuig, apan karong tuiga si Ivan ug ako adunay dagkong mga plano. Nanghinaut ko nga makaanhi kanunay dinhi. Ganahan kong moadto sa Russia. Mobisita ko sa Tyumen, Tver. Nalipay kaayo ko nga makabisita ko niining mga siyudad.

Ako nga pala si Bruce Momjian. Nagtrabaho ko sa EnterpriseDB ug nagtrabaho sa Postgres sa sobra sa 23 ka tuig. Nagpuyo ko sa Philadelphia, USA. Nagbiyahe ako mga 90 ka adlaw sa usa ka tuig. Ug motambong ko ug mga 40 ka komperensya. Akong Web site, nga naglangkob sa mga slide nga akong ipakita kanimo. Busa, pagkahuman sa komperensya mahimo nimo kini i-download gikan sa akong personal nga website. Kini usab adunay mga 30 ka presentasyon. Adunay usab mga video ug daghang mga entry sa blog, labaw pa sa 500. Kini usa ka medyo informative nga kapanguhaan. Ug kung interesado ka sa kini nga materyal, gidapit ko ikaw sa paggamit niini.

Usa ako ka magtutudlo, usa ka propesor sa wala pa ako nagsugod sa pagtrabaho sa Postgres. Ug nalipay kaayo ako nga mahimo na nako isulti kanimo kung unsa ang akong isulti kanimo. Kini usa sa akong labing makapaikag nga mga presentasyon. Ug kini nga presentasyon adunay 110 ka mga slide. Magsugod kami sa pagsulti sa yano nga mga butang, ug sa katapusan ang taho mahimong labi ka komplikado, ug mahimong labi ka komplikado.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kini usa ka medyo dili maayo nga panag-istoryahanay. Ang pag-block dili ang pinakapopular nga hilisgutan. Gusto namo nga mawala kini sa usa ka dapit. Morag moadto sa dentista.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

  1. Ang pag-lock usa ka problema alang sa daghang mga tawo nga nagtrabaho sa mga database ug adunay daghang mga proseso nga nagdagan sa parehas nga oras. Kinahanglan nila ang pag-block. Sa ato pa, karong adlawa hatagan ko ikaw sa batakang kahibalo sa pag-block.
  2. Mga ID sa Transaksyon. Kini usa ka makalaay nga bahin sa presentasyon, apan kini kinahanglan nga masabtan.
  3. Sunod kita maghisgot mahitungod sa mga matang sa blocking. Kini usa ka medyo mekanikal nga bahin.
  4. Ug sa ubos maghatag kami pipila ka mga pananglitan sa pag-block. Ug kini mahimong lisud sabton.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Maghisgot ta bahin sa pag-block.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ang among terminolohiya medyo komplikado. Pila kaninyo ang nakahibalo kon diin gikan kini nga tudling? Duha ka tao. Kini gikan sa dula nga gitawag ug Colossal Cave Adventure. Kini usa ka dula sa kompyuter nga nakabase sa teksto sa dekada 80, sa akong hunahuna. Didto kinahanglan ka nga moadto sa usa ka langub, ngadto sa usa ka labirint, ug ang teksto nausab, apan ang sulod halos parehas sa matag higayon. Mao to nakahinumdom ko ani nga duwa.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug dinhi atong makita ang ngalan sa mga kandado nga miabut kanato gikan sa Oracle. Gigamit namo sila.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Dinhi atong makita ang mga termino nga nakapalibog kanako. Pananglitan, SHARE UPDATE ECXLUSIVE. Sunod I-SHARE RAW ECXLUSIVE. Sa tinuud, kini nga mga ngalan dili kaayo klaro. Atong sulayan nga tagdon kini sa mas detalyado. Ang uban adunay pulong nga "bahin", nga nagpasabut sa pagbulag. Ang uban adunay pulong nga "eksklusibo". Ang uban naglangkob niining duha ka pulong. Gusto nako magsugod kung giunsa kini nga mga kandado molihok.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug ang pulong nga "access" importante usab kaayo. Ug ang mga pulong nga "laray" usa ka hilo. Sa ato pa, access distribution, row distribution.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Laing isyu nga kinahanglan sabton sa Postgres, nga sa walay palad dili nako matabonan sa akong pakigpulong, mao ang MVCC. Naa koy lahi nga presentasyon bahin niini nga hilisgutan sa akong website. Ug kung sa imong hunahuna lisud kini nga presentasyon, ang MVCC tingali ang akong labing lisud. Ug kung interesado ka, mahimo nimo kini tan-awon sa website. Mahimo nimong tan-awon ang video.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ang laing butang nga kinahanglan natong masabtan mao ang mga transaction ID. Daghang mga transaksyon ang dili molihok kung wala’y talagsaon nga mga identifier. Ug dinhi kita adunay katin-awan kung unsa ang usa ka transaksyon. Ang mga postgres adunay duha ka sistema sa pag-numero sa transaksyon. Nahibal-an ko nga kini dili kaayo nindot nga solusyon.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Hinumdomi usab nga ang mga slide mahimong lisud sabton, busa kung unsa ang gipasiugda sa pula mao ang kinahanglan nimo nga hatagan pagtagad.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

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

Tan-awon nato. Ang numero sa transaksyon gi-highlight sa pula. Ang SELECT pg_back function gipakita dinhi. Gibalik niini ang akong transaksyon ug ang transaction ID.

Usa pa ka butang, kung gusto nimo kini nga presentasyon ug gusto nimo nga ipadagan kini sa imong database, nan mahimo ka nga moadto sa kini nga link nga pink ug i-download ang SQL alang niini nga presentasyon. Ug mahimo ra nimo kini ipadagan sa imong PSQL ug ang tibuuk nga presentasyon naa sa imong screen dayon. Dili kini adunay sulod nga mga bulak, apan labing menos makita nato kini.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Niini nga kaso atong makita ang transaction ID. Mao ni ang number nga among gi assign niya. Ug adunay laing matang sa transaction ID sa Postgres, nga gitawag og virtual transaction ID

Ug kinahanglan natong masabtan kini. Kini hinungdanon kaayo, kung dili, dili naton masabtan ang pag-lock sa Postgres.

Ang usa ka virtual nga transaksyon ID usa ka transaksyon ID nga wala maglangkob kanunay nga mga kantidad. Pananglitan, kung magpadagan ko og SELECT command, nan lagmit dili nako usbon ang database, dili nako i-lock ang bisan unsa. Mao nga kung nagpadagan kami usa ka yano nga PILI, dili namon hatagan ang kana nga transaksyon usa ka padayon nga ID. Gihatagan lang namo siya og virtual ID didto.

Ug kini nagpauswag sa performance sa Postgres, nagpalambo sa mga kapabilidad sa paglimpyo, mao nga ang virtual transaction ID naglangkob sa duha ka numero. Ang unang numero sa wala pa ang slash mao ang backend ID. Ug sa tuo makita namo ang usa ka counter.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Busa, kung magpadagan ako usa ka hangyo, kini nag-ingon nga ang backend ID mao ang 2.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug kung nagdagan ako usa ka serye sa ingon nga mga transaksyon, nan atong makita nga ang counter nagdugang sa matag higayon nga magpadagan ako usa ka pangutana. Pananglitan, kung gipadagan nako ang pangutana 2/10, 2/11, 2/12, ug uban pa.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Hinumdomi nga adunay duha ka kolum dinhi. Sa wala makita namon ang virtual transaction ID - 2/12. Ug sa tuo naa miy permanenteng transaction ID. Ug kini nga uma walay sulod. Ug kini nga transaksyon wala mag-usab sa database. Mao nga dili nako kini hatagan ug permanenteng transaction ID.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Sa diha nga akong gipadagan ang analyze command ((ANALYZE)), ang samang pangutana naghatag kanako ug permanenteng transaction ID. Tan-awa kon sa unsang paagi kini nausab alang kanato. Wala pa nako kini nga ID kaniadto, apan karon naa nako kini.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Mao ni ang laing hangyo, laing transaksyon. Ang numero sa virtual nga transaksyon mao ang 2/13. Ug kung mangayo ko og padayon nga transaction ID, unya kung modagan ko sa pangutana, makuha nako.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Busa, usa pa ka higayon. Kami adunay usa ka virtual nga transaksyon ID ug usa ka padayon nga transaksyon ID. Sabta lang kini nga punto aron masabtan ang pamatasan sa Postgres.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Mopadayon kami sa ikatulo nga seksyon. Dinhi maglakaw lang kami sa lainlaing mga lahi sa mga kandado sa Postgres. Dili kaayo makapaikag. Ang kataposang seksyon mahimong mas makaiikag. Apan kinahanglan natong tagdon ang mga batakang butang, tungod kay kung dili, dili naton masabtan kung unsa ang sunod nga mahitabo.

Atong adtoan kini nga seksyon, atong tan-awon ang matag matang sa kandado. Ug ipakita ko kanimo ang mga panig-ingnan kung giunsa kini gi-install, kung giunsa nila pagtrabaho, ipakita ko kanimo ang pipila ka mga pangutana nga magamit nimo aron makita kung giunsa ang pag-lock sa mga Postgres.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Aron makamugna og pangutana ug tan-awon kung unsa ang nahitabo sa Postgres, kinahanglan namong i-issue ang pangutana sa view sa sistema. Niini nga kaso, ang pg_lock gipasiugda sa pula. Ang Pg_lock usa ka lamesa sa sistema nga nagsulti kanamo kung unsang mga kandado ang gigamit karon sa Postgres.

Bisan pa, lisud kaayo alang kanako nga ipakita kanimo ang pg_lock sa iyang kaugalingon tungod kay kini komplikado. Mao nga naghimo ako usa ka pagtan-aw nga nagpakita sa pg_locks. Ug kini usab adunay pipila ka trabaho alang kanako nga nagtugot kanako nga mas makasabut. Sa ato pa, wala'y labot ang akong mga kandado, akong kaugalingon nga sesyon, ug uban pa. Standard lang kini nga SQL ug gitugotan ka nga mas maayo nga ipakita kanimo kung unsa ang nahitabo.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ang laing problema mao nga kini nga panglantaw kay lapad kaayo, mao nga kinahanglan kong maghimo ug ikaduha - lockview2.

Pag-abli sa Postgres Lock Manager. Bruce Momjian Ug kini nagpakita kanako sa dugang nga mga kolum gikan sa lamesa. Ug usa pa nga nagpakita kanako sa nahabilin nga mga kolum. Kini komplikado kaayo, mao nga gisulayan nako nga ipresentar kini nga yano kutob sa mahimo.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Mao nga naghimo kami usa ka lamesa nga gitawag Lockdemo. Ug naghimo kami usa ka linya didto. Kini ang among sample nga lamesa. Ug maghimo kami ug mga seksyon aron lang ipakita kanimo ang mga pananglitan sa mga kandado.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Busa, usa ka laray, usa ka kolum. Ang unang matang sa kandado gitawag ug ACCESS SHARE. Kini ang pinakagamay nga pagpugong sa pagpugong. Kini nagpasabot nga kini halos dili magkasumpaki sa ubang mga kandado.

Ug kung gusto namon nga tin-aw nga ipasabut ang usa ka lock, gipadagan namon ang "lock table" nga mando. Ug kini klaro nga mag-block, i.e. sa ACCESS SHARE mode gilusad namon ang lock table. Ug kung gipadagan nako ang PSQL sa background, unya sugdan nako ang ikaduhang sesyon gikan sa akong una nga sesyon niining paagiha. Sa ato pa, unsay akong buhaton dinhi? Moadto ko sa laing sesyon ug isulti kini nga "ipakita kanako ang lockview alang niini nga hangyo." Ug ania ako adunay AccessShareLock sa kini nga lamesa. Mao gyud ni akong gipangayo. Ug siya miingon nga ang block na-assign na. Simple kaayo.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Dugang pa, kung atong tan-awon ang ikaduha nga kolum, nan wala didto. Wala silay sulod.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug kung gipadagan nako ang "PILI" nga mando, nan kini ang implicit (klaro) nga paagi sa paghangyo sa AccessShareLock. Mao nga gibuhian nako ang akong lamesa ug gipadagan ang pangutana ug ang pangutana nagbalik daghang mga laray. Ug sa usa sa mga linya atong makita ang AccessShareLock. Busa, SELECT nagtawag sa AccessShareLock sa lamesa. Ug dili kini supak sa halos bisan unsang butang tungod kay kini usa ka ubos nga lebel nga kandado.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Unsa kaha kung nagpadagan ako usa ka PILI ug adunay tulo nga lainlaing mga lamesa? Kaniadto usa ra ka lamesa ang akong gipadagan, karon nagdagan ako tulo: pg_class, pg_namespace ug pg_attribute.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug karon kung tan-awon nako ang pangutana, nakita nako ang 9 AccessShareLocks sa tulo ka mga lamesa. Ngano man? Tulo ka mga lamesa ang gipasiugda sa asul: pg_attribute, pg_class, pg_namespace. Apan makita usab nimo nga ang tanan nga mga indeks nga gihubit pinaagi sa kini nga mga lamesa adunay usab AccessShareLock.

Ug kini usa ka kandado nga halos dili magkasumpaki sa uban. Ug ang tanan nga gibuhat niini mao lamang ang pagpugong kanamo sa pag-reset sa lamesa samtang among gipili kini. Makataronganon kini. Kana mao, kon kita mopili sa usa ka lamesa, kini mawala nianang higayona, unya kini sayop, mao nga Ang AccessShare usa ka ubos nga lebel nga kandado nga nagsulti kanamo nga "ayaw ihulog kini nga lamesa samtang nagtrabaho ako". Sa tinuud, mao ra kana ang iyang gibuhat.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

ROW SHARE - Kini nga kandado medyo lahi.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Atong tagdon ang usa ka pananglitan. PILI ANG ROW SHARE nga paagi sa pag-lock sa matag laray nga tagsa-tagsa. Niining paagiha walay makapapas niini o makausab niini samtang kita nagtan-aw kanila.

Pag-abli sa Postgres Lock Manager. Bruce MomjianBusa unsa ang gibuhat sa SHARE LOCK? Atong makita nga ang transaction ID kay 681 para sa PILI. Ug kini makapaikag. Unsay nahitabo dinhi? Ang unang higayon nga atong makita ang numero anaa sa β€œLock” field. Gikuha namo ang transaction ID ug giingon nga gibabagan kini sa exclusive mode. Ang tanan nga kini mao ang giingon nga ako adunay usa ka laray nga teknikal nga gi-lock sa usa ka lugar sa lamesa. Apan wala niya isulti kung asa gyud. Atong tan-awon kini sa mas detalyado sa ulahi.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Dinhi among giingon nga ang kandado among gigamit.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Busa, ang usa ka eksklusibo nga kandado tin-aw nga nag-ingon nga kini eksklusibo. Ug usab kung imong tangtangon ang usa ka laray sa kini nga lamesa, nan kini ang mahitabo, ingon sa imong makita.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ang SHARE EXCLUSIVE kay mas taas nga lock.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kini ang (ANALYZE) analyzer nga sugo nga gamiton.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

SHARE LOCK - mahimo nimo nga klaro nga i-lock sa share mode.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Mahimo ka usab maghimo usa ka talagsaon nga indeks. Ug didto makita nimo ang SHARE LOCK, nga bahin nila. Ug gi-lock niini ang lamesa ug gibutangan kini og SHARE LOCK.

Sa kasagaran, ang SHARE LOCK sa usa ka lamesa nagpasabot nga ang ubang mga tawo makabasa sa lamesa, apan walay usa nga makausab niini. Ug mao gyud kini ang mahitabo kung maghimo ka usa ka talagsaon nga indeks.

Kung maghimo ako usa ka talagsaon nga dungan nga indeks, nan ako adunay lahi nga klase sa pag-lock tungod kay, sama sa imong nahinumduman, ang paggamit sa dungan nga mga indeks makapakunhod sa kinahanglanon sa pag-lock. Ug kung mogamit ako usa ka normal nga kandado, usa ka normal nga indeks, nan mapugngan nako ang pagsulat sa indeks sa lamesa samtang kini gimugna. Kung mogamit ako usa ka dungan nga indeks, nan kinahanglan nako nga mogamit usa ka lahi nga klase sa pag-lock.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

SHARE ROW EXCLUSIVE - pag-usab kini mahimong itakda sa dayag (klaro).

Pag-abli sa Postgres Lock Manager. Bruce Momjian

O makahimo kita og usa ka lagda, i.e., pagkuha sa usa ka piho nga kaso diin kini gamiton.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

EKSKLUSIBONG pag-lock nagpasabot nga walay laing makausab sa lamesa.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Dinhi atong makita ang lain-laing mga matang sa mga kandado.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ang ACCESS EXCLUSIVE, pananglitan, usa ka blocking command. Pananglitan, kung buhaton nimo CLUSTER table, nan kini nagpasabot nga walay usa nga makahimo sa pagsulat didto. Ug kini nag-lock dili lamang sa lamesa mismo, kondili usab sa mga indeks.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kini ang ikaduhang panid sa ACCESS EXCLUSIVE blocking, diin atong makita kung unsa ang gibabagan niini sa lamesa. Gi-lock niini ang tagsa-tagsa nga mga laray sa lamesa, nga makapainteres kaayo.

Kana ang tanan nga sukaranan nga kasayuran nga gusto nakong ihatag. Naghisgot kami bahin sa mga kandado, bahin sa mga ID sa transaksyon, naghisgot kami bahin sa mga virtual nga transaksyon ID, bahin sa mga permanenteng ID sa transaksyon.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug karon atong susihon ang pipila ka mga pananglitan sa pag-block. Kini ang labing makaiikag nga bahin. Atong tan-awon ang makapaikag kaayo nga mga kaso. Ug ang akong katuyoan sa kini nga presentasyon mao ang paghatag kanimo usa ka labi ka maayo nga pagsabut kung unsa ang tinuud nga gibuhat sa Postgres kung gisulayan niini nga babagan ang pipila ka mga butang. Sa akong hunahuna siya maayo kaayo sa pag-block sa mga bahin.

Atong tan-awon ang pipila ka espesipikong mga pananglitan.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Magsugod kita sa mga lamesa ug usa ka laray sa usa ka lamesa. Sa diha nga ako magsal-ot sa usa ka butang nga ako adunay ExclusiveLock, Transaction ID ug ExclusiveLock nga gipakita sa lamesa.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Unsa ang mahitabo kon ako mosal-ot og duha pa ka laray? Ug karon ang among lamesa adunay tulo ka laray. Ug gisal-ot nako ang usa ka laray ug nakuha kini ingon usa ka output. Ug kung magbutang ako og duha pa ka laray, unsa ang katingad-an niana? Adunay usa ka katingad-an nga butang dinhi tungod kay gidugangan nako ang tulo nga mga laray sa kini nga lamesa, apan naa pa akoy duha nga mga laray sa lamesa sa kandado. Ug kini ang sukaranan nga pamatasan sa mga Postgres.

Daghang mga tawo ang naghunahuna nga kung sa usa ka database maka-lock ka sa 100 ka laray, nan kinahanglan nimo nga maghimo og 100 ka mga entry sa lock. Kung gibabagan nako ang 1 ka laray sa usa ka higayon, nan kinahanglan nako ang 000 nga ingon nga mga pangutana. Ug kung kinahanglan nako ang usa ka milyon o usa ka bilyon aron mapugngan. Apan kung buhaton nato kini, dili kini maayo. Kung nakagamit ka usa ka sistema nga nagmugna og mga blocking entries alang sa matag indibidwal nga laray, nan imong makita nga kini komplikado. Tungod kay kinahanglan nimo nga mahibal-an dayon ang usa ka lamesa sa kandado nga mahimo’g mag-awas, apan dili kana buhaton sa Postgres.

Ug kung unsa gyud ang hinungdanon bahin sa kini nga slide mao nga kini klaro nga nagpakita nga adunay lain nga sistema nga nagdagan sa sulod sa MVCC nga nag-lock sa mga indibidwal nga linya. Mao nga kung imong gi-lock ang bilyon-bilyon nga mga linya, ang Postgres wala maghimo usa ka bilyon nga separado nga mga mando sa pag-lock. Ug kini adunay maayo kaayo nga epekto sa pagka-produktibo.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Unsa ang mahitungod sa usa ka update? Gi-update nako ang laray karon, ug imong makita nga nakahimo kini og duha ka lainlaing mga operasyon sa usa ka higayon. Gi-lock niini ang lamesa sa samang higayon, apan gi-lock usab ang indeks. Ug kinahanglan niya nga i-lock ang indeks tungod kay adunay talagsaon nga mga pagpugong sa kini nga lamesa. Ug gusto namon nga masiguro nga wala’y nagbag-o niini, mao nga gibabagan namon kini.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Unsa ang mahitabo kung gusto nako nga i-update ang duha ka laray? Ug atong makita nga siya naggawi sa samang paagi. Gibuhat namo ang doble sa daghang mga pag-update, apan parehas nga gidaghanon sa mga linya sa lock.

Kung nahibulong ka kung giunsa kini gibuhat sa Postgres, kinahanglan nimo nga maminaw sa akong mga pakigpulong sa MVCC aron mahibal-an kung giunsa pagmarka sa mga Postgres kini nga mga linya nga gibag-o niini. Ug ang Postgres adunay usa ka paagi diin kini mahimo, apan dili kini buhaton sa lebel sa pag-lock sa lamesa, kini gihimo sa usa ka mas ubos ug mas episyente nga lebel.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Unsa kaha kung gusto nako nga tangtangon ang usa ka butang? Kung akong tangtangon, pananglitan, usa ka laray ug naa pa nako ang akong duha ka blocking input, ug bisan kung gusto nako nga mapapas silang tanan, naa ra gihapon sila.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug, pananglitan, gusto nako nga magsal-ot og 1 ka linya, ug unya tangtangon o idugang ang 000 ka linya, unya kadtong mga indibidwal nga linya nga akong gidugang o giusab, wala kini natala dinhi. Gisulat kini sa ubos nga lebel sulod sa serye mismo. Ug atol sa pakigpulong sa MVCC ako naghisgot niini sa detalye. Apan hinungdanon kaayo kung mag-analisar ka sa mga kandado aron masiguro nga nag-lock ka sa lebel sa lamesa ug nga wala nimo makita kung giunsa ang pagrekord sa mga indibidwal nga linya dinhi.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Unsa man ang bahin sa klaro nga pag-block?

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kung gi-klik nako ang pag-refresh, naa koy duha ka laray nga naka-lock. Ug kung pilion nako silang tanan ug i-klik ang "pag-update bisan asa," nan aduna pa koy duha ka blocking records.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Wala mi magbuhat ug bulag nga mga rekord para sa matag indibidwal nga laray. Tungod kay ang pagka-produktibo mikunhod, mahimong sobra ra kaayo niini. Ug tingali makaplagan nato ang atong kaugalingon sa dili maayong kahimtang.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug ang parehas nga butang, kung gipaambit naton, mahimo naton kini tanan 30 ka beses.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Among ibalik ang among lamesa, tangtangon ang tanan, unya isulod pag-usab ang usa ka laray.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ang laing kinaiya nga imong makita sa Postgres nga ilado kaayo ug gusto nga kinaiya mao nga makahimo ka og update o pagpili. Ug mahimo nimo kini sa samang higayon. Ug ang pagpili dili makababag sa pag-update ug sa parehas nga butang sa atbang nga direksyon. Gisultihan namo ang magbabasa nga dili babagan ang magsusulat, ug ang magsusulat wala magbabag sa magbabasa.

Ipakita ko kanimo ang usa ka pananglitan niini. Magpili ko karon. Atong buhaton ang INSERT. Ug unya imong makita - 694. Imong makita ang ID sa transaksyon nga naghimo niini nga pagsal-ot. Ug mao kana kung giunsa kini molihok.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug kung tan-awon nako ang akong backend ID karon, kini karon 695.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug nakita nako ang 695 nga nagpakita sa akong lamesa.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug kung mag-update ako dinhi nga ingon niini, unya lahi ang akong makuha nga kaso. Sa kini nga kaso, ang 695 usa ka eksklusibo nga kandado, ug ang pag-update adunay parehas nga pamatasan, apan wala’y panagbangi sa taliwala nila, nga dili kasagaran.

Ug imong makita nga sa taas kay ShareLock, ug sa ubos kay ExclusiveLock. Ug ang duha ka mga transaksyon nagtrabaho.

Ug kinahanglan nimong paminawon ang akong pakigpulong sa MVCC aron masabtan kung giunsa kini mahitabo. Apan kini usa ka ilustrasyon nga mahimo nimo kini sa parehas nga oras, i.e. pagbuhat usa ka PILI ug usa ka UPDATE sa parehas nga oras.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Atong i-reset ug buhaton ang usa pa ka operasyon.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kung mosulay ka sa pagpadagan sa duha ka mga update nga dungan sa parehas nga laray, kini ma-block. Ug hinumdomi, ako miingon nga ang magbabasa dili mobabag sa magsusulat, ug ang magsusulat dili mobabag sa magbabasa, apan ang usa ka magsusulat mobabag sa laing magsusulat. Sa ato pa, dili kami adunay duha ka tawo nga mag-update sa parehas nga linya sa parehas nga oras. Kinahanglan ka maghulat hangtod mahuman ang usa niini.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug aron mahulagway kini, akong tan-awon ang lamesa sa Lockdemo. Ug atong tan-awon ang usa ka laray. Matag transaksyon 698.

Gi-update namo kini sa 2. 699 mao ang unang update. Ug kini nagmalampuson o kini anaa sa usa ka pending nga transaksyon ug naghulat alang kanato sa pagkumpirma o pagkansela.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Apan tan-awa ang laing butang - 2/51 mao ang atong unang transaksyon, ang atong unang sesyon. Ang 3/112 mao ang ikaduha nga hangyo nga gikan sa taas nga nagbag-o sa kana nga kantidad sa 3. Ug kung imong namatikdan, ang ibabaw nga usa nag-lock sa kaugalingon, nga mao ang 699. Apan ang 3/112 wala maghatag sa kandado. Ang Lock_mode nga kolum nag-ingon kung unsa ang gihulat niini. Gipaabot niini ang 699. Ug kung imong tan-awon kung asa ang 699, mas taas kini. Ug unsa ang gibuhat sa unang sesyon? Naghimo siya og eksklusibong kandado sa iyang kaugalingong transaction ID. Ingon niini ang gibuhat sa Postgres. Gibabagan niini ang kaugalingon nga ID sa transaksyon. Ug kung gusto nimo maghulat nga adunay mokumpirma o mokansela, kinahanglan ka maghulat samtang adunay pending nga transaksyon. Ug mao kana ang hinungdan nga nakakita kami usa ka lahi nga linya.

Atong tan-awon pag-usab. Sa wala makita namo ang among processing ID. Sa ikaduhang kolum atong makita ang atong virtual transaction ID, ug sa ikatulo atong makita ang lock_type. Unsay buot ipasabot niini? Sa panguna kung unsa ang giingon niini mao nga gibabagan niini ang ID sa transaksyon. Apan matikdi nga ang tanan nga mga laray sa ubos nag-ingon nga relasyon. Ug mao nga ikaw adunay duha ka matang sa mga kandado sa lamesa. Adunay usa ka kandado sa relasyon. Ug unya naa ang transactionid blocking, diin imong gi-block sa imong kaugalingon, nga mao gyud ang mahitabo sa una nga laray o sa labing ubos, kung diin ang transactionid, diin maghulat kami sa 699 aron mahuman ang operasyon niini.

Tan-awon ko kung unsay mahitabo dinhi. Ug dinhi duha ka butang ang dungan nga mahitabo. Nagtan-aw ka sa usa ka transaction ID lock sa unang laray nga nag-lock sa kaugalingon. Ug gibabagan niya ang iyang kaugalingon aron maghulat ang mga tawo.

Kung tan-awon nimo ang ika-6 nga linya, parehas kini nga entry sa una. Ug busa ang transaksyon 699 gibabagan. Ang 700 kay self-locking usab. Ug unya sa ubos nga laray imong makita nga naghulat kami sa 699 aron mahuman ang operasyon niini.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug sa lock_type, tuple makita nimo ang mga numero.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Makita nimo kini nga 0/10. Ug kini ang numero sa panid, ug usab ang offset niining partikular nga laray.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug nakita nimo nga kini mahimong 0/11 kung mag-update kami.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Apan sa tinuud kini 0/10, tungod kay adunay paghulat alang niini nga operasyon. Kita adunay higayon nga makita nga kini ang serye nga akong gihulat aron makumpirma.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kung nakumpirma na namon kini ug gipugos ang commit, ug kung nahuman na ang pag-update, kini ang makuha namon pag-usab. Ang Transaction 700 ra ang kandado, wala kini maghulat sa uban tungod kay kini nahimo. Naghulat lang kini nga makompleto ang transaksyon. Kung mahurot na ang 699, dili na ta maghulat bisan unsa. Ug karon ang transaksyon 700 nag-ingon nga ang tanan maayo, nga kini adunay tanan nga mga kandado nga kinahanglan niini sa tanan nga gitugotan nga mga lamesa.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug aron mahimo kining tibuok nga butang nga mas komplikado, naghimo kami og laing panglantaw, nga niining panahona maghatag kanamo og hierarchy. Wala ko magdahom nga masabtan nimo kini nga hangyo. Apan kini maghatag kanato og mas klaro nga panglantaw sa unsay nahitabo.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kini usa ka recursive nga pagtan-aw nga adunay lain usab nga seksyon. Ug unya gibalik niini ang tanan. Gamiton nato ni.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Unsa kaha kung buhaton naton ang tulo nga dungan nga pag-update ug isulti nga ang laray karon tulo. Ug usbon namo ang 3 ngadto sa 4.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug dinhi atong makita ang 4. Ug transaction ID 702.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug unya akong usbon ang 4 ngadto sa 5. Ug ang 5 ngadto sa 6, ug ang 6 ngadto sa 7. Ug ako maglinya sa daghang mga tawo nga maghuwat niining usa ka transaksyon nga matapos.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug ang tanan nahimong klaro. Unsa ang unang laray? Kini ang 702. Kini ang transaction ID nga orihinal nga nagtakda niini nga kantidad. Unsay nasulat sa akong Granted column? Naa koy marka f. Mao ni akong mga updates nga (5, 6, 7) dili maaprobahan kay naghuwat ta nga mahuman ang transaction ID 702. Naa miy transaction ID blocking. Ug niresulta kini sa 5 ka transactional ID lock.

Ug kung imong tan-awon ang 704, sa 705, wala pay nahisulat didto, tungod kay wala pa sila kahibalo kung unsa ang nahitabo. Nagsulat lang sila nga wala silay ideya kung unsa ang nahitabo. Ug mangatulog na lang sila kay nagpaabot sila nga adunay mahuman ug pukawon kung adunay higayon nga mag-ilis sa mga laray.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Mao kini ang hitsura niini. Klaro nga nagpaabot silang tanan sa ika-12 nga linya.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Mao kini ang among nakita dinhi. Ania ang 0/12.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Mao nga kung maaprubahan ang una nga transaksyon, makita nimo dinhi kung giunsa ang paglihok sa hierarchy. Ug karon ang tanan nahimong klaro. Silang tanan nahimong limpyo. Ug sa tinuod naghulat pa sila.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ania kung unsa ang nahitabo. 702 mipasalig. Ug karon ang 703 nakakuha niining row lock, ug dayon ang 704 nagsugod sa paghulat sa 703 nga mopasalig. Ug ang 705 naghulat usab niini. Ug sa diha nga kining tanan mahuman, sila maghinlo sa ilang kaugalingon. Ug gusto nakong ipunting nga ang tanan naglinya. Ug kini susama kaayo sa usa ka sitwasyon sa usa ka traffic jam kung ang tanan naghulat sa unang sakyanan. Ang unang sakyanan mihunong ug ang tanan naglinya sa taas nga linya. Dayon kini molihok, dayon ang sunod nga sakyanan makamaneho sa unahan ug makuha ang block niini, ug uban pa.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug kung kini dili ingon ka komplikado kanimo, nan kami karon makigsulti kanimo bahin sa mga deadlock. Wala ko kahibalo kung kinsa kaninyo ang nakasugat nila. Kini usa ka kasagaran nga problema sa mga sistema sa database. Apan ang mga deadlock mao ang kung ang usa ka sesyon naghulat alang sa lain nga sesyon aron mahimo ang usa ka butang. Ug niining higayona laing sesyon ang naghulat alang sa unang sesyon nga buhaton ang usa ka butang.

Ug, pananglitan, kon si Ivan moingon: β€œHatagi kog usa ka butang,” ug ako moingon: β€œDili, ihatag ko lang kini kanimo kon hatagan mo kog lain.” Ug siya miingon, "Dili, dili ko kini ihatag kanimo kung dili nimo kini ihatag kanako." Ug naa mi sa deadlock nga sitwasyon. Sigurado ko nga dili kini buhaton ni Ivan, apan nasabtan nimo ang kahulugan nga adunay duha ka tawo nga gusto makakuha usa ka butang ug dili sila andam nga ihatag kini hangtod nga gihatag sa usa ka tawo ang ilang gusto. Ug walay solusyon.

Ug sa esensya, ang imong database kinahanglan nga makit-an kini. Ug unya kinahanglan nimo nga tangtangon o isira ang usa sa mga sesyon, tungod kay kung dili sila magpabilin didto hangtod sa hangtod. Ug nakita namon kini sa mga database, nakita namon kini sa mga operating system. Ug sa tanan nga mga dapit diin kita adunay parallel nga mga proseso, kini mahimong mahitabo.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug karon mag-instalar kami og duha ka deadlocks. Atong ibutang ang 50 ug 80. Sa unang laray, mag-update ko gikan sa 50 ngadto sa 50. Makuha nako ang transaction number 710.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug unya akong usbon ang 80 ngadto sa 81, ug ang 50 ngadto sa 51.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug mao kini ang hitsura niini. Ug mao nga ang 710 adunay usa ka laray nga gibabagan, ug ang 711 naghulat alang sa kumpirmasyon. Nakita namon kini sa among pag-update. Ang 710 mao ang tag-iya sa among serye. Ug ang 711 naghulat sa 710 aron makompleto ang transaksyon.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug giingon pa kung asa nga laray mahitabo ang mga deadlock. Ug dinhi nagsugod kini nga katingad-an.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Karon among gi-update ang 80 hangtod 80.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug dinhi nagsugod ang mga deadlock. Ang 710 naghulat alang sa tubag gikan sa 711, ug ang 711 naghulat sa 710. Ug kini dili maayo nga matapos. Ug walay paagi gikan niini. Ug magdahom silag tubag sa usag usa.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug magsugod na lang kini sa paglangan sa tanan. Ug dili namo gusto kana.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug ang Postgres adunay mga paagi aron mahibal-an kung kini mahitabo. Ug kung mahitabo kini, makuha nimo kini nga sayup. Ug gikan niini klaro nga ang ingon ug ingon nga proseso naghulat alang sa usa ka SHARE LOCK gikan sa lain nga proseso, i.e., nga gibabagan sa proseso sa 711. Ug kana nga proseso naghulat alang sa usa ka SHARE LOCK nga ihatag sa ingon ug ingon nga transaksyon ID ug gibabagan sa ingon ug ingon nga proseso. Busa, adunay usa ka deadlock nga sitwasyon dinhi.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Aduna bay three-way deadlocks? Posible ba kini? Oo.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Gisulod namo kini nga mga numero sa usa ka lamesa. Giusab namo ang 40 ngadto sa 40, nag-block kami.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Atong usbon ang 60 ngadto sa 61, 80 ngadto sa 81.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug dayon usbon namon ang 80 ug dayon boom!

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug ang 714 naghulat na karon sa 715. Ang ika-716 naghulat sa ika-715. Ug walay mahimo bahin niini.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Wala nay duha ka tawo dinhi, tulo na ka tawo dinhi. May gusto ko nimo, kining usa gusto sa ikatulo nga tawo, ug ang ikatulong tawo gusto nako. Ug natapos kami sa usa ka tulo ka paagi nga paghulat tungod kay kaming tanan naghulat nga makompleto sa laing tawo ang kinahanglan nilang buhaton.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug nahibal-an sa mga Postgres kung unsang laray kini mahitabo. Ug busa kini maghatag kanimo sa mosunod nga mensahe, nga nagpakita nga ikaw adunay problema diin tulo ka mga input ang nagbabag sa usag usa. Ug walay mga pagdili dinhi. Mahimong kini ang kaso diin ang 20 ka mga entry nag-block sa usag usa.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ang sunod nga problema kay serializable.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kung espesyal nga serializable lock.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug mibalik mi sa 719. Normal ra ang output niini.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug mahimo nimong i-klik aron mahimo ang transaksyon gikan sa serializable.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug nahibal-an nimo nga ikaw karon adunay lahi nga klase sa SA lock - kini nagpasabut nga serializable.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug busa kami adunay usa ka bag-ong tipo sa kandado nga gitawag SARieadLock, nga usa ka serial lock ug gitugotan ka nga mosulod sa mga serial.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug usab mahimo nimong isulud ang talagsaon nga mga indeks.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Niini nga lamesa kita adunay talagsaon nga mga indeks.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Mao nga kung ibutang nako ang numero 2 dinhi, mao nga naa koy 2. Apan sa pinakataas, gibutang nako ang laing 2. Ug makita nimo nga ang 721 adunay eksklusibo nga kandado. Apan karon ang 722 nagpaabot sa 721 nga makompleto ang operasyon niini tungod kay dili kini makasulod sa 2 hangtod nga dili kini mahibal-an kung unsa ang mahitabo sa 721.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug kung mag subtransaction mi.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ania kami adunay 723.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug kung among i-save ang punto ug dayon i-update kini, unya makakuha kami usa ka bag-ong ID sa transaksyon. Kini usa pa ka sumbanan sa pamatasan nga kinahanglan nimong mahibal-an. Kung atong ibalik kini, nan ang transaction ID mawala. 724 ka dahon. Apan karon aduna na kitay 725.

Busa unsa ang akong gipaningkamotan nga buhaton dinhi? Gisulayan nako nga ipakita kanimo ang mga pananglitan sa dili kasagaran nga mga kandado nga mahimo nimong makit-an: kung kini serializable nga mga kandado o SAVEPOINT, kini ang lainlaing mga lahi sa mga kandado nga makita sa lamesa sa kandado.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kini mao ang paghimo sa dayag (tin-aw) kandado, nga adunay pg_advisory_lock.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug nakita nimo nga ang tipo sa pag-block gilista ingon advisory. Ug dinhi kini nag-ingon nga "advisory" sa pula. Ug mahimo nimong dungan nga babagan ang sama niini sa pg_advisory_unlock.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug sa konklusyon, gusto nakong ipakita kanimo ang usa pa ka butang nga makapakurat sa hunahuna. Magbuhat ko ug laing view. Apan moapil ko sa pg_locks table uban sa pg_stat_activity table. Ug nganong gusto ko nga buhaton kini? Tungod kay kini magtugot kanako sa pagtan-aw ug pagtan-aw sa tanan nga kasamtangan nga mga sesyon ug tan-awa kung unsa nga matang sa mga kandado ang ilang gihulat. Ug kini makapainteres kaayo kung among gihiusa ang lamesa sa kandado ug ang lamesa sa pangutana.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug dinhi naghimo kami og pg_stat_view.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug gi-update namo ang laray sa usa. Ug dinhi atong makita ang 724. Ug dayon atong i-update ang atong laray ngadto sa tulo. Ug unsa ang imong nakita dinhi karon? Kini ang mga hangyo, ie makita nimo ang tibuuk nga lista sa mga hangyo nga gilista sa wala nga kolum. Ug unya sa tuo nga bahin makita nimo ang mga blockage ug kung unsa ang ilang gibuhat. Ug kini mahimong mas klaro alang kanimo aron dili ka na kinahanglan nga mobalik sa matag sesyon matag higayon ug tan-awon kung kinahanglan nimo nga moapil niini o dili. Gibuhat nila kini alang kanato.

Ang laing bahin nga mapuslanon kaayo mao ang pg_blocking_pids. Tingali wala ka pa makadungog bahin kaniya. Unsay iyang gibuhat? Gitugotan kami nga isulti nga alang sa kini nga sesyon 11740 kung unsang piho nga mga ID sa proseso ang naghulat niini. Ug imong makita nga ang 11740 naghulat sa 724. Ug ang 724 naa sa pinakataas. Ug 11306 ang imong process ID. Sa tinuud, kini nga function moagi sa imong lock table. Ug nahibal-an ko nga kini usa ka gamay nga komplikado, apan mahimo nimong masabtan kini. Sa tinuud kini nga function moagi sa kini nga lamesa sa kandado ug naningkamot nga makit-an kung diin kini nga proseso nga ID gihatag ang mga kandado nga gihulat niini. Ug gisulayan usab nga mahibal-an kung unsang proseso ang ID ang proseso nga naghulat sa kandado. Aron mahimo nimo kini nga function pg_blocking_pids.

Ug kini mahimong mapuslanon kaayo. Gidugang ra namo kini sa bersyon 9.6, mao nga kini nga feature kay 5 ka tuig lang, apan kini mapuslanon kaayo. Ug mao usab ang magamit sa ikaduhang hangyo. Ginapakita gid sini kon ano ang dapat naton makita.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Kini ang gusto nakong isulti kanimo. And as I expected, nahurot among time kay daghan kaayog slide. Ug ang mga slide magamit alang sa pag-download. Gusto kong magpasalamat kanimo nga ania ka dinhi. Sigurado ko nga malingaw ka sa nahabilin nga komperensya, salamat kaayo!

Mga Pangutana:

Pananglitan, kung ako naningkamot sa pag-update sa mga laray, ug ang ikaduhang sesyon naningkamot sa pagtangtang sa tibuok nga lamesa. Sa akong nasabtan, kinahanglan nga adunay usa ka butang sama sa usa ka tuyo nga kandado. Naa bay ingon niana sa Postgres?

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Balik ta sa sinugdanan. Mahimo nimong hinumdoman nga kung buhaton nimo ang bisan unsang butang, pananglitan kung maghimo ka usa ka PILI, nag-isyu kami usa ka AccessShareLock. Ug kini nagpugong sa lamesa gikan sa pagkahulog. Busa kung ikaw, pananglitan, gusto nga mag-update sa usa ka laray sa usa ka lamesa o magtangtang sa usa ka laray, nan ang usa ka tawo dili makatangtang sa tibuuk nga lamesa sa parehas nga oras tungod kay imong gikuptan kini nga AccessShareLock sa tibuuk nga lamesa ug sa ibabaw sa laray. Ug kung nahuman na ka, mahimo nila kini mapapas. Apan samtang direkta nimo nga gibag-o ang usa ka butang didto, dili nila kini mahimo.

Atong buhaton kini pag-usab. Mopadayon ta sa pananglitan sa pagtangtang. Ug nakita nimo kung giunsa adunay usa ka eksklusibo nga kandado sa laray sa ibabaw sa tibuuk nga lamesa.

Kini tan-awon sama sa lock exclusive, di ba?

Oo, ingon ana. Nakasabot ko sa imong gisulti. Nag-ingon ka nga kung magbuhat ako usa ka PILI unya naa koy ShareExclusive ug pagkahuman gihimo nako kini nga Row Exclusive, nahimo ba kana nga problema? Apan katingad-an nga wala kini usa ka problema. Kini sama sa pagdugang sa lock degree, apan sa esensya adunay ako kandado nga makapugong sa pagtangtang. Ug karon, kung gihimo nako kini nga kandado nga labi ka kusgan, gipugngan gihapon niini ang pagtangtang. So dili jud ko musaka. Sa ato pa, gipugngan kini nga mahitabo kung naa usab kini sa ubos nga lebel, mao nga kung gipataas nako ang lebel niini, gipugngan gihapon niini ang pagtangtang sa lamesa.

Nakasabot ko sa imong gisulti. Walay kaso sa lock escalation, diin ikaw naningkamot sa paghatag sa usa ka lock sa pagpaila sa usa ka mas lig-on nga. Dinhi gipadako lang kini nga pagpugong sa tibuuk nga board, aron dili kini hinungdan sa bisan unsang panagbangi. Apan kini usa ka maayo nga pangutana. Daghang salamat sa pagpangutana niini!

Unsa ang kinahanglan natong buhaton aron malikayan ang usa ka deadlock nga sitwasyon kung kita adunay daghang mga sesyon, daghang mga tiggamit?

Awtomatikong namatikdan sa mga postgres ang mga sitwasyon sa deadlock. Ug kini awtomatik nga mapapas ang usa sa mga sesyon. Ang bugtong paagi aron malikayan ang patay nga pagbabag mao ang pagbabag sa mga tawo sa parehas nga pagkasunud. Mao nga kung imong tan-awon ang imong aplikasyon, kanunay ang hinungdan sa mga deadlocks ... Hunahunaa nga gusto nako babagan ang duha ka lainlaing mga butang. Ang usa ka aplikasyon nag-lock sa lamesa 1, ug ang lain nga aplikasyon nag-lock sa 2, ug dayon ang lamesa 1. Ug ang labing kadali nga paagi aron malikayan ang mga deadlock mao ang pagtan-aw sa imong aplikasyon ug pagsulay sa pagsiguro nga ang pagkandado mahitabo sa parehas nga pagkasunod-sunod sa tanan nga mga aplikasyon. Ug kini sa kasagaran nagwagtang sa 80% sa mga problema, tungod kay ang tanan nga mga matang sa mga tawo nagsulat niini nga mga aplikasyon. Ug kung gibabagan nimo sila sa parehas nga pagkasunud, nan dili ka makasugat sa usa ka deadlock nga sitwasyon.

Salamat kaayo sa imong performance! Naghisgot ka bahin sa puno sa vacuum ug, kung nasabtan nako sa husto, ang bug-os nga vacuum nagtuis sa han-ay sa mga rekord sa lain nga pagtipig, mao nga gitipigan nila ang mga karon nga rekord nga wala mausab. Ngano nga ang bug-os nga vacuum nagkuha ug eksklusibo nga pag-access sa lock ug ngano nga sukwahi kini sa mga operasyon sa pagsulat?

Maayo kana nga pangutana. Ang rason mao nga ang vacuum puno sa pagkuha sa lamesa. Ug sa tinuud naghimo kami usa ka bag-ong bersyon sa lamesa. Ug ang lamesa mahimong bag-o. Kini nahimo nga usa ka hingpit nga bag-ong bersyon sa lamesa. Ug ang problema mao nga kung buhaton naton kini, dili naton gusto nga basahon kini sa mga tawo tungod kay kinahanglan naton nga makita nila ang bag-ong lamesa. Ug mao nga kini nagkonektar sa miaging pangutana. Kung makadungan ta sa pagbasa, dili na nato kini mapalihok ug madirekta ang mga tawo ngadto sa bag-ong lamesa. Kinahanglan namon nga maghulat alang sa tanan nga makatapos sa pagbasa niini nga lamesa, ug busa kini usa ka kahimtang nga eksklusibo sa kandado.
Nag-ingon lang kami nga gi-lock namon gikan sa sinugdanan tungod kay nahibal-an namon nga sa katapusan kinahanglan namon ang usa ka eksklusibo nga kandado aron mabalhin ang tanan sa bag-ong kopya. Busa posibleng masulbad nato kini. Ug gibuhat namo kini niining paagiha uban sa dungan nga pag-indeks. Apan mas lisod kining buhaton. Ug kini adunay kalabotan sa imong miaging pangutana bahin sa eksklusibo nga lock.

Posible ba nga idugang ang pag-lock sa oras sa Postgres? Sa Oracle, mahimo nako, pananglitan, isulat ang "pagpili aron ma-update" ug maghulat 50 segundos sa dili pa mag-update. Maayo kini alang sa aplikasyon. Apan sa Postgres, kinahanglan nako nga buhaton kini dayon ug dili na maghulat, o maghulat hangtod sa pila ka oras.

Oo, makapili ka ug timeout sa imong mga kandado, sa imong mga kandado. Mahimo ka usab nga mag-isyu sa usa ka no way command, nga ... kung dili nimo makuha dayon ang kandado. Busa, bisan usa ka lock timeout o uban pa nga magtugot kanimo sa pagbuhat niini. Wala kini gihimo sa lebel sa syntactic. Gihimo kini isip usa ka variable sa server. Usahay dili kini magamit.

Mahimo ba nimo maablihan ang slide 75?

Oo.

Pag-abli sa Postgres Lock Manager. Bruce Momjian

Ug ang akong pangutana mao ang mosunod. Ngano nga ang duha nga mga proseso sa pag-update nagpaabut sa 703?

Ug kini usa ka maayo nga pangutana. Wala ko kasabot, by the way, nganong gibuhat ni sa Postgres. Apan sa dihang namugna ang 703, nagdahom kini nga 702. Ug sa dihang nagpakita ang 704 ug 705, morag wala sila kabalo sa ilang gipaabot kay wala pa. Ug gibuhat kini sa Postgres sa ingon niini nga paagi: kung dili ka makakuha usa ka kandado, nagsulat kini nga "Unsa ang punto sa pagproseso kanimo?", Tungod kay naghulat ka na sa usa ka tawo. Mao nga pasagdan na lang nato nga magbitay sa hangin, dili na kini ma-update. Apan unsay nahitabo dinhi? Sa diha nga ang 702 nakompleto ang proseso ug ang 703 nakadawat sa iyang kandado, ang sistema mibalik. Ug siya miingon nga kami adunay duha ka tawo nga naghulat. Ug unya magdungan ta ug update nila. Ug ipakita nato nga ang duha nagpaabot.

Wala ko kabalo nganong gibuhat ni sa Postgres. Apan adunay usa ka problema nga gitawag f…. Para nako dili kini termino sa Russian. Kini kung ang tanan naghulat sa usa ka kastilyo, bisan kung adunay 20 ka awtoridad nga naghulat sa kastilyo. Ug kalit silang tanan nagdungan sa pagmata. Ug ang tanan nagsugod sa pagsulay sa reaksyon. Apan ang sistema naghimo niini aron ang tanan naghulat alang sa 703. Kay silang tanan naghulat, ug ato dayon silang linyahan sa tanan. Ug kung adunay laing bag-ong hangyo nga makita nga nahimo pagkahuman niini, pananglitan, 707, nan adunay kahaw-ang pag-usab.

Ug sa akong tan-aw kini gihimo aron makaingon kita nga sa kini nga yugto ang 702 naghulat alang sa 703, ug ang tanan nga moabut pagkahuman wala’y bisan unsang pagsulod sa kini nga natad. Apan sa diha nga ang una nga waiter mobiya, ang tanan nga naghulat nianang higayuna sa wala pa ang pag-update makadawat sa parehas nga timaan. Ug mao nga sa akong hunahuna kini gihimo aron mahimo naton nga maproseso sa pagkasunud aron sila ma-order.

Kanunay nakong gitan-aw kini nga usa ka talagsaon nga panghitabo. Tungod kay dinhi, pananglitan, wala namo sila gilista. Pero para nako sa matag higayon nga muhatag ta ug bag-ong kandado, tan-awon nato ang tanan nga anaa sa proseso sa paghulat. Unya gilinya namo silang tanan. Ug unya ang bisan unsang bag-o nga mosulod mosulod lamang sa pila kung ang sunod nga tawo nahuman na sa pagproseso. Maayo kaayo nga pangutana. Salamat kaayo sa imong pangutana!

Para nako mas makataronganon kung ang 705 nagpaabot sa 704.

Apan ang problema dinhi mao ang mosunod. Sa teknikal nga paagi, mahimo nimong pukawon ang usa o ang lain. Ug mao nga kita makamata sa usa o sa lain. Apan unsa ang mahitabo sa sistema? Imong makita kung giunsa ni 703 sa pinakataas nga gibabagan ang iyang kaugalingong transaction ID. Ingon niini ang pagtrabaho sa Postgres. Ug ang 703 gibabagan sa kaugalingon nga transaction ID, mao nga kung adunay gusto nga maghulat, maghulat sila sa 703. Ug, sa tinuud, 703 ang nakompleto. Ug pagkahuman sa pagkompleto niini ang usa sa mga proseso nahigmata. Ug wala kami mahibal-an kung unsa gyud kini nga proseso. Dayon giproseso namo ang tanan nga hinay-hinay. Apan dili klaro kung unsang proseso ang una nga gipukaw, tungod kay mahimo kini nga bisan unsang mga proseso. Sa tinuud, kami adunay usa ka scheduler nga nag-ingon nga mahimo na namon nga pukawon ang bisan unsang mga proseso. Gipili lang namo ang usa nga random. Mao nga kinahanglan silang tagdon tungod kay mahimo naton pukawon ang bisan kinsa kanila.

Ug ang problema kay naa tay CP-infinity. Ug busa, lagmit nga makamata kita sa ulahi. Ug kung, pananglitan, atong pukawon ang ulahi, maghulat kita sa bag-o lang nakadawat sa bloke, aron dili naton matino kung kinsa gyud ang una nga pukawon. Naghimo lang kami og ingon nga sitwasyon, ug ang sistema magpukaw kanila sa usa ka random nga han-ay.

Adunay mga artikulo bahin sa mga kandado ni Egor Rogov. Tan-awa, kini usab makapaikag ug mapuslanon. Ang hilisgutan, siyempre, komplikado kaayo. Daghang salamat, Bruce!

Source: www.habr.com

Idugang sa usa ka comment