Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Nuqulka hadalka Bruce Momjian 2020 "Furitaanka Maareeyaha Qufulka Boostada".

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

(Fiiro gaar ah: Dhammaan weydiimaha SQL ee boggaga waxaa laga heli karaa xiriirkan: http://momjian.us/main/writings/pgsql/locking.sql)

Hello! Aad bay u fiican tahay inaad mar kale halkan ku noqoto Ruushka. Waan ka xumahay maan imaan karin sanadkii hore, laakiin sanadkan aniga iyo Ivan waxaan wadnaa qorshooyin waaweyn. Waxaan rajeynayaa inaan halkaan joogo marar badan. Waxaan jeclahay imaatinka Ruushka. Waxaan booqan doonaa Tyumen, Tver. Aad ayaan ugu faraxsanahay in aan awoodi doono in aan booqdo magaalooyinkaas.

Magacaygu waa Bruce Momjian. Waxaan ka shaqeeyaa EnterpriseDB waxaanan la shaqaynayay Postgres in ka badan 23 sano. Waxaan ku noolahay Philadelphia, USA. Waxaan socdaalaa qiyaastii 90 maalmood sannadkii. Waxaana ka qayb gala ilaa 40 shir. My Mareegta, kaas oo ka kooban boggaga aan hadda ku tusi doono. Sidaa darteed, shirka ka dib waxaad ka soo dejisan kartaa boggayga gaarka ah. Waxa kale oo ka kooban ilaa 30 bandhig. Waxa kale oo jira muuqaallo iyo tiro badan oo blog-ga la galiyo, in ka badan 500. Tani waa ilo xog-ogaal ah oo cadaalad ah. Oo haddii aad xiisaynayso alaabtan, markaa waxaan kugu martiqaadayaa inaad isticmaasho.

Waxaan ahaan jiray macalin, borofisar ka hor intaanan bilaabin la shaqaynta Postgres. Aad baan ugu faraxsanahay inaan hadda awoodi doono inaan kuu sheego waxaan doonayo inaan idiin sheego. Tani waa mid ka mid ah bandhigyadayda ugu xiisaha badan. Waxayna bandhigani ka kooban tahay 110 bog. Waxaan ku bilaabi doonaa inaan ku hadalno waxyaabo fudud, iyadoo dhamaadka warbixinta ay noqon doonto mid aad u adag, oo noqon doonta mid aad u adag.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Tani waa wada hadal aan wanaagsanayn. Xannibaadda maaha mawduuca ugu caansan. Waxaan rabnaa in tan ay meesha ka baxdo. Waxay la mid tahay inaad u tagto dhakhtarka ilkaha.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

  1. Qufulku waxay dhibaato ku tahay dad badan oo ka shaqeeya kaydka xogta oo leh habab badan oo isku mar wada socda. Waxay u baahan yihiin xannibaad. Taasi waa, maanta waxaan ku siin doonaa aqoonta aasaasiga ah ee xannibista.
  2. Aqoonsiga wax kala iibsiga Tani waa qayb caajis ah oo ka mid ah bandhigga, laakiin waxay u baahan yihiin in la fahmo.
  3. Marka xigta waxaan ka hadli doonaa noocyada xannibaadda. Tani waa qayb farsamaysan oo cadaalad ah.
  4. Hoosta waxaan ku siin doonaa tusaalooyin qaar ka mid ah xannibista. Wayna adkaan doontaa in la fahmo.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Aan ka hadalno xannibaadda.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Eray-bixinteenu waa mid aad u adag. Immisa idinka mid ah ayaa og meesha tuducan ka yimid? Laba qof. Tani waxay ka timid ciyaar la yiraahdo Colossal Cave Adventure. Waxay ahayd ciyaar kombuyuutar qoraal-ku-salaysan sannadihii 80aadkii, waxay ila tahay. Halkaa waxa ay noqotay in aad god ka gasho, oo aad gasho shaybaadhka, qoraalkuna wuu is beddelay, laakiin nuxurku waxa uu ahaa qiyaastii isku mid mar kasta. Sidaas ayaan ku xasuustaa ciyaartan.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo halkan waxaan ku aragnaa magaca qufullada nooga yimid Oracle. Waxaan isticmaalnaa iyaga.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Halkan waxaan ku aragnaa shuruudo i jahawareersan. Tusaale ahaan, la wadaag cusboonaysiinta ECXLUSIVE. Marka xigta SHARE CAYNIIN ECXLUSIVE. Run ahaantii, magacyadani aad uma cadda. Waxaan isku dayi doonaa inaan u tixgelinno si faahfaahsan. Qaar ka mid ah waxay ka kooban yihiin ereyga "share", oo macneheedu yahay kala go'. Qaar ka mid ah waxay ka kooban yihiin ereyga "gaar ah". Qaar baa ka kooban labadan kelmadood. Waxaan jeclaan lahaa inaan ku bilaabo sida qufuladani u shaqeeyaan.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Iyo ereyga "helitaanka" sidoo kale waa mid aad muhiim u ah. Ereyada " saf"na waa xarig. Taasi waa, qaybinta helitaanka, qaybinta safka.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Arrin kale oo u baahan in lagu fahmo Postgres, oo aan nasiib darro aan hadalkeyga ku dabooli karin, waa MVCC. Mawduucan waxaan ku hayaa mawduucan mareegahayga. Oo haddii aad u malaynayso in bandhigani uu adag yahay, MVCC waxay u badan tahay inay iigu adag tahay. Haddii aad xiisaynaysona, waxaad ka daawan kartaa mareegaha. Waxaad daawan kartaa muuqaalka.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Wax kale oo aan u baahanahay inaan fahanno waa aqoonsiga wax kala iibsiga. Wax kala beddelasho badan ma shaqayn karaan la'aanteed aqoonsiyo gaar ah. Oo halkan waxaan ku haynaa sharaxaad ku saabsan waxa macaamil ganacsigu yahay. Postgres waxay leedahay laba hab oo nambarada wax kala iibsiga. Waan ogahay in tani aysan ahayn xal aad u qurux badan.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Sidoo kale maskaxda ku hay in sawiradu ay aad u adkaan doonaan in la fahmo, markaa waxa lagu muujiyay casaanka waa waxa aad u baahan tahay inaad fiiro gaar ah u yeelato.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

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

Aan aragno. Nambarka wax kala iibsiga waxa lagu muujiyay casaan Shaqada SELECT pg_back ayaa lagu muujiyay halkan. Waxay soo celisaa wax kala iibsigayga iyo aqoonsiga wax kala iibsiga.

Hal shay oo kale, haddii aad jeceshahay bandhiggan oo aad rabto inaad ku socodsiiso xogtaada, markaa waxaad aadi kartaa isku xirka casaanka oo soo dejiso SQL bandhiggan. Waxaadna si fudud ugu socodsiin kartaa PSQL-gaaga oo dhanba soo jeedintu waxay isla markaaba ku soo muuqan doontaa shaashaddaada. Kuma jiri doono ubax, laakiin ugu yaraan waan arki karnaa.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Xaaladdan oo kale waxaan aragnaa aqoonsiga macaamil ganacsi. Kani waa lambarkii aanu u qoondaynay. Oo waxaa jira nooc kale oo aqoonsiga macaamil ganacsi gudaha Postgres, kaas oo loo yaqaan aqoonsiga macaamil ganacsi

Waana inaan fahannaa tan. Tani aad bay muhiim u tahay, haddii kale ma awoodi doono inaan fahamno qufulka Postgres.

Aqoonsiga wax-kala-socod ee dalwadku waa aqoonsi wax kala beddelasho oo aan ku jirin qiimayaal joogto ah. Tusaale ahaan, haddii aan maamulo amarka SELECT, markaas waxay u badan tahay inaan bedeli doonin xogta xogta, waxba ma xidhi doono. Markaa marka aanu wadno Xulasho fudud, ma siino wax kala iibsigaas aqoonsi joogto ah. Waxa kaliya oo aan ku siinay aqoonsi dalwad ah halkaas.

Tani waxay hagaajinaysaa waxqabadka Postgres, waxay hagaajinaysaa awoodaha nadiifinta, markaa aqoonsiga macaamil ganacsi ee farsamada ah wuxuu ka kooban yahay laba lambar. Lambarka ugu horreeya ee ka horreeya jeexjeexa waa aqoonsiga dambe. Oo dhanka midig waxaan ku aragnaa kaliya counter.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Sidaa darteed, haddii aan sameeyo codsi, waxay sheegaysaa in aqoonsiga dambe uu yahay 2.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo haddii aan sameeyo taxane ah oo macaamil ganacsi ah, markaa waxaan aragnaa in xisaabiyuhu uu kordho mar kasta oo aan sameeyo su'aal. Tusaale ahaan, marka aan wado su'aasha 2/10, 2/11, 2/12, iwm.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Maskaxda ku hay in halkan ay jiraan laba tiir. Dhanka bidix waxaan ku aragnaa aqoonsiga macaamil ganacsi ee farsamada - 2/12. Dhanka midigna waxaan ku haynaa aqoonsi macaamil ganacsi oo joogto ah. Oo garoonkani waa madhan. Wax kala iibsigana ma beddelo xogta macluumaadka. Markaa ma siiyo aqoonsi macaamil ganacsi oo joogto ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Isla markii aan socodsiiyo amarka falanqeynta ((ANALYZE)), isla waydiinta ayaa i siinaysa aqoonsi macaamil ganacsi oo joogto ah. Bal u fiirso sida tani noogu bedeshay. Aqoonsigan hore ma aan haysan, laakiin hadda waan haystaa.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Markaa halkan waa codsi kale, macaamil kale. Nambarka wax kala iibsiga dalwaddu waa 2/13. Oo haddii aan weydiiyo aqoonsiga macaamil ganacsi oo joogto ah, ka dib markaan su'aasha qabto, waan heli doonaa.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Markaa, hal mar oo kale. Waxaan haynaa Aqoonsi wax kala beddelasho toos ah iyo aqoonsi macaamil ganacsi oo joogto ah. Kaliya u fahan qodobkan si aad u fahanto dhaqanka Postgres.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Waxaan u gudbaynaa qaybta saddexaad. Halkan waxaan si fudud u dhex mari doonaa noocyada kala duwan ee qufulka ee Postgres. Ma ahan mid aad u xiiso badan. Qeybta ugu dambeysa waxay noqon doontaa mid aad u xiiso badan. Laakiin waa in aan tixgelinno waxyaabaha aasaasiga ah, sababtoo ah haddii kale ma fahmi doono waxa dhici doona xiga.

Waxaan dhex mari doonaa qaybtan, waxaan eegi doonaa nooc kasta oo quful ah. Oo waxaan ku tusi doonaa tusaalayaal ku saabsan sida loo rakibo, sida ay u shaqeeyaan, waxaan ku tusi doonaa qaar ka mid ah weydiimaha aad isticmaali karto si aad u aragto sida qufulku u shaqeeyo Postgres.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Si loo abuuro weydiimo oo aan u aragno waxa ka dhacaya Postgres, waxaan u baahanahay inaan ku soo saarno su'aasha aragtida nidaamka. Xaaladdan oo kale, pg_lock waxa lagu iftiimiyay casaan Pg_lock waa shax nidaam oo noo sheegaya qufullada hadda lagu isticmaalo Postgres.

Si kastaba ha ahaatee, aad bay iigu adag tahay inaan ku tuso pg_lock kaligiis sababtoo ah way adag tahay. Markaa waxaan sameeyay muuqaal muujinaya pg_locks. Oo weliba waxay ii qabataa shaqo ii ogolaata inaan si fiican u fahmo. Taasi waa, waxay ka saaraysaa qufulkaygii, fadhigayga, iwm. Waa SQL-ga caadiga ah waxayna kuu ogolaaneysaa inaad si fiican kuu tusto waxa socda.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Dhibaato kale ayaa ah in aragtidani aad u ballaaran tahay, markaa waa inaan abuuraa mid labaad - lockview2.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian Oo waxay i tusinaysaa tiirar badan oo miiska ka soo baxay. Iyo mid kale oo i tusaya tiirarka intiisa kale. Tani waa mid aad u adag, sidaas darteed waxaan isku dayay inaan u soo bandhigo sida ugu fudud ee suurtogalka ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Markaa waxaanu samaynay miis la yidhaahdo Lockdemo. Waxaana halkaas ka abuurnay hal xariiq. Kani waa miiska tusaalahayaga. Oo waxaanu abuuri doonaa qaybo si aanu ku tuso tusaalooyinka qufulka.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Markaa, hal saf, hal tiir. Nooca koowaad ee qufulka waxaa loo yaqaan ACCESS SHARE. Tani waa xannibaadda ugu yar. Taas macneheedu waxa weeye in aanay ka hor imanayn qufulyada kale.

Oo haddii aan rabno inaan si cad u qeexno quful, waxaan wadnaa amarka "miiska qufulka". Waxayna si cad u xannibi doontaa, tusaale ahaan qaabka ACCESS SHARE waxaanu ku bilaabaynaa miiska qufulka. Oo haddii aan PSQL gadaal ka wado, ka dib waxaan ka bilaabayaa casharka labaad casharkaygii kowaad sidan. Taasi waa, maxaan halkan ku qaban doonaa? Waxaan aadaa fadhi kale oo aan u sheego "i tus qufulka codsigan." Oo halkan waxaan ku hayaa AccessShareLock shaxdan. Tani waa dhab ahaan waxa aan codsaday. Wuxuuna sheegay in balootkii loo qoondeeyay. Aad u fudud.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Dheeraad ah, haddii aan eegno tiirka labaad, markaa ma jiraan wax jira. Way madhan yihiin.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo haddii aan socodsiiyo amarka "SELECT", markaa tani waa dariiqa qarsoon (sida cad) ee lagu codsado AccessShareLock. Markaa miiskayga waan sii daayaa oo waan socodsiiyaa weydiinta su'aashuna waxay soo celisaa safaf badan. Oo mid ka mid ah khadadka waxaan ku aragnaa AccessShareLock. Markaa, SELECT waxay ugu yeedhaa AccessShareLock miiska dushiisa. Waxna kama hor imanayso sababtoo ah waa quful heerkiisu hooseeyo.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Maxaa dhacaya haddii aan sameeyo SELECT oo aan haysto saddex miis oo kala duwan? Markii hore waxaan waday hal miis oo kaliya, hadda waxaan ordayaa seddex: pg_class, pg_namespace iyo pg_attribute.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo hadda markaan eego weydiinta, waxaan ku arkaa 9 AccessShareLocks oo ku jira saddex miis. Waa maxay sababtu? Saddex miis ayaa lagu iftiimiyay buluug: pg_attribute, pg_class, pg_namespace. Laakiin waxaad sidoo kale arki kartaa in dhammaan tusmooyinka lagu qeexay jaantusyadan ay sidoo kale leeyihiin AccessShareLock.

Tanina waa quful aan ficil ahaan iska dhicin dadka kale. Waxa kaliya ee ay sameyneyso ayaa ah inay si fudud nooga horjoogsadaan inaan dib u dejinno miiska inta aan dooraneyno. Waxay macno samaynaysaa. Taasi waa, haddii aan doorano miis, wuu baaba'aa wakhtigaas, markaa tani waa khalad, sidaas darteed AccessShare waa quful heer hoose ah oo noo sheegaya "ha tuurin miiskan inta aan shaqaynayo". Dhab ahaantii, taasi waa waxa kaliya ee ay sameyso.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

SAFKA WADAAG - Qufulkani wuu ka yara duwan yahay.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Aan tusaale usoo qaadano. Xulo habka SAFKA WADAAG oo saf kasta si gaar ah loogu qufulayo. Sidan cidina ma tirtiri karto ama ma beddeli karto inta aynu daawanayno.

Furitaanka Maareeyaha Qufulka Postgres. Bruce MomjianHaddaba muxuu qabtaa qufulka SHARE? Waxaan aragnaa in aqoonsiga wax kala iibsiga uu yahay 681 ee SELECT. Tanina waa mid xiiso leh. Maxaa halkan ka dhacay? Marka ugu horeysa ee aan aragno nambarku waxay ku yaalaan goobta "Lock". Waxaan qaadanaa aqoonsiga wax kala iibsiga oo uu sheegay in uu u xannibayo qaab gaar ah. Waxa kaliya ee ay sameyso waa in la yiraahdo waxaan haystaa saf oo farsamo ahaan ku xiran meel miiska ah. Laakiin ma uusan sheegin meesha saxda ah. Waxaan si faahfaahsan u eegi doonaa tan wax yar ka dib.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Halkan waxaan ku nidhi qufulka annagu waa isticmaalnaa.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Markaa, quful gaar ah ayaa si cad u sheegaya inay gaar tahay. Iyo sidoo kale haddii aad tirtirto safka shaxdan, markaa tani waa waxa dhici doona, sida aad arki karto.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

SHARE EXCLUSIVE waa quful dheer.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Kani waa (ANALYZE) amarka falanqeeye ee la isticmaali doono.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

LOCK WADAAG - waxaad si cad u quful kartaa qaabka wadaaga

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Waxa kale oo aad samayn kartaa index gaar ah. Halkaasna waxa aad ka arki kartaa LOCK SHARE, kaas oo qayb ka ah. Miiskana way xidhaa oo ay dul saartaa QOF SHARE LOCK ah.

Sida caadiga ah, QOLKA Miiska la wadaago macnaheedu waa in dadka kale ay akhriyi karaan miiska, laakiin cidina ma beddeli karto. Tanina waa dhab ahaan waxa dhacaya markaad abuurto tusaha gaarka ah.

Haddii aan sameeyo tusaha is-xigxiga ee gaarka ah, markaas waxaan yeelan doonaa nooc kale oo quful ah sababtoo ah, sida aad xasuusato, isticmaalka tusmooyinka isku-xiran waxay yaraynaysaa shuruudaha xiritaanka. Oo haddii aan isticmaalo quful caadi ah, tusaha caadiga ah, markaa waxaan ka hortagi doonaa in la qoro tusmada miiska inta la abuurayo. Haddii aan isticmaalo tusmaynta isku mar, markaa waxaan u baahanahay inaan isticmaalo nooc kale oo quful ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

LA wadaag Safka GAAR AH - mar labaad si cad ayaa loo dejin karaa (si cad).

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Ama waxaan abuuri karnaa xeer, tusaale ahaan, qaado kiis gaar ah oo loo isticmaali doono.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Quful gaar ah waxay ka dhigan tahay in qof kale uusan bedeli karin miiska.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Halkan waxaan ku aragnaa noocyo kala duwan oo quful ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

ACCESS EXCLUSIVE, tusaale ahaan, waa amar xannibaya. Tusaale ahaan, haddii aad sameyso CLUSTER table, markaas tani waxay ka dhigan tahay in qofna ma awoodi doono inuu halkaas wax ku qoro. Oo ma xidho oo keliya miiska laftiisa, laakiin sidoo kale tusmooyinka.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Kani waa bogga labaad ee xannibaadda GAARARKA AH, halkaas oo aan ku aragno sida saxda ah waxa ay u xannibayso miiska. Waxay xirtaa safafka miiska gaarka ah, taas oo aad u xiiso badan.

Taasi waa dhammaan macluumaadka aasaasiga ah ee aan rabay in aan bixiyo. Waxaan ka hadalnay qufullada, wax ku saabsan aqoonsiga wax kala iibsiga, waxaan ka hadalnay aqoonsiyada macaamil ganacsi, wax ku saabsan aqoonsiga macaamil ganacsi ee joogtada ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo hadda waxaan soo mari doonaa qaar ka mid ah tusaalayaal xannibaya. Tani waa qaybta ugu xiisaha badan. Waxaan eegi doonaa kiisas aad u xiiso badan. Hadafkayga soo jeedintan waa inaan ku siiyo faham wanaagsan waxa Postgres dhab ahaantii samaynayo marka ay isku daydo inay xannibto waxyaabaha qaarkood. Waxaan u maleynayaa inuu aad ugu fiican yahay xannibaadda qaybaha.

Aynu eegno tusaalooyin gaar ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Waxaan ku bilaabi doonaa miisaska iyo hal saf oo miis ah. Marka aan geliyo shay waxaan haystaa ExclusiveLock, Aqoonsiga Ganacsiga iyo ExclusiveLock oo miiska saaran.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Maxaa dhacaya haddii aan geliyo laba saf oo kale? Oo hadda miiskayagu wuxuu leeyahay saddex saf. Oo hal saf ayaan galiyay oo tan u helay wax soo saar ahaan. Haddaan laba saf oo kale soo galiyo, maxaa yaab leh? Waxaa jira wax yaab leh halkan sababtoo ah waxaan ku daray saddex saf miiskan, laakiin weli waxaan haystaa laba saf oo miiska qufulka ah. Tanina asal ahaan waa hab-dhaqanka aasaasiga ah ee Postgres.

Dad badan ayaa u maleynaya in haddii database-ka aad xirto 100 saf, markaa waxaad u baahan doontaa inaad abuurto 100 quful ah. Haddii aan xannibo 1 saf hal mar, markaa waxaan u baahan doonaa 000 su'aalood oo noocaas ah. Oo haddii aan u baahdo hal milyan ama bilyan si aan u xannibo. Laakiin haddii aan tan samayno, si fiican uma shaqayn doonto. Haddii aad isticmaashay nidaam abuuraya xannibaadda gelitaanka saf kasta, markaa waxaad arki kartaa in tani ay adag tahay. Sababtoo ah waxaad u baahan tahay inaad isla markiiba qeexdo miiska qufulka oo buux dhaafi kara, laakiin Postgres ma sameeyo taas.

Iyo waxa runtii muhiimka ah ee ku saabsan boggan waa in ay si cad u muujinayso in uu jiro nidaam kale oo ka socda gudaha MVCC kaas oo xira safka gaarka ah. Markaa markaad xidhid balaayiin saf, Postgres ma abuurto balaayiin amaro quful gooni ah. Waxayna tani saameyn aad u wanaagsan ku leedahay wax soo saarka.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Ka warran cusbooneysiin? Hadda waxaan cusbooneysiinayaa safka, oo waxaad arki kartaa inuu sameeyay laba qalliin oo kala duwan hal mar. Miiskii ayay isku mar qufulisay, laakiin sidoo kale waxa ay xidhay tusmada. Oo wuxuu u baahday inuu xiro tusaha sababtoo ah waxaa jira caqabado gaar ah oo miiskaan saaran. Waxaana rabnaa inaan hubinno in qofna uusan beddelin, sidaas darteed waannu xannibnay.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Maxaa dhacaya haddii aan rabo inaan cusboonaysiiyo laba saf? Oo waxaynu aragnaa inuu sidaas oo kale u dhaqmo. Waxaan samaynaa labanlaab cusbooneysiinta badan, laakiin dhab ahaan tiro isku mid ah ee xariiqyada qufulka.

Haddii aad la yaabban tahay sida Postgres uu tan u sameeyo, waxaad u baahan doontaa inaad dhegaysato hadalladayda ku saabsan MVCC si aad u barato sida Postgres gudaha ugu calaamadiso khadadkan inay isbeddelayso. Postgres waxay leedahay hab ay sidan u sameyso, laakiin kuma samaynayso heerka qufulka miiska, waxay ku qabataa heer hoose oo hufan.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Maxaa dhacaya haddii aan rabo inaan wax tirtiro? Haddii aan tirtiro, tusaale ahaan, hal saf oo aan wali haysto labadayda qalab ee xannibaya, xitaa haddii aan rabo in aan tirtiro dhammaantood, weli way jiraan.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo, tusaale ahaan, waxaan rabaa in aan geliyo 1 sadar, ka dibna ama tirtir ama ku daro 000 sadar, ka dibna kuwa shakhsi ahaaneed ee aan ku daro ama beddelo, halkan kuma qorna. Waxay ku qoran yihiin heer hoose oo taxane ah laftiisa. Oo intii lagu jiray hadalka MVCC waxaan si faahfaahsan uga hadlay arrintan. Laakiin aad bay muhiim u tahay markaad falanqaynayso qufullada si aad u hubiso inaad ku xidhayso heerka miiska iyo inaadan arkayn sida safka shakhsi ahaaneed halkan loogu duubayo.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Ka waran xannibaadda cad?

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Haddii aan guji refresh, waxaan haystaa laba saf oo xiran. Oo haddii aan doorto dhammaantood oo aan gujiyo "cusbooneysii meel kasta," ka dibna waxaan weli haystaa laba diiwaan oo xannibaya.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Uma samayno diiwaano gaar ah saf kasta. Sababtoo ah markaa wax soo saarku hoos u dhaco, waxaa laga yaabaa inay aad u badan tahay. Waxaana laga yaabaa in aan isku aragno xaalad aan fiicneyn.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Sidoo kale, haddii aan wadaagno, waxaan sameyn karnaa dhammaan 30 jeer.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Miiskayaga ayaanu soo celinay, wax walba tirtirnaa, ka dibna hal saf mar kale gelinaa.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Dabeecad kale oo aad ku aragto Postgres oo aad loo yaqaan oo habdhaqanka la rabo waa inaad samayn karto cusbooneysiin ama dooro. Oo waxaad samayn kartaa tan isku mar. Oo dooro ma xannibi update iyo wax la mid ah jihada ka soo horjeeda. Waxa aanu u sheegaynaa akhristaha in aanu is-hortaagin qoraaga, qoraaguna ma xannibin akhristaha.

Waxaan ku tusi doonaa tusaale tan ah. Hadda waxaan samayn doonaa doorasho. Waxaan markaas samayn doonaa GALINTA. Oo markaas waxaad arki kartaa - 694. Waxaad arki kartaa aqoonsiga macaamil ganacsi sameeyey galinta this. Waana sida ay u shaqeyso.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo haddaan eego aqoonsigayga dhabarka dambe, hadda waa 695.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo waxaan arki karaa 695 oo ka soo muuqday miiskayga.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo haddii aan halkan u cusbooneysiiyo sidan oo kale, markaa waxaan helayaa kiis kale. Xaaladdan oo kale, 695 waa quful gaar ah, iyo cusbooneysiintu waxay leedahay dabeecad isku mid ah, laakiin ma jiraan wax khilaaf ah oo u dhexeeya, taas oo ah mid aan caadi ahayn.

Waxaadna arki kartaa in meesha ugu sareysa ay tahay ShareLock, halka hoosena ay tahay ExclusiveLock. Oo labada macaamiloodba way shaqeeyeen.

Oo waxaad u baahan tahay inaad dhegaysato hadalkayga MVCC si aad u fahamto sida tani u dhacdo. Laakin kani waa tusaale in aad isku mar samayn karto, tusaale ahaan samee XUL iyo UPDATE isku mar.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Aynu dib u dajin oo hal qalliin oo kale samayno.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Haddii aad isku daydo in aad isku mar ku socodsiiso laba updates isku mar, waa la xannibi doonaa. Xusuusnow, waxaan idhi akhristuhu ma xannibo qoraaga, qoraaguna ma xannibo akhristaha, laakiin hal qoraa ayaa xannibaya qoraa kale. Taasi waa, ma yeelan karno laba qof oo isku mar cusbooneysiiya isku mar. Waa inaad sugtaa ilaa mid ka mid ah uu dhammeeyo.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo si aan tan u muujiyo, waxaan eegi doonaa miiska Lockdemo. Oo waxaan eegi doonaa hal saf. Xawaalad kasta 698.

Waxaan tan u cusboonaysiinnay 2. 699 waa cusbooneysiinta ugu horreysa. Wayna ku guulaysatay ama waxay ku jirtaa wax kala iibsi oo sugaya oo waxay sugaysaa inaanu xaqiijino ama joojino.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Laakiin bal wax kale eeg - 2/51 waa macaamil ganacsigeenii ugu horreeyay, fadhigeena koowaad. 3/112 waa codsigii labaad ee xagga sare ka yimid ee qiimahaas u beddelay 3. Haddaad u fiirsatona kan sare ayaa is xidhay, kaas oo ah 699. Laakiin 3/112 ma siin qufulka. Tiirka Lock_mode wuxuu sheegayaa waxa la sugayo. Waxay filaysaa 699. Haddaad eegto 699 waa ka sarreeyaa. Maxaase kalfadhigii u horeeyay qabtay? Waxay ku samaysay quful gaar ah aqoonsigeeda wax kala iibsiga. Tani waa sida Postgres u sameeyo. Waxay xannibaysaa aqoonsigeeda wax kala iibsiga. Oo haddii aad rabto inaad sugto qof inuu xaqiijiyo ama joojiyo, markaa waxaad u baahan tahay inaad sugto inta uu jiro macaamil ganacsi oo sugaya. Taasina waa sababta aan u arki karno khad qariib ah.

Aan mar kale eegno. Dhanka bidix waxaan ku aragnaa aqoonsigayada habaynta Tiirka labaad waxa aanu ku aragnaa aqoonsigayaga wax kala iibsiga, ka saddexaadna waxa aanu aragnaa lock_type. Maxay tani ka dhigan tahay? Asal ahaan waxa ay leedahay waa in ay xannibayso aqoonsiga macaamil ganacsi. Laakin ogow in dhammaan safafka hoose ay sheegaan xiriir. Oo sidaas darteed waxaad haysataa laba nooc oo quful miiska saaran. Waxaa jira quful xiriir. Kadibna waxaa jira xannibaado ganacsi, halkaas oo aad adigu xannibayso, taas oo ah sida dhabta ah ee ka dhacaysa safka koowaad ama ugu hooseeya, halka macaamilku ku yaal, halkaas oo aan sugno 699 si uu u dhammeeyo hawlihiisa.

Waan arki doonaa waxa ka dhaca halkan Oo halkan laba shay ayaa isku mar dhacaya. Waxaad eegaysaa qufulka aqoonsiga wax kala iibsiga ee safka kowaad kaas oo is xidhay. Waxayna isku xirtaa si ay dadka u sugaan.

Haddii aad eegto safka 6aad, waa isla gelitaanka kii hore. Oo sidaas darteed wax kala iibsiga 699 waa la xannibay. 700 sidoo kale waa is-quful. Kadibna safka hoose waxaad arki doontaa inaan sugeyno 699 si uu u dhammeeyo hawlgalkiisa.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo ku jira lock_type, tuple waxaad ku aragtaa tirooyinka.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Waxaad arki kartaa inay tahay 0/10. Oo kanu waa lambarka bogga, iyo sidoo kale ka-goynta safkan gaarka ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo waxaad arkaysaa inay noqonayso 0/11 markaan cusbooneysiinno.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Laakiin dhab ahaantii waa 0/10, sababtoo ah waxaa jira sugitaanka hawlgalkan. Waxaan haysanaa fursad aan ku aragno in tani ay tahay taxanaha aan sugayo inaan xaqiijiyo.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Marka aan xaqiijino oo aan riixno ballan, iyo marka cusbooneysiinta dhammaato, tani waa waxa aan mar kale helno. Wax kala iibsiga 700 waa qufulka kaliya, ma sugto qof kale sababtoo ah waa la go'aamiyay. Waxay si fudud u sugaysaa macaamil ganacsigu inuu dhammaystiro. Mar haddii 699 dhamaado, wax dambe ma sugin. Oo hadda macaamilka 700 ayaa sheegaya in wax walba ay fiican yihiin, in ay haystaan ​​dhammaan qufullada ay u baahan yihiin dhammaan miisaska la oggol yahay.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Iyo si aad tan oo dhan uga dhigto mid aad u adag, waxaan abuurnaa aragti kale, taas oo waqtigan na siin doonta kala sareyn. Ma filayo inaad fahantay codsigan. Laakiin tani waxay ina siin doontaa aragti cad oo ku saabsan waxa socda.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Tani waa aragti soo noqnoqota oo sidoo kale leh qayb kale. Kadibna wax walba mar kale ayay isu keentaa. Aan isticmaalno kan.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Ka warran haddii aan samayno saddex updates oo isku mar ah oo aan nidhaahno safku hadda waa saddex. Waxaana u bedeli doonaa 3 ilaa 4.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo halkan waxaan ku aragnaa 4. Iyo aqoonsiga macaamil ganacsi 702.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Kadibna waxaan u badali doonaa 4 ilaa 5. Iyo 5 ilaa 6, iyo 6 ilaa 7. Waxaanan saf u gali doonaa tiro dad ah oo sugaya in hal ganacsi uu dhamaado.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Wax walbana way cad yihiin. Waa maxay safka koowaad? Tani waa 702. Kani waa aqoonsiga macaamil ganacsi ee markii hore qiimeeyay. Maxaa ku qoran tiirkayga la siiyay? waxaan leeyahay calaamado f. Kuwani waa cusbooneysiintayda oo (5, 6, 7) aan la oggolaan karin sababtoo ah waxaan sugeynaa aqoonsiga macaamil ganacsi 702 inuu dhammaanayo. Halkaa waxaan ku leenahay xannibaadyada aqoonsiga macaamil ganacsi. Oo tani waxay keenaysaa 5 quful aqoonsiga macaamil ganacsi.

Oo haddii aad eegto 704, at 705, weli waxba halkaas kuma qorin, sababtoo ah ma garanayaan waxa socda weli. Waxay si fudud u qoraan inaysan wax fikrad ah ka lahayn waxa dhacaya. Wayna seexan doonaan sababtoo ah waxay sugayaan qof dhammeeya oo la toosiyo marka ay jirto fursad ay ku beddelaan safafka.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Tani waa sida ay u egtahay. Waxaa cad in dhamaantood ay sugayaan safka 12-aad.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Tani waa waxa aan ku aragnay halkan. Halkan waa 0/12.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Markaa marka macaamilka ugu horreeya la oggolaado, waxaad halkan ku arki kartaa sida kala sarrayntu u shaqeyso. Oo hadda wax walba way cad yihiin. Dhammaantood nadiif bay noqdeen. Waxayna dhab ahaantii wali sugayaan.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Waa kan waxa dhacaya 702 ayaa galay. Oo hadda 703 ayaa helaya qufulkan, ka dibna 704 waxay bilaabeen inay sugaan 703 inay sameeyaan. Oo 705-ta ayaa sidoo kale sugaya tan. Oo markii waxaas oo dhan ay dhammaadaan, way is nadiifiyaan. Waxaanan rabaa in aan tilmaamo in qof walba uu safan yahay. Waxayna tani aad ula mid tahay xaalada saxmadda wadooyinka marka qof walba uu sugayo gaariga ugu horeeya. Baabuurkii u horeeyay ayaa istaagay, qof walbana saf dheer ayuu soo galay. Dabadeed wuu dhaqaaqaa, dabadeed baabuurka ku xiga ayaa horay u sii wadi kara oo heli kara block-kiisa, iwm.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo haddii tani aysan kuugu muuqan mid kugu adag, markaa waxaan hadda kaala hadli doonaa waxyaabaha ku saabsan xirmooyinka. Ma garanayo midkiin la kulmay. Tani waa dhibaato caadi ah oo ka jirta nidaamyada macluumaadka. Laakin ismari waa marka hal fadhi la sugayo fadhi kale si uu wax u qabto. Haddana fadhi kale ayaa sugaya fadhiga ugu horreeya si uu wax u qabto.

Iyo, tusaale ahaan, haddii Ivan uu yiraahdo: "wax i sii," oo aan idhaahdo: "Maya, kaliya waxaan ku siinayaa haddii aad wax kale i siiso." Oo isna wuxuu ku yidhi, "Maya, ku siin maayo haddii aadan i siin." Waxaanan ku dambaynaynaa xaalad is-miidaamin ah. Waan hubaa in Ivan uusan sidan yeeli doonin, laakiin waxaad fahantay macnaha inaan leenahay laba qof oo doonaya inay wax helaan diyaarna uma aha inay bixiyaan ilaa qofka kale uu siiyo wuxuu rabo. Xalna ma jiro.

Iyo asal ahaan, xogtaadu waxay u baahan tahay inay ogaato tan. Kadibna waxaad u baahan tahay inaad tirtirto ama xirto mid ka mid ah fadhiyada, sababtoo ah haddii kale waxay ku sii jiri doonaan weligood. Oo waxaan ku aragnaa xogta macluumaadka, waxaan ku aragnaa nidaamyada hawlgalka. Iyo dhammaan meelaha aan ku leenahay habab isbarbar socda, tani way dhici kartaa.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo hadda waxaan ku rakibi doonaa laba bakhtiya. Waxaan dhigi doonaa 50 iyo 80. Safka koowaad, waxaan cusbooneysiin doonaa 50 ilaa 50. Waxaan heli doonaa macaamil ganacsi lambar 710.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Kadibna waxaan bedeli doonaa 80 ilaa 81, iyo 50 ilaa 51.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo tani waa sida ay u ekaan doonto. Oo sidaas daraaddeed 710 ayaa isku xigta la xannibay, 711na waxay sugayaan xaqiijinta. Waxaan aragnay tan markii aan cusbooneysiinay. 710 waa milkiilaha taxanahayaga. Oo 711 ayaa sugaya 710 si ay u dhamaystiraan wax kala iibsiga.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo xataa waxay sheegaysaa in safkee ayay xidhidhisku ku dhacayaan. Oo halkan waa halka ay ka bilaabato inay noqoto mid yaab leh.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Hadda waxaan cusbooneysiineynaa 80 ilaa 80.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Waana halka ay ka bilaabmato xidhidhiyaha. 710 ayaa jawaab ka sugaya 711, 711na waxay sugayaan 710. Tanina si fiican kuma dhammaanayso. Taasna waddo looga baxo ma jirto. Waxayna midba midka kale jawaab ka filayaan.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo waxay bilaabi doontaa uun inay dib u dhigto wax walba. Taasna ma rabno.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Postgres waxay leedahay habab lagu ogaado markay tani dhacdo. Oo markay tani dhacdo, waxaad helaysaa qaladkan. Waxaana halkaa ka cad in nidaamka noocaas ah iyo kuwan la mid ahba ay sugayaan quful SHARE ah oo ka soo baxa hab kale, yacni, kaas oo uu xannibay habka 711. Hawshaasina waxa ay sugaysay QOF SHARE LOCK ah in lagu bixiyo aqoonsiga noocaan oo kale ah iyo wax kala iibsi waxaana xannibay habkan iyo sidaan oo kale. Sidaa darteed, halkan waxaa ka jira xaalad is-mariwaa ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Ma jiraan xannibaado saddex geesood ah? Suurtagal ma tahay? Haa

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Waxaan galeynaa tirooyinkaan miis. Waxaan u beddelnaa 40 ilaa 40, waxaanu samaynaa xannibaad.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Waxaan u beddelnaa 60 ilaa 61, 80 ilaa 81.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Ka dibna waxaan bedelnaa 80 ka dibna boom!

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo 714 ayaa hadda sugaya 715. 716 ayaa sugaya 715. Waxna lagama qaban karo.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Ma jiraan laba qof oo halkan jooga, horeba saddex qof ayaa halkan joogay. Wax baan kaa rabaa, kani qof saddexaad buu wax ka rabaa, kan saddexaadna wax buu iga rabaa. Oo waxaan ku dhamaanaynaa sugitaan saddex geesood ah sababtoo ah waxaan dhammaanteen sugeynaa qofka kale si uu u dhamaystiro waxa uu u baahan yahay inuu sameeyo.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Postgresna way ogtahay safka tani ka dhacayso. Oo sidaas daraaddeed waxay ku siin doonaa fariinta soo socota, taas oo muujinaysa in aad leedahay dhibaato halkaas oo saddex wax soo saarka ayaa xannibaya midba midka kale. Oo ma jiraan wax xannibaad ah halkan. Tani waxay noqon kartaa kiiska halka 20 gelitaanku ay is-hortaageen midba midka kale.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Dhibka soo socdaa waa taxane.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Haddii quful taxane ah oo gaar ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo waxaynu ku noqonaynaa 719. Wax-soo-saarkeedu waa iska caadi.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo waxaad riixi kartaa si aad wax kala iibsiga ka sameyso serializable.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo waxaad ogaatay inaad hadda haysato nooc ka duwan oo SA quful ah - waxay la macno tahay serializable.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo sidaas daraaddeed waxaan haynaa nooc cusub oo quful ah oo la yiraahdo SArieadLock, kaas oo ah quful taxane ah oo kuu ogolaanaya inaad gasho taxane.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo weliba waxaad gelin kartaa tusmooyinka gaarka ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Shaxdan waxaan ku haynaa tilmaamo gaar ah.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Markaa haddii aan lambarka 2 ku dhejiyo halkan, markaa waxaan haystaa 2. Laakiin meesha ugu sarreysa, 2 kale ayaan gelinayaa. Waxaadna arki kartaa in 721 uu leeyahay quful gaar ah. Laakiin hadda 722 ayaa sugaya 721 si ay u dhamaystiraan hawshooda sababtoo ah ma geli karaan 2 ilaa ay ogaadaan waxa ku dhici doona 721.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Iyo haddii aan samayno ganacsi hoosaad.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Halkan waxaan ku haynaa 723.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo haddii aan kaydinno barta oo ka dibna cusbooneysiinno, ka dibna waxaan helnaa aqoonsi cusub oo macaamil ganacsi. Tani waa hab dhaqan kale oo aad u baahan tahay inaad ka warqabto. Haddii aan tan soo celino, markaa aqoonsiga wax kala iibsiga wuu baxayaa. 724 ayaa baxaya. Laakiin hadda waxaanu haynaa 725.

Haddaba maxaan isku dayayaa inaan halkan ku sameeyo? Waxaan isku dayayaa inaan ku tuso tusaalayaal qufulo aan caadi ahayn oo laga yaabo inaad hesho: hadday tahay quful taxane ah ama SAVEPOINT, kuwani waa noocyo kala duwan oo qufulo ah oo ka soo muuqan doona miiska qufulka.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Tani waa abuurista qufulo cad (cad), kuwaas oo leh pg_advisory_lock.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo waxaad arkaysaa in nooca xannibaadda uu ku qoran yahay talobixin ahaan. Oo halkan waxay ku leedahay "talobixin" casaan. Oo waxaad isku mar ku xannibi kartaa sidan oo kale pg_advisory_unlock.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Gebagebadiina, waxaan jeclaan lahaa inaan ku tuso hal shay oo kale oo maskaxda ku haya. Waxaan abuuri doonaa aragti kale. Laakiin waxaan ku biiri doonaa miiska pg_locks iyo miiska pg_stat_activity. Oo maxaan rabaa inaan tan sameeyo? Sababtoo ah tani waxay ii ogolaan doontaa inaan eego oo aan arko dhammaan fadhiyada hadda jira oo aan arko sida saxda ah nooca qufulka ay sugayaan. Waxayna tani aad u xiiso badan tahay markaan isu geyno miiska qufulka iyo miiska weydiinta.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo halkan waxaan ku abuurnaa pg_stat_view.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Oo safka mid ayaan u cusbooneysiineynaa. Anaguna waanu aragnaa 724. Dabadeed safkayaga ayaanu saddex ka dhigaynaa. Oo maxaad hadda ku aragtaa halkan? Kuwani waa codsiyo, tusaale ahaan, waxaad arkaysaa dhammaan liiska codsiyada ee ku qoran tiirka bidix. Kadibna dhanka midig waxaad ka arki kartaa xannibaadaha iyo waxa ay abuuraan. Waxayna kuu noqon kartaa mid aad u cad si aanad mar kasta dib ugu laaban fadhi kasta oo aad eegto haddii aad u baahan tahay inaad ku biirto iyo in kale. Way noo qabtaan.

Muuqaal kale oo aad waxtar u leh ayaa ah pg_blocking_pids. Waxay u badan tahay inaadan weligaa maqlin iyada. Maxay samaynaysaa? Waxay noo ogolaanaysaa inaan u sheegno in fadhigan 11740 nooca aqoonsiga nidaamka gaarka ah ee uu sugayo. Waxaadna arki kartaa in 11740 ay sugayaan 724. Oo 724 ayaa ugu sarreeya. 11306na waa aqoonsiga nidaamkaaga. Asal ahaan, shaqadani waxay soo martaa miiskaaga qufulka. Oo waan ogahay inay yara adag tahay, laakiin waxaad maareysaa inaad fahanto. Asal ahaan shaqadani waxay soo martaa miiska qufulka waxayna isku daydaa inay hesho meesha aqoonsiga nidaamkan lagu siinayo qufullada ay sugayso. Waxayna sidoo kale isku daydaa inay ogaato aqoonsiga habraaca ee habka sugaya qufulku leeyahay. Markaa waad socodsiin kartaa shaqadan pg_blocking_pids.

Tani waxay noqon kartaa mid aad waxtar u leh. Waxaan kaliya ku darnay kan nooca 9.6, marka sifadaani waa 5 sano oo kaliya, laakiin aad iyo aad bay faa'iido u leedahay. Waxayna la mid tahay codsiga labaad. Waxay si sax ah u muujinaysaa waxa aan u baahanahay inaan aragno.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Tani waa waxa aan rabay in aan kaala hadlo. Iyo sida aan filayo, waxaan isticmaalnay waqtigeena oo dhan sababtoo ah waxaa jiray sawirro badan. Sawiradana waa diyaar si loo soo dejiyo. Waxaan jeclaan lahaa inaan kaaga mahadceliyo joogitaankaaga halkan. Waxaan hubaa inaad ka heli doontaan inta shirka ka dhiman, aad baad u mahadsantahay!

Su'aalo:

Tusaale ahaan, haddii aan isku dayayo inaan cusbooneysiiyo safafka, iyo fadhiga labaad wuxuu isku dayayaa inuu tirtiro dhammaan miiska. Inta aan fahmayo, waa in uu jiraa wax la mid ah quful ujeedo. Ma waxaas oo kale ma ka jirtaa Postgres?

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Aan ku noqono bilowgii hore. Waxa laga yaabaa inaad xasuusato marka aad wax samayso, tusaale ahaan marka aad samayso SELECT, waxaanu bixinaa AccessShareLock. Waxayna tani ka hortagtaa in miiska la tuuro. Markaa haddii aad, tusaale ahaan, rabto inaad cusboonaysiiso safka miiska ku yaal ama aad tirtirto saf, markaa qof ma tirtiri karo miiska oo dhan isku mar sababtoo ah waxaad ku haysaa AccessShareLock miiska oo dhan iyo safka. Oo marka aad dhammayso, way tirtiri karaan. Laakin intaad si toos ah wax uga bedesho halkaas, ma awoodi doonaan inay sameeyaan.

Aan mar kale samayno. Aan u gudubno tusaalaha tirtirka. Oo waxaad arkaysaa sida uu u jiro quful gaar ah oo ku yaal safka ka sarreeya miiska oo dhan.

Tani waxay u ekaan doontaa quful gaar ah, sax?

Haa, way u egtahay. Waan fahmay waxaad ka hadlayso. Waxaad leedahay haddii aan sameeyo SELECT ka dib waxaan haystaa ShareExclusive ka dibna aan ka dhigo Row Exclusive, taasi dhib miyay noqotaa? Laakiin waxaa la yaab leh in tani aysan wax dhibaato ah keenin. Tani waxay u egtahay kordhinta heerka qufulka, laakiin asal ahaan waxaan haystaa quful ka hortagaya tirtirka. Oo hadda, markaan ka dhigo qufulkan mid aad u xoog badan, wuxuu weli ka hortagayaa tirtirka. Markaa ma aha sidii inaan kor u kacayo. Taasi waa, waxay ka hortagtay inay dhacdo markii ay ahayd heerka hoose sidoo kale, markaa markaan kor u qaado heerka waxay weli ka hortagtaa in miiska la tirtiro.

Waan fahmay waxaad ka hadlayso. Ma jiro kiis quful ah oo kor u qaadaya halkan, halkaas oo aad isku dayayso inaad ka tagto hal quful si aad u soo bandhigto mid ka xoog badan. Halkan waxa ay kordhisaa ka hortaggan guud ahaan guddiga, si aanay wax khilaaf ah u keenin. Laakiin waa su'aal wanaagsan. Aad baad ugu mahadsantahay inaad tan waydiisay!

Maxaan u baahanahay inaan sameyno si aan uga fogaano xaalad xirmo ah marka aan haysano kulamo badan, tiro badan oo isticmaaleyaal ah?

Postgres waxay si toos ah u ogaanaysaa xaaladaha xidhitaan. Oo waxay si toos ah u tirtiri doontaa mid ka mid ah fadhiyada. Sida kaliya ee looga badbaadi karo xannibaadda dhintay waa in la xannibo dadka si isku mid ah. Markaa marka aad eegto codsigaaga, inta badan sababta xidhidhiyeyaasha... Aynu qiyaasno in aan doonayo in aan xannibo laba shay oo kala duwan. Hal codsi ayaa qufulaya miiska 1, mid kalena waxa uu xidhaa 2, ka dibna shaxda 1. Sida ugu fudud ee aad uga fogaan karto qufulka waa in aad eegto codsigaga oo aad isku daydo in aad hubiso in qufulku u dhaco si isku mid ah dhammaan codsiyada. Waxayna tani inta badan meesha ka saartaa 80% dhibaatooyinka, sababtoo ah dhammaan noocyada dadka ayaa qora codsiyadan. Oo haddii aad u xannibto si isku mid ah, markaa ma la kulmid xaalad xannibaad ah.

Aad baad ugu mahadsantahay waxqabadkaaga! Waxaad ka hadashay vacuum buuxa oo, haddii aan si sax ah u fahmay, vacuum full wuxuu qalloociyaa nidaamka diiwaannada ee kaydinta kala duwan, si ay u hayaan diiwaannada hadda aan isbeddelin. Muxuu vacuum full u qaataa gelitaanka quful gaar ah maxayse uga hor imanaysaa hawlgallada qorista?

Taasi waa su'aal wanaagsan. Sababta ayaa ah in vacuum buuxa uu qaato miiska. Oo waxaan asal ahaan abuureynaa nooc cusub oo miiska ah. Miiskana wuxuu noqon doonaa mid cusub. Waxay soo baxday in tani ay noqon doonto nooc cusub oo miiska ah. Dhibaataduna waxay tahay marka aan sidan samayno, ma doonayno in dadku akhriyaan sababtoo ah waxaan u baahanahay iyaga si ay u arkaan miiska cusub. Oo sidaas daraaddeed tani waxay ku xidhan tahay su'aashii hore. Haddaynu isku mar akhrin lahayn, ma awoodno inaan dhaqaajinno oo dadka ku hagayo miis cusub. Waxaan u baahannahay inaan sugno qof walba inuu dhammeeyo akhrinta miiskan, sidaas darteed asal ahaan waa xaalad quful ah.
Waxaan leenahay waanu quful tan iyo bilowgii sababtoo ah waxaan ognahay in dhamaadka ugu danbeyn aan u baahan doono quful gaar ah si qof walba loogu wareejiyo nuqulka cusub. Markaa waxaan awood u yeelan karnaa in aan xalino tan. Oo waxaanu ku samaynaa habkan iyadoo la adeegsanayo tusmaynta isku mar. Laakiin tani aad bay u adag tahay in la sameeyo. Waxayna tani aad ula xidhiidhaa su'aashaadii hore ee qufulka gaarka ah.

Suurtagal ma tahay in lagu daro wakhtiga xidhitaanka ee Postgres? Gudaha Oracle, waxaan karaa, tusaale ahaan, ku qori karaa "dooro update" oo waxaan sugi 50 ilbiriqsi ka hor cusboonaysiinta. Way ku fiicnayd codsiga Laakiin gudaha Postgres, waxaan u baahanahay inaan isla markiiba sameeyo oo aanan sugin, ama sugin ilaa wakhti.

Haa, waxaad dooran kartaa wakhti ku-meel-gaar ah qufulkaaga, qufulkaaga. Waxa kale oo aad soo saari kartaa amar aan jid lahayn, kaas oo... haddii aanad isla markiiba heli karin qufulka. Sidaa darteed, ama wakhti quful ama wax kale oo kuu ogolaanaya inaad tan sameyso. Tan laguma sameeyo heerka isdhexgalka. Tan waxa loo sameeyaa doorsoome ahaan server-ka. Mararka qaarkood tan lama isticmaali karo.

Ma furi kartaa slide 75?

Haa.

Furitaanka Maareeyaha Qufulka Postgres. Bruce Momjian

Su'aashayduna waa tan soo socota. Waa maxay sababta ay labadaba hababka cusboonaysiinta u sugayaan 703?

Tanina waa su'aal weyn. Ma fahmin, jid ahaan, sababta Postgres ay tan u sameyso. Laakiin markii 703 la abuuray, waxay filaysay 702. Marka 704 iyo 705 soo baxaan, waxay u egtahay inaysan garanayn waxa ay filayaan sababtoo ah weli waxba ma jiraan. Postgres waxay sidan u sameysaa: marka aadan heli karin quful, waxay ku qortaa "Maxay tahay faa'iidada aad ku shaqeyneyso?", sababtoo ah waxaad horeyba u sugeysaa qof. Markaa waxaanu u ogolaan doonaa inuu hawada ku sii jiro, gabi ahaanba ma cusboonaysiin doono. Laakiin maxaa halkan ka dhacay? Isla markii 702 ay dhammeeyeen hawsha oo 703 ay heleen qufulkeeda, nidaamku dib ayuu u soo noqday. Waxayna tidhi hadda waxaan haynaa laba qof oo sugaya. Ka dibna aynu wada cusbooneysiinno. Oo aan tilmaanno in labaduba ay sugayaan.

Ma garanayo sababta uu Postgres sidan u sameeyo. Laakiin waxaa jirta dhibaato la yiraahdo f…. Waxay ila tahay in tani aysan ahayn erey Ruush ah. Tani waa marka qof kastaa uu sugayo hal qalcadood, xitaa haddii ay jiraan 20 maamul oo sugaya qalcadda. Oo si lama filaan ah ayay dhammaantood isku mar u wada tooseen. Oo qof kastaa wuxuu bilaabay inuu isku dayo inuu ka falceliyo. Laakiin nidaamku wuxuu dhigayaa in qof kastaa sugayo 703. Waayo way wada sugayaan, oo isla markaaba waanu wada safaynaa. Oo haddii codsi kale oo cusub uu soo baxo kaas oo la sameeyay tan ka dib, tusaale ahaan, 707, markaa waxaa jiri doona faaruq mar kale.

Oo waxay ila tahay in tan la sameeyay si aan u nidhaahno heerkan 702 ayaa sugaya 703, dhammaan kuwa ka dambeeyana ma geli doonaan goobtan. Laakiin sida ugu dhakhsaha badan kabalyeeri ugu horeysay ka tago, dhammaan kuwa sugayay waqtigaas ka hor update heli calaamad isku mid ah. Oo sidaas daraaddeed waxaan u maleynayaa in tan loo sameeyay si aan u habaysan karno si ay si sax ah u dalbadaan.

Had iyo jeer waxaan u eegi jiray tan inay tahay dhacdo la yaab leh. Sababtoo ah halkan, tusaale ahaan, kuma wada liis gareeyno iyaga. Laakiin waxay ila tahay in mar kasta oo aan siinno quful cusub, aan eegno dhammaan kuwa ku jira habka sugitaanka. Markaas ayaanu wada safnaa. Ka dibna mid kasta oo cusub oo soo gala wuxuu gala safka marka qofka ku xiga uu dhammeeyo hawsha. Su'aal aad u wanaagsan. Aad baad ugu mahadsantahay su'aashaada!

Waxay iila muuqataa inay aad uga macquulsan tahay marka 705 uu filayo 704.

Laakiin dhibka halkan ka jira waa kan soo socda. Farsamo ahaan, waxaad toosin kartaa mid ama mid kale. Oo sidaas daraaddeed mid ama mid kale ayaan toosin doonnaa. Laakiin maxaa ka dhacaya nidaamka? Waxaad arki kartaa sida 703 ee ugu sarreeya uu u xannibay aqoonsigiisa wax kala iibsiga. Tani waa sida Postgres u shaqeyso. Oo 703 waxaa xannibay aqoonsiga macaamil ganacsi, markaa haddii qof rabo inuu sugo, markaa waxay sugi doonaan 703. Iyo, nuxur ahaan, 703 ayaa dhammaystiray. Kaliya ka dib marka la dhammeeyo ayaa mid ka mid ah hababka soo toosaa. Mana garanayno waxa dhabta ah ee habkani noqon doono. Kadibna wax walba si tartiib tartiib ah ayaan u farsameyneynaa. Laakiin ma cadda habka marka hore la toosay, sababtoo ah waxay noqon kartaa mid ka mid ah hababkan. Asal ahaan, waxaanu haysanay jadwal u sheegaya inaan hadda kicin karno mid ka mid ah hababkan. Waxaan ku dooranaa mid si aan kala sooc lahayn. Markaa labadoodaba waxay u baahan yihiin in la xuso waayo midna waan toosin karnaa.

Dhibaataduna waa in aan haysano CP-infinity. Sidaa darteed, waxay u badan tahay inaan ka toosi karno kan dambe. Haddii, tusaale ahaan, aan toosinno kan dambe, waxaan sugi doonnaa kan hadda helay blockka, markaa ma go'aaminno cidda dhabta ah ee la toosin doono marka hore. Waxaan si fudud u abuurnaa xaalad noocaas ah, nidaamkuna wuxuu ku toosin doonaa si aan kala sooc lahayn.

Waxaa jira maqaallo ku saabsan qufulka Egor Rogov. Fiiri, sidoo kale waa kuwo xiiso leh oo faa'iido leh. Mawduuca, dabcan, waa mid aad u adag. Aad baad u mahadsantahay, Bruce!

Source: www.habr.com

Add a comment