د پوسټګریس لاک مدیر خلاصول. بروس موجیان

د بروس موجیان د 2020 خبرو نقل "د پوسټګریس لاک مدیر خلاصول".

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

(یادونه: د سلایډونو ټولې SQL پوښتنې له دې لینک څخه ترلاسه کیدی شي: http://momjian.us/main/writings/pgsql/locking.sql)

سلام! دا ښه خبره ده چې دلته بیا په روسیه کې یم. زه بخښنه غواړم چې زه نشم کولی تیر کال راشي، مګر سږکال ایوان او زه لوی پلانونه لرم. زه هیله لرم چې دلته ډیر ځله راشم. زه روسیې ته د راتګ سره مینه لرم. زه به د Tyumen، Tver څخه لیدنه وکړم. زه ډیر خوښ یم چې زه به وکولی شم د دې ښارونو څخه لیدنه وکړم.

زما نوم بروس موجیان دی. زه په EnterpriseDB کې کار کوم او له 23 کلونو راهیسې د پوسټګریس سره کار کوم. زه په فلاډیلفیا، متحده ایالاتو کې ژوند کوم. زه په کال کې شاوخوا 90 ورځې سفر کوم. او زه شاوخوا 40 کنفرانسونو کې ګډون کوم. زما ویب پاڼه، کوم چې هغه سلایډونه لري چې زه به یې اوس تاسو ته وښیم. له همدې امله، د کنفرانس وروسته تاسو کولی شئ دا زما د شخصي ویب پاڼې څخه ډاونلوډ کړئ. دا شاوخوا 30 پریزنټشنونه هم لري. دلته ویډیوګانې او د بلاګ د ننوتلو لوی شمیر هم شتون لري، له 500 څخه ډیر. دا یو مناسب معلوماتي سرچینه ده. او که تاسو د دې موادو سره علاقه لرئ، نو زه تاسو ته بلنه درکوم چې دا وکاروئ.

زه یو ښوونکی وم، مخکې له دې چې ما د پوسټګریس سره کار پیل کړ. او زه ډیر خوشحاله یم چې زه به اوس تاسو ته د هغه څه په اړه چې زه یې تاسو ته ووایم. دا زما یو له خورا زړه پورې پریزنټشنونو څخه دی. او دا پریزنټیشن 110 سلایډونه لري. موږ به په ساده شیانو خبرې پیل کړو، او په پای کې به راپور نور هم پیچلی شي، او خورا پیچلي به شي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دا یو ډیر ناخوښه خبرې دي. بلاک کول ترټولو مشهوره موضوع نه ده. موږ غواړو چې دا په کوم ځای کې ورک شي. دا د غاښونو ډاکټر ته د تللو په څیر دی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

  1. لاک کول د ډیری خلکو لپاره ستونزه ده څوک چې په ډیټابیسونو کې کار کوي او په ورته وخت کې ډیری پروسې پرمخ وړي. دوی بلاک کولو ته اړتیا لري. دا دی، نن به زه تاسو ته د بلاک کولو په اړه اساسي پوهه درکړم.
  2. د راکړې ورکړې IDs. دا د پریزنټشن یوه نه ستړي کوونکې برخه ده، مګر دوی باید پوه شي.
  3. بیا به موږ د بلاک کولو ډولونو په اړه وغږیږو. دا په کافي اندازه میخانیکي برخه ده.
  4. او لاندې به موږ د بلاک کولو ځینې مثالونه وړاندې کړو. او دا به خورا ستونزمن وي چې پوه شي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

راځئ چې د بندولو په اړه خبرې وکړو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

زموږ اصطلاحات خورا پیچلي دي. ستاسو څخه څو تنه پوهیږي چې دا لاره له کوم ځای څخه راځي؟ دوه کسان. دا د لوی غار ساہسک په نوم د لوبې څخه دی. دا په 80s کې د متن پراساس کمپیوټر لوبه وه ، زما په اند. هلته تاسو باید یو غار ته لاړ شئ، یو لابراتوار ته لاړ شئ، او متن بدل شوی، مګر مینځپانګه نږدې هر وخت ورته وه. همداسې مې دا لوبه په یاد ده.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او دلته موږ د لاکونو نوم ګورو چې موږ ته د اوریکل څخه راغلی. موږ یې کاروو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دلته موږ هغه شرایط ګورو چې ما ګډوډوي. د مثال په توګه، شریکول تازه معلومات ECXLUSIVE. بل شریک کړئ RAW ECXLUSIVE. د ریښتیني کیدو لپاره ، دا نومونه خورا روښانه ندي. موږ به هڅه وکړو چې دوی په ډیر تفصیل سره په پام کې ونیسو. ځینې ​​یې د "شریک" کلمه لري، چې معنی یې جلا کول دي. ځینې ​​یې د "ځانګړي" کلمه لري. ځینې ​​دا دواړه کلمې لري. زه غواړم له دې سره پیل وکړم چې دا قفل څنګه کار کوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او د "لاسرسي" کلمه هم ډیره مهمه ده. او د "قطار" کلمې یو تار دی. دا، د لاسرسي ویش، د قطار ویش.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

بله مسله چې په پوسټګریس کې پوهیدلو ته اړتیا لري، کوم چې له بده مرغه زه به په خپلو خبرو کې پوښښ ونه کړم، MVCC دی. زه په خپل ویب پاڼه کې د دې موضوع په اړه جلا پریزنټشن لرم. او که تاسو فکر کوئ چې دا پریزنټشن سخت دی، MVCC شاید زما ترټولو سخت وي. او که تاسو علاقه لرئ، تاسو کولی شئ دا په ویب پاڼه کې وګورئ. تاسو کولی شئ ویډیو وګورئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

بل شی چې موږ یې باید پوه شو د لیږد IDs دي. ډیری لیږدونه د ځانګړي پیژندونکي پرته کار نشي کولی. او دلته موږ یو تشریح لرو چې معامله څه ده. پوسټګریس دوه د لیږد شمیرې سیسټمونه لري. زه پوهیږم چې دا خورا ښکلی حل ندی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دا هم په یاد ولرئ چې سلایډونه به پوهیدل خورا ستونزمن وي ، نو هغه څه چې په سور کې روښانه شوي هغه څه دي چې تاسو ورته اړتیا لرئ پاملرنه وکړئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

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

راځئ چې وګورو. د راکړې ورکړې شمیره په سور کې روښانه شوې. د SELECT pg_back فعالیت دلته ښودل شوی. دا زما لیږد او د لیږد ID بیرته راګرځوي.

یو بل شی، که تاسو دا پریزنټشن خوښ کړئ او غواړئ چې په خپل ډیټابیس کې یې چل کړئ، نو تاسو کولی شئ په ګلابي کې دې لینک ته لاړ شئ او د دې پریزنټشن لپاره SQL ډاونلوډ کړئ. او تاسو کولی شئ دا په ساده ډول په خپل PSQL کې پرمخ وړئ او ټول پریزنټشن به سمدلاسه ستاسو په سکرین کې وي. دا به ګلونه نه لري، مګر لږترلږه موږ یې لیدلی شو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

پدې حالت کې موږ د لیږد ID ګورو. دا هغه شمیره ده چې موږ ورته ټاکلې. او په Postgres کې د لیږد بل ډول ID شتون لري، کوم چې د مجازی لیږد ID په نوم یادیږي

او موږ باید پدې پوه شو. دا خورا مهم دی، که نه نو موږ به په پوسټګریس کې د تالاشۍ په اړه پوه نشو.

د مجازی لیږد ID د لیږد ID دی چې دوامداره ارزښتونه نلري. د مثال په توګه، که زه د SELECT کمانډ پرمخ وړم، نو زه به ډیری احتمال ډیټابیس بدل نه کړم، زه به هیڅ شی بند نه کړم. نو کله چې موږ یو ساده انتخاب چلوو، موږ دا لیږد یو دوامداره ID نه ورکوو. موږ هغې ته یوازې یو مجازی ID ورکوو.

او دا د Postgres فعالیت ښه کوي، د پاکولو وړتیاوې ښه کوي، نو د مجازی لیږد ID دوه شمیرې لري. د سلیش څخه مخکې لومړی شمیره د شاتنۍ ID دی. او په ښي خوا کې موږ یوازې یو کاونټر ګورو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

له همدې امله، که زه یوه غوښتنه پرمخ وړم، دا وايي چې د شالید ID 2 دی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او که زه د داسې معاملو لړۍ پرمخ وړم، نو موږ ګورو چې کاونټر هرکله چې زه یوه پوښتنه پرمخ وړم زیاتیږي. د مثال په توګه، کله چې زه پوښتنه 2/10، 2/11، 2/12، او داسې نور پرمخ وړم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

په یاد ولرئ چې دلته دوه کالمونه شتون لري. په ښي خوا کې موږ د مجازی لیږد ID - 2/12 ګورو. او په ښي خوا کې موږ د دایمي لیږد ID لرو. او دا میدان خالي دی. او دا معامله ډیټابیس نه بدلوي. نو زه دا د دایمي لیږد ID نه ورکوم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

هرڅومره ژر چې زه د تحلیل کمانډ ((ANALYZE)) پرمخ وړم ، ورته پوښتنه ماته د دایمي لیږد ID راکوي. وګورئ چې دا زموږ لپاره څنګه بدل شوی. ما مخکې دا ID نه درلود، مګر اوس زه لرم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

نو دلته بله غوښتنه ده، بله معامله. د مجازی لیږد شمیره 2/13 ده. او که زه د دوامداره لیږد ID غوښتنه وکړم، نو کله چې زه پوښتنه پرمخ وړم، زه به یې ترلاسه کړم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

نو، یو ځل بیا. موږ د مجازی لیږد ID او د دوامداره لیږد ID لرو. د پوسټګریس چلند د پوهیدو لپاره یوازې دا ټکی درک کړئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

موږ دریمې برخې ته ځو. دلته به موږ په ساده ډول په Postgres کې د تالاشۍ مختلف ډولونو ته لاړ شو. دا ډېره په زړه پورې نه ده. وروستۍ برخه به ډیره په زړه پورې وي. مګر موږ باید بنسټیز شیان په پام کې ونیسو، ځکه چې که نه نو موږ به نه پوهیږو چې راتلونکی به څه وي.

موږ به د دې برخې له لارې لاړ شو، موږ به هر ډول تالاش وګورو. او زه به تاسو ته مثالونه وښیم چې دوی څنګه نصب شوي ، دوی څنګه کار کوي ، زه به تاسو ته ځینې پوښتنې وښیم چې تاسو یې وکاروئ ترڅو وګورئ چې په پوسټګریس کې لاک کول څنګه کار کوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

د پوښتنې رامینځته کولو لپاره او وګورئ چې په پوسټګریس کې څه پیښیږي ، موږ اړتیا لرو د سیسټم لید کې پوښتنه صادره کړو. په دې حالت کې، pg_lock په سور کې روښانه شوی. Pg_lock د سیسټم جدول دی چې موږ ته وایی چې په پوسټګریس کې اوس مهال کوم لاکونه کارول کیږي.

په هرصورت، دا زما لپاره خورا ستونزمن دی چې تاسو ته پخپله pg_lock وښایئ ځکه چې دا خورا پیچلی دی. نو ما یو لید رامینځته کړ چې pg_locks ښیې. او دا زما لپاره یو څه کار هم کوي چې ما ته اجازه راکوي چې ښه پوه شم. دا زما لاکونه، زما خپل سیشن، او نور خارجوي. دا یوازې معیاري SQL دی او دا تاسو ته اجازه درکوي چې تاسو ته ښه وښایئ چې څه روان دي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

بله ستونزه دا ده چې دا لید خورا پراخ دی، نو زه باید دویم یو جوړ کړم - lockview2.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان او دا ماته د میز څخه نور کالمونه ښیې. او بل هغه چې ماته پاتې کالمونه ښیې. دا خورا پیچلی دی، نو ما هڅه وکړه چې دا د امکان تر حده ساده وړاندې کړم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

نو موږ د لاک ډیمو په نوم یو میز جوړ کړ. او موږ هلته یوه کرښه جوړه کړه. دا زموږ د نمونې میز دی. او موږ به یوازې تاسو ته د تالاشۍ مثالونو ښودلو لپاره برخې رامینځته کړو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

نو، یو قطار، یو کالم. لومړی ډول بند د ACCESS SHARE په نوم یادیږي. دا ترټولو لږ محدودیت بلاک دی. دا پدې مانا ده چې دا په عملي توګه د نورو قفلونو سره ټکر نه کوي.

او که موږ غواړو په واضح ډول تالا تعریف کړو، موږ د "لاک میز" کمانډ چلوو. او دا به په ښکاره ډول بلاک کړي ، د بیلګې په توګه د لاسرسي شریکولو حالت کې موږ د لاک میز پیل کوو. او که زه په شالید کې PSQL پرمخ وړم ، نو زه د خپلې لومړۍ ناستې څخه دوهمه ناسته پدې ډول پیل کوم. یعنی زه به دلته څه وکړم؟ زه بلې ناستې ته لاړم او ورته ووایم "ما ته د دې غوښتنې لپاره د تالاش لید وښایاست." او دلته زه په دې جدول کې AccessShareLock لرم. دا دقیقا هغه څه دي چې ما غوښتنه کړې. او وايي چې بلاک ورته ټاکل شوی دی. ډیر ساده.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

نور، که موږ دویم کالم ته وګورو، نو هلته هیڅ شی نشته. دوی خالي دي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او که زه د "SELECT" کمانډ پرمخ وړم، نو دا د AccessShareLock غوښتنه کولو لپاره ښکاره (واضح) لاره ده. نو زه خپل میز خوشې کوم او پوښتنه پرمخ وړم او پوښتنه ډیری قطارونه راګرځوي. او په یوه کرښه کې موږ AccessShareLock ګورو. په دې توګه، SELECT په میز کې AccessShareLock غږوي. او دا په حقیقت کې د هیڅ شی سره ټکر نه کوي ځکه چې دا د ټیټې کچې تالا دی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

څه که زه یو SELECT پرمخ وړم او درې مختلف میزونه ولرم؟ پخوا زه یوازې یو میز پرمخ وړم، اوس زه درې چلوم: pg_class، pg_namespace او pg_attribute.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او اوس کله چې زه پوښتنې ته ګورم، زه په دریو جدولونو کې 9 AccessShareLocks ګورم. ولې؟ درې میزونه په نیلي کې روښانه شوي: pg_attribute، pg_class، pg_namespace. مګر تاسو دا هم لیدلی شئ چې ټول شاخصونه چې د دې جدولونو له لارې تعریف شوي هم د AccessShareLock لري.

او دا یو تالا دی چې په عملي توګه د نورو سره شخړه نه کوي. او ټول هغه څه چې دا کوي په ساده ډول موږ د میز له تنظیم کولو څخه مخنیوی کوو پداسې حال کې چې موږ یې غوره کوو. دا معنی لري. دا دی، که موږ یو میز وټاکو، دا په هغه وخت کې ورک شي، نو دا غلط دی، نو AccessShare د ټیټې کچې لاک دی چې موږ ته وایي "دا میز مه پریږدئ پداسې حال کې چې زه کار کوم". په اصل کې، دا ټول هغه کوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

د قطار شریکول - دا لاک یو څه توپیر لري.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

راځئ چې یو مثال واخلو. په انفرادي ډول د هر قطار بندولو لپاره د ROW SHARE میتود غوره کړئ. پدې توګه هیڅوک نشي کولی دوی حذف کړي یا یې بدل کړي پداسې حال کې چې موږ یې ګورو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیاننو د SHARE LOCK څه کوي؟ موږ ګورو چې د لیږد ID د SELECT لپاره 681 دی. او دا په زړه پورې ده. دلته څه وشول؟ لومړی ځل چې موږ ګورو شمیره د "لاک" ساحه کې ده. موږ د راکړې ورکړې ID اخلو او دا وايي چې دا په ځانګړي حالت کې بندوي. ټول دا کوي دا وايي زه یو قطار لرم چې په تخنیکي ډول په میز کې یو ځای تړل شوی. خو هغه په ​​دقیقه توګه دا ونه ویل چې چیرته دی. موږ به دا لږ وروسته په تفصیل سره وګورو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دلته موږ وایو چې قفل زموږ لخوا کارول کیږي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

نو، یو ځانګړی قفل په واضح ډول وايي چې دا ځانګړی دی. او همدارنګه که تاسو پدې جدول کې یو قطار حذف کړئ ، نو دا به هغه څه وي ، لکه څنګه چې تاسو لیدلی شئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

SHARE EXCLUSIVE یو اوږد بند دی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دا د (ANALYZE) شنونکي کمانډ دی چې کارول کیږي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

شریک لاک - تاسو کولی شئ په څرګند ډول د شریکولو حالت کې لاک کړئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

تاسو کولی شئ یو ځانګړی شاخص هم جوړ کړئ. او هلته تاسو کولی شئ د SHARE LOCK وګورئ، کوم چې د دوی برخه ده. او دا میز تالاشي کوي او په هغې کې د SHARE LOCK ایږدي.

د ډیفالټ په توګه، په میز کې د SHARE LOCK معنی دا ده چې نور خلک کولی شي میز ولولي، مګر هیڅوک یې نشي بدلولی. او دا هغه څه دي چې واقع کیږي کله چې تاسو یو ځانګړی شاخص جوړ کړئ.

که زه یو ځانګړی واحد شاخص رامینځته کړم ، نو زه به د تالاشۍ مختلف ډول ولرم ځکه چې لکه څنګه چې تاسو په یاد ولرئ ، په ورته وخت کې د شاخصونو کارول د تالاشۍ اړتیا کموي. او که زه یو نورمال قفل وکاروم ، یو نورمال شاخص ، نو زه به پدې توګه د میز شاخص ته د لیکلو مخه ونیسم کله چې دا رامینځته کیږي. که زه په ورته وخت کې شاخص وکاروم، نو زه اړتیا لرم چې یو بل ډول تالاشۍ وکاروم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

ځانګړی قطار شریک کړئ - بیا دا په واضح ډول تنظیم کیدی شي (په واضح ډول).

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

یا موږ کولی شو یو قاعده رامینځته کړو، د بیلګې په توګه، یو ځانګړی قضیه واخلئ په کوم کې چې دا به وکارول شي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

د ځانګړي تالاشۍ معنی دا ده چې بل څوک نشي کولی میز بدل کړي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دلته موږ د تالاشۍ مختلف ډولونه ګورو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

د بېلګې په توګه، د بندولو امر دی. د مثال په توګه، که تاسو کوئ CLUSTER tableنو د دې معنی به دا وي چې هیڅوک به ونه شي لیکلی. او دا نه یوازې پخپله میز لاک کوي ، بلکه شاخصونه هم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دا د لاسرسي ځانګړي بلاک کولو دویمه پاڼه ده ، چیرې چې موږ واقعیا ګورو چې دا په جدول کې څه بلاک کوي. دا د انفرادي میز قطارونه بندوي، کوم چې خورا په زړه پورې دی.

دا ټول هغه لومړني معلومات دي چې زه یې غواړم. موږ د لاکونو په اړه خبرې وکړې، د لیږد IDs په اړه، موږ د مجازی لیږد IDs په اړه خبرې وکړې، د دایمي لیږد IDs په اړه.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او اوس به موږ د بلاک کولو ځینې مثالونو ته لاړ شو. دا تر ټولو په زړه پورې برخه ده. موږ به په زړه پورې قضیې وګورو. او پدې پریزنټشن کې زما هدف دا دی چې تاسو ته ښه پوهه درکړي چې پوسټګریس واقعیا څه کوي کله چې دا د ځینې شیانو د بندولو هڅه کوي. زما په اند هغه د برخو په بندولو کې خورا ښه دی.

راځئ چې ځینې ځانګړي مثالونه وګورو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

موږ به په میز کې د میزونو او یو قطار سره پیل وکړو. کله چې زه یو څه داخل کړم زه ExclusiveLock، د لیږد ID او ExclusiveLock په میز کې ښودل شوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

که زه دوه نور قطارونه دننه کړم نو څه به پیښ شي؟ او اوس زموږ میز درې قطارونه لري. او ما یو قطار داخل کړ او دا یې د محصول په توګه ترلاسه کړ. او که زه دوه نور قطارونه دننه کړم، د دې په اړه څه عجيب دي؟ دلته یو عجیب شی دی ځکه چې ما په دې میز کې درې قطارونه اضافه کړي، مګر زه لاهم په میز کې دوه قطارونه لرم. او دا په اصل کې د Postgres بنسټیز چلند دی.

ډیری خلک فکر کوي چې که تاسو په ډیټابیس کې 100 قطارونه لاک کړئ، نو تاسو به د 100 لاک ننوتلو جوړولو ته اړتیا ولرئ. که زه په یوځل کې 1 قطارونه بند کړم، نو زه به ورته 000 پوښتنو ته اړتیا ولرم. او که زه د بلاک کولو لپاره یو ملیون یا ملیارد ته اړتیا لرم. مګر که موږ دا کار وکړو، دا به ډیر ښه کار ونکړي. که تاسو داسې سیسټم کارولی وي چې د هر انفرادي قطار لپاره د بندولو ننوتل رامینځته کوي، نو تاسو لیدلی شئ چې دا پیچلې ده. ځکه چې تاسو اړتیا لرئ سمدلاسه د تالاشۍ میز تعریف کړئ چې کولی شي تیر شي ، مګر پوسټګریس دا کار نه کوي.

او هغه څه چې د دې سلایډ په اړه واقعیا مهم دي هغه دا دي چې دا په څرګنده توګه ښیې چې یو بل سیسټم شتون لري چې د MVCC دننه چلیږي چې انفرادي قطارونه بندوي. نو کله چې تاسو په ملیاردونو قطارونه لاک کړئ ، پوسټګریس د ملیارد جلا لاک کولو کمانډونه نه رامینځته کوي. او دا د تولید په برخه کې خورا ښه اغیزه لري.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

د تازه کولو په اړه څه؟ زه اوس قطار تازه کوم، او تاسو لیدلی شئ چې دا په یوځل کې دوه مختلف عملیات ترسره کړي. دا په ورته وخت کې میز بند کړ، مګر دا شاخص هم بند کړ. او هغه اړتیا درلوده چې شاخص بند کړي ځکه چې پدې میز کې ځانګړي محدودیتونه شتون لري. او موږ غواړو ډاډ ترلاسه کړو چې هیڅوک یې نه بدلوي، نو موږ یې بندوو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

څه کیږي که زه غواړم دوه قطارونه تازه کړم؟ او موږ ګورو چې هغه ورته چلند کوي. موږ دوه چنده ډیری تازه معلومات ترسره کوو، مګر دقیقا د لاک لاینونو ورته شمیر.

که تاسو حیران یاست چې پوسټګریس دا څنګه کوي، تاسو به د MVCC په اړه زما خبرو ته غوږ ونیسئ ترڅو پوه شئ چې څنګه پوسټګریس په داخلي توګه دا لینونه په نښه کوي چې دا بدلوي. او پوسټګریس یوه لاره لري په کوم کې چې دا دا کوي ، مګر دا د میز تالاشۍ کچه نه کوي ، دا په ټیټ او خورا مؤثره کچه کوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

که زه غواړم یو څه حذف کړم؟ که زه حذف کړم ، د مثال په توګه ، یو قطار او زه لاهم زما دوه بلاکینګ ان پټونه لرم ، او حتی که زه غواړم دا ټول حذف کړم ، دوی لاهم شتون لري.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او، د مثال په توګه، زه غواړم 1 لاینونه دننه کړم، او بیا یا 000 لینونه حذف یا اضافه کړم، بیا هغه انفرادي کرښې چې زه یې اضافه کړم یا بدل کړم، دلته ثبت شوي ندي. دوی پخپله لړۍ کې په ټیټه کچه لیکل شوي. او د MVCC وینا په جریان کې ما پدې اړه په تفصیل سره خبرې وکړې. مګر دا خورا مهم دی کله چې تاسو تالاشۍ تحلیل کوئ ترڅو ډاډ ترلاسه کړئ چې تاسو د میز په کچه تالاشۍ یاست او دا چې تاسو نه ګورئ چې دلته انفرادي قطارونه څنګه ثبت کیږي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

د ښکاره بندولو په اړه څه؟

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

که زه په ریفریش کلیک وکړم، زه دوه قطارونه بندوم. او که زه دا ټول وټاکم او "هرچیرې تازه کړئ" کلیک وکړئ، بیا زه لاهم د بلاک کولو دوه ریکارډونه لرم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

موږ د هر انفرادي قطار لپاره جلا ریکارډونه نه جوړوو. ځکه چې بیا تولید کمیږي، کیدای شي ډیر څه وي. او موږ ممکن ځان په یو ناخوښ حالت کې ومومئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او ورته شی، که موږ شریک کړو، موږ کولی شو دا ټول 30 ځله ترسره کړو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

موږ خپل میز بیرته راګرځوو، هرڅه حذف کړئ، بیا یو قطار بیا دننه کړئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

بل چلند چې تاسو په پوسټګریس کې ګورئ چې خورا ښه پیژندل شوی او مطلوب چلند دی دا دی چې تاسو کولی شئ تازه یا انتخاب ترسره کړئ. او تاسو کولی شئ دا په ورته وخت کې ترسره کړئ. او انتخاب د اپډیټ بلاک نه کوي او په مخالف لوري کې ورته شی. موږ لوستونکي ته وایو چې د لیکوال مخه نه نیسي، او لیکوال د لوستونکي مخه نه نیسي.

زه به تاسو ته د دې یو مثال وښیم. زه به اوس یو انتخاب وکړم. بیا به موږ INSERT ترسره کړو. او بیا تاسو لیدلی شئ - 694. تاسو کولی شئ د لیږد ID وګورئ چې دا داخله یې ترسره کړې. او دا څنګه کار کوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او که زه اوس زما شاته ID وګورم ، دا اوس 695 دی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او زه کولی شم 695 زما په میز کې څرګند شي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او که زه دلته د دې په څیر تازه کړم نو بیا زه یو بل قضیه ترلاسه کوم. په دې حالت کې، 695 یو ځانګړی قلف دی، او تازه کول ورته چلند لري، مګر د دوی ترمنځ هیڅ شخړه شتون نلري، کوم چې خورا غیر معمولي دی.

او تاسو لیدلی شئ چې په پورتنۍ برخه کې دا ShareLock دی، او په ښکته کې دا ExclusiveLock دی. او دواړه معاملې عملي شوې.

او تاسو اړتیا لرئ په MVCC کې زما خبرو ته غوږ ونیسئ ترڅو پوه شئ چې دا څنګه پیښیږي. مګر دا یو مثال دی چې تاسو کولی شئ دا په ورته وخت کې ترسره کړئ، د بیلګې په توګه په ورته وخت کې یو انتخاب او یو تازه کول.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

راځئ چې بیا تنظیم کړو او یو بل عملیات ترسره کړو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

که تاسو هڅه وکړئ په ورته قطار کې په ورته وخت کې دوه تازه معلومات پرمخ وړئ ، نو دا به بند شي. او په یاد ولرئ، ما وویل چې لوستونکی د لیکوال مخه نه نیسي، او لیکوال د لوستونکي مخه نه نیسي، مګر یو لیکوال د بل لیکوال مخه نیسي. دا دی، موږ نشو کولی دوه کسان په ورته وخت کې ورته قطار تازه کړو. تاسو باید انتظار وکړئ تر هغه چې یو یې پای ته ورسیږي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او د دې روښانه کولو لپاره ، زه به د لاک ډیمو میز ته وګورم. او موږ به په یوه قطار کې وګورو. د هرې معاملې 698.

موږ دا 2 ته تازه کړی. 699 لومړی تازه دی. او دا بریالۍ وه یا دا په یوه پاتې معامله کې ده او زموږ تایید یا لغوه کولو ته انتظار باسي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

مګر بل څه وګورئ - 2/51 زموږ لومړۍ معامله ده، زموږ لومړۍ ناسته. 3/112 دوهمه غوښتنه ده چې له پورتنۍ څخه راغلې وه چې ارزښت یې 3 ته بدل کړ. او که تاسو ګورئ نو پورتنۍ برخه یې پخپله بنده کړې چې 699 ده. مګر 3/112 قفل نه دی ورکړی. د لاک_موډ کالم هغه څه ته وايي چې ورته انتظار دی. دا د 699 تمه لري. او که تاسو وګورئ چې 699 چیرته دی، دا لوړ دی. او لومړۍ غونډه یې څه وکړه؟ هغې په خپل لیږد ID کې یو ځانګړی تالا جوړ کړ. پوسټګریس دا څنګه کوي. دا د خپل لیږد ID بلاک کوي. او که تاسو غواړئ د یو چا تایید یا لغوه کولو لپاره انتظار وکړئ ، نو تاسو اړتیا لرئ انتظار وکړئ پداسې حال کې چې د لیږد پاتې معامله شتون لري. او له همدې امله موږ کولی شو یو عجیب کرښه وګورو.

راځئ چې بیا وګورو. په ښي خوا کې موږ زموږ د پروسس ID ګورو. په دوهم کالم کې موږ زموږ د مجازی لیږد ID ګورو، او په دریم کې موږ lock_type ګورو. دا څه مانا لري؟ په لازمي ډول هغه څه چې دا وايي دا د لیږد ID بندوي. مګر په پام کې ونیسئ چې په ښکته کې ټول قطارونه اړیکه وايي. او نو تاسو په میز کې دوه ډوله تالاشۍ لرئ. د اړیکو قفل شتون لري. او بیا دلته د ټرانزیکایډ بلاک کول شتون لري ، چیرې چې تاسو پخپله بلاک کوئ ، کوم چې واقعیا هغه څه پیښیږي چې په لومړي قطار یا خورا ښکته کې پیښیږي ، چیرې چې لیږد دی ، چیرې چې موږ د دې عملیاتو پای ته رسیدو لپاره 699 ته انتظار کوو.

زه به وګورم چې دلته څه پیښیږي. او دلته دوه شیان په ورته وخت کې پیښیږي. تاسو په لومړي قطار کې د لیږد ID لاک ته ګورئ چې پخپله لاک کیږي. او هغه د خلکو د انتظار کولو لپاره ځان بندوي.

که تاسو شپږمه کرښه وګورئ، دا د لومړي په څیر ورته ننوت دی. او له همدې امله 6 معامله بنده شوې ده. 699 د ځان تالاشي هم ده. او بیا په لاندې قطار کې تاسو به وګورئ چې موږ 700 ته انتظار یو ترڅو خپل عملیات پای ته ورسوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او په lock_type کې، تاسو شمیرې ګورئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

تاسو کولی شئ وګورئ چې دا 0/10 دی. او دا د پاڼې شمیره ده، او د دې ځانګړي قطار آفسیټ هم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او تاسو ګورئ چې دا 0/11 کیږي کله چې موږ تازه کوو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

مګر په حقیقت کې دا 0/10 دی، ځکه چې د دې عملیاتو لپاره انتظار شتون لري. موږ فرصت لرو چې وګورو چې دا هغه لړۍ ده چې زه یې تایید ته انتظار کوم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

یوځل چې موږ دا تایید کړو او ژمنې یې فشار راوړو، او کله چې تازه معلومات پای ته ورسیږي، دا هغه څه دي چې موږ بیا ترلاسه کوو. د راکړې ورکړې 700 یوازینی قفل دی، دا د بل چا لپاره انتظار نه کوي ځکه چې دا ژمنه شوې وه. دا په ساده ډول د لیږد بشپړیدو ته انتظار باسي. یوځل چې 699 منډې وکړي، موږ نور هیڅ شی ته انتظار نه کوو. او اوس راکړه ورکړه 700 وايي چې هرڅه سم دي، دا ټول هغه قفلونه لري چې ورته اړتیا لري په ټولو اجازه ورکړل شوي میزونو کې.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او د دې لپاره چې دا ټول شیان نور هم پیچلي کړي، موږ یو بل نظر رامینځته کوو، کوم چې دا ځل به موږ ته درجه بندي چمتو کړي. زه تمه نه لرم چې تاسو په دې غوښتنه پوه شئ. مګر دا به موږ ته روښانه لید راکړي چې څه پیښیږي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دا یو تکراري نظر دی چې بله برخه هم لري. او بیا دا هرڅه بیرته یوځای راوړي. راځئ چې دا وکاروو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

څه شی که موږ درې یوځل تازه معلومات وکړو او ووایو چې قطار اوس درې دی. او موږ به له 3 څخه 4 ته بدل کړو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او دلته موږ ګورو 4. او د لیږد ID 702.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او بیا به زه له 4 څخه 5 ته بدل کړم. او له 5 څخه 6، او 6 ته 7. او زه به یو شمیر خلک په لیکه کې واچوم چې د دې یوې معاملې پای ته رسیدو ته به انتظار باسي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او هر څه روښانه کیږي. لومړی قطار څه شی دی؟ دا 702 دی. دا د راکړې ورکړې ID دی چې په اصل کې دا ارزښت ټاکل شوی. زما په ورکړل شوي کالم کې څه لیکل شوي؟ زه نښې لرم f. دا زما تازه معلومات دي چې (5, 6, 7) نشي تصویب کیدی ځکه چې موږ د لیږد ID 702 پای ته رسیدو ته انتظار یو. هلته موږ د لیږد ID بلاک کول لرو. او دا د 5 لیږد ID لاکونو پایله لري.

او که تاسو په 704 کې وګورئ، په 705 کې، هیڅ شی نه دی لیکل شوی، ځکه چې دوی نه پوهیږي چې څه تیریږي. دوی په ساده ډول لیکي چې دوی نه پوهیږي چې څه پیښیږي. او دوی به یوازې ویده شي ځکه چې دوی د یو چا د پای ته رسیدو په تمه دي او کله چې د قطارونو بدلولو فرصت وي ویښ شي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دا هغه څه دي چې داسې ښکاري. دا روښانه ده چې دوی ټول د 12مې کرښې ته انتظار باسي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دا هغه څه دي چې موږ دلته ولیدل. دلته 0/12 دی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

نو یوځل چې لومړی معامله تصویب شي ، تاسو کولی شئ دلته وګورئ چې درجه بندي څنګه کار کوي. او اوس هر څه روښانه کیږي. دوی ټول پاک شي. او دوی واقعیا لاهم انتظار کوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دلته څه پیښیږي. 702 ژمنې کوي. او اوس 703 دا قطار لاک ترلاسه کوي، او بیا 704 د ژمنې لپاره د 703 انتظار پیل کوي. او 705 دې ته هم انتظار باسي. او کله چې دا ټول بشپړ شي، دوی ځانونه پاکوي. او زه غواړم په ګوته کړم چې هرڅوک په لیکه کې دي. او دا د ترافیک جام حالت ته ورته دی کله چې هرڅوک د لومړي موټر په تمه وي. لومړی موټر ودریږي او هرڅوک په اوږده لیکه کې ولاړ وي. بیا دا حرکت کوي، بیا راتلونکی موټر کولی شي مخکې لاړ شي او خپل بلاک ترلاسه کړي، او داسې نور.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او که دا تاسو ته کافي پیچلي نه ښکاري ، نو موږ به اوس تاسو سره د ځنډونو په اړه وغږیږو. زه نه پوهیږم چې ستاسو څخه کوم یو ورسره مخ شوی دی. دا د ډیټابیس سیسټمونو کې خورا عام ستونزه ده. مګر ځنډونه هغه وخت دي کله چې یوه ناسته د یو څه کولو لپاره بلې ناستې ته انتظار باسي. او په دې وخت کې بله ناسته د لومړۍ ناستې انتظار کوي چې څه وکړي.

او، د مثال په توګه، که ایوان ووایي: "ما ته یو څه راکړه،" او زه وایم: "نه، زه به دا یوازې تاسو ته درکړم که تاسو ماته بل څه راکړئ." او هغه وايي، "نه، زه به تاسو ته دا نه درکوم که تاسو دا ماته نه ورکوئ." او موږ په یوه کړکیچ حالت کې پای ته ورسیږو. زه ډاډه یم چې ایوان به دا کار ونه کړي، مګر تاسو پدې معنی پوهیږئ چې موږ دوه کسان لرو چې غواړي یو څه ترلاسه کړي او دوی چمتو نه دي چې هغه یې ورکړي تر څو چې بل څوک دوی ته هغه څه ورکړي چې دوی یې غواړي. او د حل لاره نشته.

او په اصل کې، ستاسو ډیټابیس باید دا کشف کړي. او بیا تاسو اړتیا لرئ یوه ناسته حذف یا بنده کړئ ، ځکه چې که نه نو دوی به د تل لپاره پاتې شي. او موږ دا په ډیټابیسونو کې ګورو، موږ یې په عملیاتي سیسټمونو کې ګورو. او په ټولو ځایونو کې چیرې چې موږ موازي پروسې لرو، دا پیښ کیدی شي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او اوس به موږ دوه بندونه نصب کړو. موږ به 50 او 80 واچوو. په لومړي قطار کې به زه له 50 څخه تر 50 پورې تازه کړم. زه به د لیږد شمیره 710 ترلاسه کړم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او بیا به زه 80 ته 81، او 50 ته 51 بدل کړم.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او دا هغه څه دي چې دا به ورته ښکاري. او له همدې امله 710 یو قطار بند کړی دی، او 711 د تایید په تمه دی. موږ دا ولیدل کله چې موږ تازه شو. 710 زموږ د لړۍ مالک دی. او 711 د لیږد بشپړولو لپاره 710 ته انتظار کوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او دا حتی وايي چې په کوم قطار کې تعطل واقع کیږي. او دلته هغه ځای دی چیرې چې دا عجیب پیل کیږي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

اوس موږ له 80 څخه 80 ته تازه کوو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او دا هغه ځای دی چې کړکیچ پیل کیږي. 710 د 711 څخه ځواب ته انتظار باسي، او 711 د 710 لپاره انتظار کوي. او دا به ښه پای ته ونه رسیږي. او له دې څخه هیڅ لاره نشته. او دوی به د یو بل څخه د ځواب تمه وکړي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او دا به یوازې د هرڅه ځنډولو پیل وکړي. او موږ دا نه غواړو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او پوسټګریس د دې لیدو لپاره لارې لري کله چې دا پیښ شي. او کله چې دا پیښ شي، تاسو دا تېروتنه ترلاسه کوئ. او له دې څخه دا څرګنده ده چې دا او داسې پروسه د بلې پروسې څخه د SHARE LOCK په انتظار کې ده، د بیلګې په توګه، کوم چې د 711 پروسې لخوا بلاک شوی. او دا پروسه د SHARE LOCK په انتظار کې وه چې په داسې او داسې یو لیږد ID باندې ورکړل شي او د داسې پروسې لخوا بلاک شوی و. له همدې امله، دلته د بند حالت دی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

ایا درې اړخیزه خنډونه شتون لري؟ دا کیدای شی؟ هو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

موږ دا شمیرې په میز کې دننه کوو. موږ له 40 څخه 40 ته بدلون ورکوو، موږ بلاک کول کوو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

موږ 60 ته 61، 80 ته 81 بدلوو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او بیا موږ 80 بدلوو او بیا بوم!

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او 714 اوس 715 ته انتظار دی. 716 د 715 په انتظار دی. او د دې په اړه هیڅ شی نشي کیدی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دلته نور دوه کسان نشته، دلته درې کسان شته. زه له تا څخه څه غواړم، دا له دریم کس څخه څه غواړي او دریم کس له ما څخه څه غواړي. او موږ په درې اړخیزه انتظار کې پای ته ورسیږو ځکه چې موږ ټول د بل چا په تمه یو چې هغه څه بشپړ کړي چې دوی ورته اړتیا لري.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او پوسټګریس پوهیږي چې دا په کوم قطار کې پیښیږي. او نو دا به تاسو ته لاندې پیغام درکړي، کوم چې دا ښیي چې تاسو ستونزه لرئ چیرې چې درې ان پټونه یو بل بندوي. او دلته هیڅ بندیز نشته. دا ممکن هغه قضیه وي چیرې چې 20 ننوتل یو بل بندوي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

بله ستونزه د لړۍ وړ ده.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

که د ځانګړو serializable قلف.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او موږ بیرته 719 ته راستون شو. د هغې محصول خورا نورمال دی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او تاسو کولی شئ د سیریلیز وړ څخه لیږد کولو لپاره کلیک وکړئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او تاسو پوهیږئ چې تاسو اوس د SA لاک مختلف ډول لرئ - دا پدې معنی ده چې د سریال کولو وړ دی.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او له همدې امله موږ د SARieadLock په نوم یو نوی ډول لاک لرو، کوم چې یو سریال لاک دی او تاسو ته اجازه درکوي سریالونو ته ننوځي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او همدارنګه تاسو کولی شئ ځانګړي شاخصونه دننه کړئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

پدې جدول کې موږ ځانګړي شاخصونه لرو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

نو که زه دلته 2 شمیره کېږدم، نو زه 2 لرم. مګر په پورتنۍ برخه کې، زه بل 2 داخل کړم. او تاسو لیدلی شئ چې 721 یو ځانګړی قفل لري. مګر اوس 722 د خپل عملیات بشپړولو لپاره 721 ته انتظار باسي ځکه چې دا نشي کولی 2 داخل کړي تر هغه چې دا نه پوهیږي چې 721 ته به څه پیښ شي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او که موږ فرعي راکړه ورکړه وکړو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دلته موږ 723 لرو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او که موږ ټکی خوندي کړو او بیا یې تازه کړو، نو موږ د لیږد نوی ID ترلاسه کوو. دا د چلند بله بیلګه ده چې تاسو یې باید خبر اوسئ. که موږ دا بیرته راستانه کړو، نو د لیږد ID له منځه ځي. 724 پریږدي. مګر اوس موږ 725 لرو.

نو زه دلته د څه کولو هڅه کوم؟ زه هڅه کوم چې تاسو ته د غیر معمولي قفلونو مثالونه وښیم چې تاسو یې موندلی شئ: ایا دا د سیریلیز وړ قفلونه دي یا خوندي کول ، دا د قفل مختلف ډولونه دي چې د قفل په میز کې به څرګند شي.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دا د ښکاره (واضح) قفلونو رامینځته کول دي چې pg_advisory_lock لري.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او تاسو ګورئ چې د بلاک کولو ډول د مشورې په توګه لیست شوی. او دلته په سور کې "مشوره" وايي. او تاسو کولی شئ په ورته وخت کې د pg_advisory_unlock سره ورته بلاک کړئ.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او په پایله کې، زه غواړم تاسو ته یو بل زړه راښکونکی شی وښیم. زه به یو بل لید جوړ کړم. مګر زه به د pg_locks میز سره د pg_stat_activity جدول سره یوځای شم. او زه ولې دا کار کول غواړم؟ ځکه چې دا به ما ته اجازه درکړي چې ټولې اوسنۍ ناستې وګورم او وګورم چې دقیقا د کوم ډول تالاشۍ په تمه دي. او دا خورا په زړه پوري ده کله چې موږ د تالاشۍ میز او د پوښتنو میز سره یوځای کوو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او دلته موږ pg_stat_view جوړوو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او موږ قطار یو له بل سره تازه کوو. او دلته موږ 724 ګورو. او بیا موږ خپل قطار درې ته تازه کوو. او اوس دلته څه وینئ؟ دا غوښتنې دي، د بیلګې په توګه تاسو د غوښتنو ټول لیست وګورئ چې په ښي کالم کې لیست شوي دي. او بیا په ښي خوا کې تاسو کولی شئ خنډونه وګورئ او هغه څه چې دوی رامینځته کوي. او دا ستاسو لپاره ډیر روښانه کیدی شي نو تاسو اړتیا نلرئ هر ځل هرې ناستې ته بیرته لاړشئ او وګورئ چې ایا تاسو اړتیا لرئ پدې کې ګډون وکړئ یا نه. دوی دا زموږ لپاره کوي.

بله ځانګړتیا چې خورا ګټوره ده pg_blocking_pids. تاسو شاید هیڅکله د هغې په اړه نه وي اوریدلی. هغه څه کوي؟ دا موږ ته اجازه راکوي چې ووایو چې د دې غونډې 11740 لپاره د کوم ځانګړي پروسې ID ته انتظار دی. او تاسو لیدلی شئ چې 11740 724 ته انتظار کوي. او 724 په سر کې دی. او 11306 ستاسو د پروسې ID دی. په لازمي ډول ، دا فنکشن ستاسو د لاک میز له لارې تیریږي. او زه پوهیږم چې دا یو څه پیچلی دی، مګر تاسو د دې پوهیدو اداره کوئ. په لازمي ډول دا فنکشن د دې تالاشۍ میز څخه تیریږي او هڅه کوي چې ومومي چیرې چې د دې پروسې ID هغه تالاشۍ ورکړل شوي چې ورته انتظار کیږي. او دا هم هڅه کوي چې معلومه کړي چې کوم پروسې ID هغه پروسه چې تالاشۍ ته انتظار کوي. نو تاسو کولی شئ دا فعالیت پرمخ بوځي pg_blocking_pids.

او دا خورا ګټور کیدی شي. موږ دا یوازې په 9.6 نسخه کې اضافه کړل، نو دا خصوصیت یوازې 5 کلن دی، مګر دا خورا ګټور دی. او ورته د دویمې غوښتنې سره سم تطبیق کیږي. دا دقیقا هغه څه ښیې چې موږ ورته اړتیا لرو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

دا هغه څه دي چې ما غوښتل له تاسو سره خبرې وکړم. او لکه څنګه چې ما تمه درلوده، موږ خپل ټول وخت مصرف کړ ځکه چې ډیری سلایډونه شتون لري. او سلایډونه د ډاونلوډ لپاره شتون لري. زه غواړم له تاسو څخه مننه وکړم چې دلته یم. زه ډاډه یم چې تاسو به د کنفرانس پاتې برخه خوند واخلئ، ډیره مننه!

پوښتنې:

د مثال په توګه، که زه د قطارونو تازه کولو هڅه کوم، او دویمه ناسته د ټول میز د حذف کولو هڅه کوي. تر هغه ځایه چې زه پوهیږم، دلته باید د ارادې قفل په څیر یو څه وي. ایا په پوسټګریس کې داسې شی شتون لري؟

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

راځئ چې بیرته پیل ته لاړ شو. تاسو شاید په یاد ولرئ کله چې تاسو کوم کار کوئ، د بیلګې په توګه کله چې تاسو یو انتخاب کوئ، موږ د AccessShareLock صادروو. او دا د میز د غورځیدو مخه نیسي. نو که تاسو ، د مثال په توګه ، غواړئ په میز کې قطار تازه کړئ یا قطار حذف کړئ ، نو څوک نشي کولی ټول جدول په ورته وخت کې حذف کړي ځکه چې تاسو دا AccessShareLock په ټول میز او قطار کې ساتئ. او یوځل چې تاسو سرته ورسول ، دوی کولی شي دا حذف کړي. مګر پداسې حال کې چې تاسو په مستقیم ډول هلته یو څه بدل کړئ، دوی به ونه شي کولی دا کار وکړي.

راځئ چې بیا یې وکړو. راځئ چې د حذف کولو مثال ته لاړ شو. او تاسو وګورئ چې څنګه د ټول میز پورته قطار کې یو ځانګړی قفل شتون لري.

دا به د ځانګړي لاک په څیر ښکاري ، سمه ده؟

هو، داسې ښکاري. زه پوهیږم چې تاسو د څه په اړه خبرې کوئ. تاسو وایاست چې که زه یو انتخاب وکړم نو زه یو ShareExclusive لرم او بیا زه هغه Row Exclusive کړم، ایا دا کومه ستونزه ده؟ مګر په حیرانتیا سره دا ستونزه نه رامینځته کوي. دا د لاک درجې زیاتولو په څیر ښکاري، مګر په اصل کې زه یو لاک لرم چې د حذف کولو مخه نیسي. او اوس ، کله چې زه دا لاک ډیر پیاوړی کړم ، دا لاهم د حذف کیدو مخه نیسي. نو داسې نه ده چې زه پورته ځم. دا دی ، دا د پیښیدو مخه نیسي کله چې دا په ټیټه کچه کې هم و ، نو کله چې زه یې کچه لوړه کړم دا لاهم د میز له مینځه وړلو مخه نیسي.

زه پوهیږم چې تاسو د څه په اړه خبرې کوئ. دلته د تالاشۍ هیڅ قضیه شتون نلري ، چیرې چې تاسو هڅه کوئ چې یو قفل پریږدئ ترڅو یو پیاوړی معرفي کړئ. دلته دا یوازې د بورډ په اوږدو کې دا مخنیوی زیاتوي، نو دا د کومې شخړې لامل نه کیږي. مګر دا ښه پوښتنه ده. د دې پوښتنې لپاره ډیره مننه!

موږ څه کولو ته اړتیا لرو ترڅو د ځنډیدو حالت څخه مخنیوی وکړو کله چې موږ ډیری ناستې لرو ، د کاروونکو لوی شمیر؟

پوسټګریس په اوتومات ډول د ځنډ حالت خبر ورکوي. او دا به په اوتومات ډول یو له غونډو څخه حذف کړي. د مړو بلاک کولو څخه د مخنیوي یوازینۍ لار په ورته ترتیب کې د خلکو بلاک کول دي. نو کله چې تاسو خپل غوښتنلیک ته ګورئ ، ډیری وختونه د ځنډ لامل کیږي ... راځئ تصور وکړو چې زه غواړم دوه مختلف شیان بلاک کړم. یو اپلیکیشن جدول 1 لاک کوي ، او بل اپلیکیشن 2 لاک کوي ، او بیا 1 جدول. او د ځنډیدو څخه د مخنیوي ترټولو اسانه لاره دا ده چې خپل غوښتنلیک وګورئ او هڅه وکړئ ډاډ ترلاسه کړئ چې لاک کول په ټولو غوښتنلیکونو کې په ورته ترتیب کې پیښیږي. او دا معمولا 80٪ ستونزې له منځه وړي، ځکه چې هر ډول خلک دا غوښتنلیکونه لیکي. او که تاسو دوی په ورته ترتیب کې بند کړئ ، نو تاسو د ځنډ حالت سره مخ نه یاست.

ستاسو د فعالیت لپاره ډیره مننه! تاسو د ویکیوم ډک په اړه خبرې وکړې او که زه په سمه توګه پوه شوم، د ویکیوم بشپړ په جلا ذخیره کې د ریکارډونو ترتیب خرابوي، نو دوی اوسني ریکارډونه بدل نه ساتي. ولې ویکیوم بشپړ ځانګړي لاک لاسرسی اخلي او ولې دا د لیکلو عملیاتو سره ټکر کوي؟

دا ښه پوښتنه ده. دلیل دا دی چې خلا ډک میز اخلي. او موږ په لازمي ډول د میز نوې نسخه رامینځته کوو. او میز به نوی وي. دا معلومه شوه چې دا به د میز په بشپړه توګه نوې نسخه وي. او ستونزه دا ده چې کله موږ دا کوو، موږ نه غواړو چې خلک یې ولولي ځکه چې موږ دوی ته اړتیا لرو چې نوی میز وګورو. او په دې توګه دا د تیرې پوښتنې سره نښلوي. که موږ په ورته وخت کې لوستل کولی شو، موږ به نشو کولی دا حرکت وکړو او خلک نوي میز ته لارښوونه وکړو. موږ به د هرچا انتظار ته اړتیا ولرو چې د دې جدول لوستل پای ته ورسوي، او له همدې امله دا په اصل کې یو ځانګړی حالت دی.
موږ یوازې وایو چې موږ له پیل څخه لاک کوو ځکه چې موږ پوهیږو چې په پای کې به موږ یو ځانګړي قفل ته اړتیا ولرو ترڅو هرڅوک نوي کاپي ته واړوو. نو موږ کولی شو دا په احتمالي توګه حل کړو. او موږ دا په ورته وخت کې د لیست کولو سره ترسره کوو. مګر دا کار کول خورا ستونزمن دي. او دا خورا د ځانګړي لاک په اړه ستاسو پخوانۍ پوښتنې سره تړاو لري.

ایا دا امکان لري چې پوسټګریس ته د تالاشۍ وخت اضافه کړئ؟ په اوریکل کې، زه کولی شم، د بیلګې په توګه، "د تازه کولو لپاره غوره کړئ" ولیکئ او د تازه کولو دمخه 50 ثانیې انتظار وکړئ. دا د غوښتنلیک لپاره ښه وه. مګر په پوسټګریس کې، زه باید دا سمدلاسه ترسره کړم او هیڅ انتظار ونه کړم، یا یو څه وخت انتظار وکړم.

هو، تاسو کولی شئ په خپلو قفلونو، ستاسو په قفلونو کې د وخت پای غوره کړئ. تاسو کولی شئ د نه لارې کمانډ هم صادر کړئ، کوم چې به ... که تاسو نشئ کولی سمدستي تالا ترلاسه کړئ. له همدې امله ، یا د بند وخت یا بل څه چې تاسو ته به اجازه درکړي دا ترسره کړئ. دا په ترکیبي کچه نه ترسره کیږي. دا په سرور کې د متغیر په توګه ترسره کیږي. ځینې ​​​​وختونه دا نشي کارول کیدی.

ایا تاسو کولی شئ 75 سلایډ خلاص کړئ؟

هو.

د پوسټګریس لاک مدیر خلاصول. بروس موجیان

او زما پوښتنه په لاندې ډول ده. ولې دواړه تازه پروسې د 703 تمه لري؟

او دا یوه لویه پوښتنه ده. زه نه پوهیږم، په لاره کې، ولې پوسټګریس دا کوي. مګر کله چې 703 جوړ شو، دا د 702 په تمه و. او کله چې 704 او 705 ښکاره شي، داسې ښکاري چې دوی نه پوهیږي چې دوی څه تمه لري ځکه چې هلته هیڅ شی شتون نلري. او پوسټګریس دا په دې ډول کوي: کله چې تاسو نشئ کولی لاک ترلاسه کړئ ، دا لیکي "تاسو پروسس کولو کې څه شی دی؟" ، ځکه چې تاسو دمخه د یو چا په تمه یاست. نو موږ به دا یوازې په هوا کې ځړولو ته پریږدو، دا به هیڅکله تازه نه کړي. خو دلته څه وشول؟ لکه څنګه چې 702 پروسه بشپړه کړه او 703 خپل تالا ترلاسه کړ، سیسټم بیرته راستانه شو. او هغې وویل چې اوس موږ دوه کسان لرو چې انتظار باسي. او بیا راځئ چې دوی یوځای تازه کړو. او موږ ته اشاره وکړو چې دواړه په تمه دي.

زه نه پوهیږم چې پوسټګریس ولې دا کوي. مګر د f په نوم یوه ستونزه شتون لري…. داسې ښکاري چې دا په روسیه کې اصطلاح نه ده. دا هغه وخت دی چې هرڅوک د یوې کلا په تمه وي، حتی که 20 چارواکي وي چې د کلا په تمه وي. او ناڅاپه دوی ټول په ورته وخت کې له خوبه راویښ شول. او هرڅوک د غبرګون هڅه پیل کوي. مګر سیسټم داسې کوي چې هرڅوک 703 ته انتظار باسي. ځکه چې دوی ټول انتظار کوي، او موږ به سمدلاسه ټول په قطار کې کړو. او که کومه بله نوې غوښتنه ښکاره شي چې له دې وروسته رامینځته شوې ، د مثال په توګه ، 707 ، نو بیا به خالي وي.

او ماته داسې ښکاري چې دا کار د دې لپاره شوی چې موږ ووایو چې په دې مرحله کې 702 703 ته انتظار دی او ټول هغه څوک چې له دې وروسته راځي په دې ډګر کې به د ننوتلو اجازه ونلري. مګر هرڅومره ژر چې لومړی ویټر پریږدي ، ټول هغه څوک چې د تازه کیدو دمخه پدې شیبه کې ورته ورته نښه ترلاسه کوي. او له همدې امله زه فکر کوم چې دا ترسره کیږي ترڅو موږ وکولی شو په ترتیب سره پروسس کړو ترڅو دوی په سمه توګه ترتیب شي.

ما تل دې ته د یوې عجیبې پدیدې په سترګه کتل. ځکه چې دلته ، د مثال په توګه ، موږ دوی په بشپړ ډول لیست نه کوو. مګر ماته داسې ښکاري چې هرکله چې موږ نوی تالاش ورکوو، موږ ټول هغه کسان ګورو چې د انتظار په بهیر کې دي. بیا موږ دا ټول په قطار کې کوو. او بیا هر نوی چې راځي یوازې په کتار کې راځي کله چې بل کس پروسس پای ته ورسوي. ډیر ښه پوښتنه. ستاسو د پوښتنې لپاره ډیره مننه!

دا ماته داسې ښکاري چې دا خورا منطقي دی کله چې 705 د 704 تمه کوي.

مګر دلته ستونزه په لاندې ډول ده. په تخنیکي توګه، تاسو کولی شئ یو یا بل ویښ کړئ. او نو موږ به یو یا بل ویښ کړو. مګر په سیسټم کې څه پیښیږي؟ تاسو کولی شئ وګورئ چې څنګه په پورتنۍ برخه کې 703 د خپل لیږد ID بلاک کړی دی. دا څنګه Postgres کار کوي. او 703 د خپل لیږد ID لخوا بند شوی، نو که څوک وغواړي چې انتظار وکړي، نو دوی به 703 ته انتظار وکړي. او په حقیقت کې، 703 بشپړوي. او یوازې د دې بشپړیدو وروسته یو له پروسې څخه بیدار کیږي. او موږ نه پوهیږو چې دا پروسه به څه وي. بیا موږ هر څه په تدریجي ډول پروسس کوو. خو دا څرګنده نه ده چې کومه پروسه لومړی بیداره شوې ده، ځکه چې کیدای شي له دغو پروسو څخه کومه یوه وي. په لازمي ډول ، موږ یو مهالویش درلود چې وویل چې موږ اوس کولی شو له دې پروسو څخه کوم یو راویښ کړو. موږ یوازې یو په تصادفي ډول غوره کوو. نو دا دواړه باید په پام کې ونیول شي ځکه چې موږ کولی شو له دوی څخه یو هم راویښ کړو.

او ستونزه دا ده چې موږ CP-infinity لرو. او له همدې امله ، دا خورا احتمال شتون لري چې موږ وروسته له خوبه راویښ شو. او که ، د مثال په توګه ، موږ وروسته پاڅیږو ، موږ به د هغه چا لپاره انتظار وکړو چې اوس یې بلاک ترلاسه کړی ، نو موږ دا نه مشخص کوو چې څوک به لومړی بیدار شي. موږ په ساده ډول داسې یو حالت رامینځته کوو، او سیسټم به دوی په تصادفي ترتیب کې بیدار کړي.

موجود دي د ایګور روګوف لخوا د تالاشۍ په اړه مقالې. وګورئ، دوی هم په زړه پورې او ګټور دي. موضوع، البته، خورا پیچلې ده. ډیره مننه، بروس!

سرچینه: www.habr.com

Add a comment