پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

بروس مومجيان جي 2020 واري ڳالهه ٻولهه ”ان لاڪنگ دي پوسٽ گريس لاڪ مئنيجر“.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

(نوٽ: سلائيڊن مان سڀئي SQL سوال هن لنڪ تان حاصل ڪري سگھجن ٿا: http://momjian.us/main/writings/pgsql/locking.sql)

سلام! اهو سٺو آهي ته هتي روس ۾ ٻيهر. مون کي افسوس آهي ته مان گذريل سال نه اچي سگهيس، پر هن سال ايوان ۽ مون وٽ وڏا منصوبا آهن. مون کي اميد آهي ته هتي گهڻو ڪري ويندس. مون کي روس اچڻ پسند آهي. مان Tyumen، Tver جو دورو ڪندس. مون کي ڏاڍي خوشي آهي ته مان انهن شهرن جو دورو ڪرڻ جي قابل ٿي ويندس.

منهنجو نالو بروس موجين آهي. مان انٽرپرائز ڊي بي تي ڪم ڪري رهيو آهيان ۽ 23 سالن کان پوسٽ گريس سان ڪم ڪري رهيو آهيان. مان فلاڊيلفيا، آمريڪا ۾ رهن ٿا. مان سال ۾ اٽڪل 90 ڏينهن سفر ڪندو آهيان. ۽ مان اٽڪل 40 ڪانفرنسن ۾ شرڪت ڪندو آهيان. منهنجو ويب سائيٽ، جنهن ۾ اهي سلائڊ آهن جيڪي مان توهان کي ڏيکاريندس. تنهن ڪري، ڪانفرنس کان پوء توهان انهن کي منهنجي ذاتي ويب سائيٽ تان ڊائون لوڊ ڪري سگهو ٿا. ان ۾ پڻ اٽڪل 30 پيشيون شامل آهن. هتي وڊيوز ۽ بلاگ جي داخلا جو هڪ وڏو تعداد پڻ آهن، 500 کان وڌيڪ. هي هڪ انتهائي معلوماتي وسيلو آهي. ۽ جيڪڏھن توھان ھن مواد ۾ دلچسپي وٺندا آھيو، پوء آئون توھان کي ان کي استعمال ڪرڻ جي دعوت ڏيان ٿو.

مان پوسٽ گريس سان ڪم ڪرڻ شروع ڪرڻ کان اڳ هڪ استاد، پروفيسر هوندو هوس. ۽ مون کي ڏاڍي خوشي ٿي آهي ته مان هاڻي توهان کي اهو ٻڌائي سگهان ٿو ته مان توهان کي ٻڌائڻ وارو آهيان. هي منهنجي سڀ کان دلچسپ پيشين مان هڪ آهي. ۽ ھن پيشڪش ۾ 110 سلائڊ شامل آھن. اسان سادي شين سان ڳالهائڻ شروع ڪنداسين، ۽ آخر تائين رپورٽ وڌيڪ کان وڌيڪ پيچيده ٿيندي، ۽ ڪافي پيچيده ٿي ويندي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هي هڪ بلڪه ناپسنديده گفتگو آهي. بلاڪنگ سڀ کان وڌيڪ مشهور موضوع نه آهي. اسان چاهيون ٿا ته اهو ڪٿي غائب ٿي وڃي. اهو ڏندن جي ڊاڪٽر ڏانهن وڃڻ وانگر آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

  1. لاڪنگ ڪيترن ئي ماڻهن لاءِ هڪ مسئلو آهي جيڪي ڊيٽابيس ۾ ڪم ڪن ٿا ۽ هڪ ئي وقت ۾ ڪيترائي عمل هلندڙ آهن. انهن کي بلاڪ ڪرڻ جي ضرورت آهي. يعني اڄ مان توهان کي بلاڪنگ بابت بنيادي ڄاڻ ڏيندس.
  2. ٽرانزيڪشن IDs. هي پيشڪش جو هڪ بلڪه بورنگ حصو آهي، پر انهن کي سمجهڻ جي ضرورت آهي.
  3. اڳيون اسان بلاڪ جي قسمن بابت ڳالهائينداسين. هي هڪ ڪافي مشيني حصو آهي.
  4. ۽ هيٺ اسين بلاڪ ڪرڻ جا ڪجهه مثال ڏينداسين. ۽ اهو سمجهڻ ڏاڍو ڏکيو ٿيندو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اچو ته بلاڪ بابت ڳالهايون.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اسان جي اصطلاح ڪافي پيچيده آهي. توهان مان ڪيترا ڄاڻو ٿا ته هي پاسو ڪٿان آيو آهي؟ ٻه ماڻهو. هي هڪ راند مان آهي جنهن کي Colossal Cave Adventure سڏيو ويندو آهي. اهو 80s ۾ هڪ متن تي ٻڌل ڪمپيوٽر جي راند هئي، منهنجو خيال آهي. اتي توهان کي هڪ غار ۾ وڃڻو هو، هڪ ليبارينٿ ۾، ۽ متن تبديل ٿي ويو، پر مواد هر وقت تقريبن ساڳيو هو. اهڙيءَ طرح مون کي اها راند ياد آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ هتي اسان انهن تالان جو نالو ڏسون ٿا جيڪي اسان وٽ اوريڪل کان آيا آهن. اسان ان کي استعمال ڪندا آهيون.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هتي اسان اصطلاحن کي ڏسون ٿا جيڪي مون کي پريشان ڪن ٿا. مثال طور، SHARE UPDATE ECXLUSIVE. اڳيون SHARE RAW ECXLUSIVE. ايماندار ٿيڻ لاء، اهي نالا بلڪل واضح نه آهن. اسان انهن کي وڌيڪ تفصيل سان غور ڪرڻ جي ڪوشش ڪنداسين. ڪجھ لفظ "شيئر" تي مشتمل آھي، جنھن جي معني آھي الڳ ڪرڻ. ڪجھ لفظ ”خاص“ تي مشتمل آھن. ڪجھ انهن ٻنهي لفظن تي مشتمل آهي. مان شروع ڪرڻ چاهيان ٿو ته اهي تالا ڪيئن ڪم ڪن ٿا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ لفظ "رسائي" پڻ تمام ضروري آهي. ۽ لفظ ”قطار“ هڪ تار آهن. اهو آهي، رسائي جي تقسيم، قطار جي تقسيم.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هڪ ٻيو مسئلو جيڪو سمجھڻ جي ضرورت آهي Postgres ۾، جنهن کي مان بدقسمتي سان منهنجي ڳالهين ۾ ڍڪي نه سگهندو آهيان، MVCC آهي. منهنجي ويب سائيٽ تي هن موضوع تي هڪ الڳ پيشڪش آهي. ۽ جيڪڏهن توهان سوچيو ته هي پيشڪش سخت آهي، MVCC شايد منهنجو تمام ڏکيو آهي. ۽ جيڪڏھن توھان چاھيو ٿا، توھان ان کي ويب سائيٽ تي ڏسي سگھو ٿا. توهان وڊيو ڏسي سگهو ٿا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

ٻي شيء اسان کي سمجهڻ جي ضرورت آهي ٽرانزيڪشن IDs. ڪيترائي ٽرانزيڪشن منفرد سڃاڻپ ڪندڙ کان سواءِ ڪم نٿا ڪري سگهن. ۽ هتي اسان وٽ هڪ وضاحت آهي ته ٽرانزيڪشن ڇا آهي. Postgres وٽ ٻه ٽرانزيڪشن نمبرنگ سسٽم آهن. مون کي خبر آهي ته هي هڪ تمام خوبصورت حل نه آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اهو پڻ ذهن ۾ رکو ته سلائڊن کي سمجهڻ ۾ ڪافي ڏکيو هوندو، تنهنڪري ڳاڙهي رنگ ۾ نمايان ٿيل ڇا آهي جنهن تي توهان کي ڌيان ڏيڻ جي ضرورت آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

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

اچو ته ڏسون. ٽرانزيڪشن نمبر ڳاڙهي ۾ نمايان ٿيل آهي. SELECT pg_back فنڪشن هتي ڏيکاريل آهي. اهو منهنجي ٽرانزيڪشن ۽ ٽرانزيڪشن ID واپس ڪري ٿو.

هڪ ٻي ڳالهه، جيڪڏهن توهان کي هي پريزنٽيشن پسند آهي ۽ توهان ان کي پنهنجي ڊيٽابيس تي هلائڻ چاهيو ٿا ته پوءِ توهان گلابي رنگ ۾ هن لنڪ تي وڃو ۽ هن پريزنٽيشن لاءِ SQL ڊائون لوڊ ڪري سگهو ٿا. ۽ توهان آساني سان ان کي پنهنجي PSQL ۾ هلائي سگهو ٿا ۽ سموري پيشڪش فوري طور تي توهان جي اسڪرين تي هوندي. اهو گلن تي مشتمل نه هوندو، پر گهٽ ۾ گهٽ اسان ان کي ڏسي سگهون ٿا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

انهي صورت ۾ اسان ڏسون ٿا ٽرانزيڪشن ID. هي اهو نمبر آهي جيڪو اسان هن کي ڏنو آهي. ۽ Postgres ۾ ٽرانزيڪشن ID جو هڪ ٻيو قسم آهي، جنهن کي ورچوئل ٽرانزيڪشن ID سڏيو ويندو آهي

۽ اسان کي اهو سمجهڻ گهرجي. اهو تمام ضروري آهي، ٻي صورت ۾ اسان Postgres ۾ بند ڪرڻ کي سمجهي نه سگهنداسين.

هڪ ورچوئل ٽرانزيڪشن ID هڪ ٽرانزيڪشن ID آهي جنهن ۾ مستقل قدر شامل نه آهي. مثال طور، جيڪڏهن مان SELECT ڪمانڊ هلائيندس، ته پوءِ مان گهڻو ڪري ڊيٽابيس کي تبديل نه ڪندس، مان ڪجهه به بند نه ڪندس. تنهن ڪري جڏهن اسان هڪ سادي SELECT هلائيندا آهيون، اسان ان ٽرانزيڪشن کي هڪ مستقل ID نه ڏيندا آهيون. اسان صرف هن کي هڪ مجازي ID ڏيون ٿا.

۽ هي Postgres ڪارڪردگي کي بهتر بڻائي ٿو، صفائي جي صلاحيتن کي بهتر بڻائي ٿو، تنهنڪري مجازي ٽرانزيڪشن ID ٻن نمبرن تي مشتمل آهي. سليش کان پهريان پهريون نمبر پس منظر جي ID آهي. ۽ ساڄي پاسي اسان ڏسون ٿا صرف هڪ ڪائونٽر.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

تنهن ڪري، جيڪڏهن آئون هڪ درخواست هلائي، اهو چوي ٿو ته پس منظر ID 2 آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ جيڪڏهن مان اهڙي ٽرانزيڪشن جو هڪ سلسلو هلائيان ٿو، ته پوءِ اسان ڏسون ٿا ته ڪائونٽر وڌندو ويندو آهي هر ڀيري جڏهن مان ڪو سوال هلائيندو آهيان. مثال طور، جڏهن آئون سوال هلائيان ٿو 2/10، 2/11، 2/12، وغيره.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

ياد رهي ته هتي ٻه ڪالم آهن. کاٻي پاسي اسان ڏسون ٿا ورچوئل ٽرانزيڪشن ID - 2/12. ۽ ساڄي پاسي اسان وٽ هڪ مستقل ٽرانزيڪشن ID آهي. ۽ هي ميدان خالي آهي. ۽ هي ٽرانزيڪشن ڊيٽابيس کي تبديل نٿو ڪري. تنهن ڪري مان ان کي مستقل ٽرانزيڪشن ID نٿو ڏيان.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

جيئن ئي آئون هلان ٿو analyze حڪم ((ANALYZE))، ساڳيو سوال مون کي مستقل ٽرانزيڪشن ID ڏئي ٿو. ڏسو ته هي اسان لاءِ ڪيئن بدلجي ويو آهي. مون وٽ اڳ ۾ اها سڃاڻپ نه هئي، پر هاڻي مون وٽ آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

تنهنڪري هتي هڪ ٻي درخواست آهي، هڪ ٻيو معاملو. ورچوئل ٽرانزيڪشن نمبر 2/13 آهي. ۽ جيڪڏهن مان هڪ مسلسل ٽرانزيڪشن ID لاءِ پڇان، ته پوءِ جڏهن آئون پڇا ڳاڇا ڪندس، مان حاصل ڪندس.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

تنهن ڪري، هڪ ڀيرو وڌيڪ. اسان وٽ هڪ ورچوئل ٽرانزيڪشن ID ۽ هڪ مسلسل ٽرانزيڪشن ID آهي. Postgres رويي کي سمجهڻ لاء صرف هن نقطي کي سمجھو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اسان ٽئين حصي ڏانهن وڃو. هتي اسان صرف پوسٽ گريس ۾ مختلف قسمن جي تالان ذريعي هلنداسين. اهو تمام دلچسپ ناهي. آخري سيڪشن گهڻو وڌيڪ دلچسپ ٿيندو. پر اسان کي بنيادي شين تي غور ڪرڻ گهرجي، ڇاڪاڻ ته ٻي صورت ۾ اسان کي اهو نه سمجھڻ گهرجي ته اڳتي ڇا ٿيندو.

اسان هن حصي ذريعي وڃو، اسين هر قسم جي تالا تي نظر ڪنداسين. ۽ مان توهان کي ڏيکاريندس ته اهي ڪيئن انسٽال ٿيل آهن، اهي ڪيئن ڪم ڪن ٿا، آئون توهان کي ڪجهه سوال ڏيکاريندس جيڪي توهان استعمال ڪري سگهو ٿا اهو ڏسڻ لاءِ ته پوسٽ گريس ۾ لاڪنگ ڪيئن ڪم ڪري ٿي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هڪ سوال پيدا ڪرڻ ۽ ڏسو پوسٽ گريس ۾ ڇا ٿي رهيو آهي، اسان کي سسٽم ڏسڻ ۾ سوال جاري ڪرڻ جي ضرورت آهي. انهي حالت ۾، pg_lock کي ڳاڙهي ۾ نمايان ڪيو ويو آهي. Pg_lock هڪ سسٽم ٽيبل آهي جيڪو اسان کي ٻڌائي ٿو ته هن وقت پوسٽ گريس ۾ ڪهڙا تالا استعمال ۾ آهن.

تنهن هوندي، مون لاءِ اهو تمام ڏکيو آهي ته توهان کي ڏيکاريان pg_lock پنهنجو پاڻ ڇاڪاڻ ته اهو ڪافي پيچيده آهي. تنهن ڪري مون هڪ نظارو ٺاهيو جيڪو ڏيکاري ٿو pg_locks. ۽ اهو پڻ مون لاء ڪجهه ڪم ڪري ٿو جيڪو مون کي بهتر سمجهڻ جي اجازت ڏئي ٿو. اھو آھي، اھو خارج ڪري ٿو منھنجا لاڪ، منھنجو پنھنجو سيشن وغيره. اھو صرف معياري SQL آھي ۽ اھو توھان کي اجازت ڏئي ٿو ته توھان کي بھتر طور ڏيکاريو ته ڇا ٿي رھيو آھي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

ٻيو مسئلو اهو آهي ته هي نظارو تمام وسيع آهي، تنهنڪري مون کي هڪ ٻيو ٺاهڻو پوندو - lockview2.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان ۽ اهو ڏيکاري ٿو مون کي ٽيبل مان وڌيڪ ڪالمن. ۽ هڪ ٻيو جيڪو مون کي باقي ڪالمن ڏيکاري ٿو. اهو ڪافي پيچيده آهي، تنهنڪري مون ان کي ممڪن طور تي پيش ڪرڻ جي ڪوشش ڪئي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

تنهنڪري اسان هڪ ٽيبل ٺاهيو جنهن کي Lockdemo سڏيو ويندو آهي. ۽ اسان اتي ھڪڙي لائن ٺاھيو. هي اسان جي نموني ٽيبل آهي. ۽ اسان سيڪشن ٺاهينداسين صرف توهان کي تالا جا مثال ڏيکارڻ لاءِ.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

تنهن ڪري، هڪ قطار، هڪ ڪالمن. پهرين قسم جي تالا کي ACCESS SHARE سڏيو ويندو آهي. هي گهٽ ۾ گهٽ پابندي وارو بلاڪ آهي. هن جو مطلب اهو آهي ته اهو عملي طور تي ٻين تالان سان تڪرار نٿو ڪري.

۽ جيڪڏهن اسان واضح طور تي تالا جي وضاحت ڪرڻ چاهيون ٿا، اسان هلون ٿا "لاک ٽيبل" حڪم. ۽ اهو واضح طور تي بلاڪ ڪندو، يعني ACCESS SHARE موڊ ۾ اسان لاک ٽيبل کي لانچ ڪندا آهيون. ۽ جيڪڏهن مان پس منظر ۾ PSQL هلان ٿو، ته پوءِ آئون پنهنجي پهرين سيشن کان ٻئي سيشن کي هن طريقي سان شروع ڪريان ٿو. اهو آهي، مان هتي ڇا ڪندس؟ مان هڪ ٻئي سيشن ڏانهن وڃان ٿو ۽ ان کي ٻڌايان ٿو "مون کي هن درخواست لاء lockview ڏيکاري." ۽ هتي مون وٽ آهي 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 - هي تالا ٿورو مختلف آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اچو ته هڪ مثال وٺون. منتخب ڪريو ROW SHARE طريقو هر قطار کي انفرادي طور تي بند ڪرڻ جو. هن طريقي سان ڪو به انهن کي حذف يا تبديل نٿو ڪري سگهي جڏهن اسان انهن کي ڏسي رهيا آهيون.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيانپوءِ SHARE LOCK ڇا ڪندو؟ اسان ڏسون ٿا ته ٽرانزيڪشن ID SELECT لاءِ 681 آهي. ۽ هي دلچسپ آهي. هتي ڇا ٿيو؟ پهريون ڀيرو اسان ڏسون ٿا نمبر "لاڪ" فيلڊ ۾ آهي. اسان ٽرانزيڪشن ID وٺون ٿا ۽ اهو چوي ٿو ته اهو ان کي خاص موڊ ۾ بلاڪ ڪري رهيو آهي. اهو سڀ ڪجهه ڪري ٿو اهو چوي ٿو مون وٽ هڪ قطار آهي جيڪا ٽيڪنيڪل طور تي ٽيبل ۾ ڪٿي بند ٿيل آهي. پر هو اهو نٿو ٻڌائي ته ڪٿي آهي. اسان ٿوري دير کان پوء هن کي وڌيڪ تفصيل سان ڏسندا سين.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هتي اسان چئون ٿا ته تالا اسان جي طرفان استعمال ڪيو ويو آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

تنهن ڪري، هڪ خاص تالا واضح طور تي چوي ٿو ته اهو خاص آهي. ۽ پڻ جيڪڏھن توھان ھن جدول ۾ ھڪڙي قطار کي حذف ڪريو، پوء اھو اھو آھي جيڪو توھان ڏسي سگھو ٿا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

SHARE EXCLUSIVE هڪ ڊگهو لاڪ آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هي آهي (ANALYZE) تجزيي وارو حڪم جيڪو استعمال ڪيو ويندو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

SHARE LOCK - توھان واضح طور تي شيئر موڊ ۾ لاڪ ڪري سگھو ٿا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

توهان پڻ هڪ منفرد انڊيڪس ٺاهي سگهو ٿا. ۽ اتي توھان ڏسي سگھوٿا SHARE LOCK، جيڪو انھن جو حصو آھي. ۽ اهو ٽيبل کي لاڪ ڪري ٿو ۽ ان تي SHARE LOCK رکي ٿو.

ڊفالٽ طور، ٽيبل تي SHARE LOCK جو مطلب آهي ته ٻيا ماڻهو ٽيبل کي پڙهي سگهن ٿا، پر ڪو به ان کي تبديل نٿو ڪري سگهي. ۽ اهو ئي ٿئي ٿو جڏهن توهان هڪ منفرد انڊيڪس ٺاهيندا آهيو.

جيڪڏهن مان هڪ منفرد هڪجهڙائي واري انڊيڪس ٺاهيان، ته پوءِ مون وٽ هڪ مختلف قسم جي لاڪنگ هوندي، ڇاڪاڻ ته، جيئن توهان کي ياد آهي، هڪجهڙائي انڊيڪس استعمال ڪرڻ سان لاڪنگ جي گهرج گھٽجي ٿي. ۽ جيڪڏهن مان هڪ عام تالا استعمال ڪريان ٿو، هڪ عام انڊيڪس، ته پوءِ مان اهڙيءَ طرح ٽيبل انڊيڪس تي لکڻ کان روڪيندس جڏهن اهو ٺاهيو پيو وڃي. جيڪڏهن مان هڪ وقتي انڊيڪس استعمال ڪريان ٿو، ته پوءِ مون کي هڪ مختلف قسم جي تالا استعمال ڪرڻ جي ضرورت آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

SHARE ROW EXCLUSIVE - ٻيهر اهو واضح طور تي مقرر ڪري سگهجي ٿو (واضح طور تي).

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

يا اسان هڪ قاعدو ٺاهي سگهون ٿا، يعني، هڪ مخصوص ڪيس وٺو جنهن ۾ اهو استعمال ڪيو ويندو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

خاص تالا لڳائڻ جو مطلب آهي ته ٻيو ڪو به ٽيبل کي تبديل نٿو ڪري سگهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هتي اسان کي مختلف قسم جا تالا نظر اچن ٿا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

EXCESS EXCLUSIVE، مثال طور، هڪ بلاڪنگ حڪم آهي. مثال طور، جيڪڏهن توهان ڪريو ٿا CLUSTER tableپوءِ ان جو مطلب اهو ٿيندو ته اتي ڪو به لکي نه سگهندو. ۽ اهو نه رڳو ٽيبل پاڻ کي بند ڪري ٿو، پر انڊيڪس پڻ.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هي ٻيو صفحو آهي ACCESS EXCLUSIVE بلاڪنگ جو، جتي اسان ڏسون ٿا ته اهو ٽيبل ۾ ڇا بلاڪ ڪري ٿو. اهو انفرادي ٽيبل جي قطار کي بند ڪري ٿو، جيڪو ڪافي دلچسپ آهي.

اها تمام بنيادي معلومات آهي جيڪا مان ڏيڻ چاهيان ٿي. اسان لاڪ بابت ڳالهايو، ٽرانزيڪشن IDs بابت، اسان ورچوئل ٽرانزيڪشن IDs بابت، مستقل ٽرانزيڪشن IDs بابت ڳالهايو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ هاڻي اسان ڪجهه بلاڪنگ مثالن جي ذريعي وڃو. هي سڀ کان دلچسپ حصو آهي. اسان ڏاڍا دلچسپ ڪيسن تي نظر ڪنداسين. ۽ هن پيشڪش ۾ منهنجو مقصد توهان کي بهتر سمجهڻ آهي ته پوسٽ گريس اصل ۾ ڇا ڪري رهيو آهي جڏهن اهو ڪجهه شين کي بلاڪ ڪرڻ جي ڪوشش ڪري ٿو. منهنجو خيال آهي ته هو حصن کي بلاڪ ڪرڻ ۾ تمام سٺو آهي.

اچو ته ڪجهه خاص مثالن تي نظر رکون.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اسان هڪ ٽيبل ۾ ٽيبل ۽ هڪ قطار سان شروع ڪنداسين. جڏهن مان ڪجهه داخل ڪريان ٿو ته مون وٽ ٽيبل تي ExclusiveLock، ٽرانزيڪشن ID ۽ ExclusiveLock ڏيکاريل آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

ڇا ٿيندو جيڪڏهن مان ٻه وڌيڪ قطارون داخل ڪريان؟ ۽ ھاڻي اسان جي ٽيبل تي ٽي قطارون آھن. ۽ مون هڪ قطار داخل ڪئي ۽ ان کي حاصل ڪيو. ۽ جيڪڏهن آئون ٻه وڌيڪ قطارون داخل ڪريان، ان بابت ڇا عجيب آهي؟ هتي هڪ عجيب شيءِ آهي ڇاڪاڻ ته مون هن ٽيبل تي ٽي قطارون شامل ڪيون آهن، پر مون وٽ اڃا تائين ٻه قطارون بند ٽيبل ۾ آهن. ۽ اهو بنيادي طور تي پوسٽ گريس جو بنيادي رويو آهي.

گھڻن ماڻھن جو خيال آھي ته جيڪڏھن ڪنھن ڊيٽابيس ۾ توھان 100 قطارن کي لاڪ ڪريو ٿا، ته پوءِ توھان کي 100 لاڪ انٽريز ٺاهڻ جي ضرورت پوندي. جيڪڏهن آئون هڪ ئي وقت 1 قطارن کي بلاڪ ڪريان، ته پوءِ مون کي 000 اهڙن سوالن جي ضرورت پوندي. ۽ جيڪڏهن مون کي بلاڪ ڪرڻ لاء هڪ ملين يا هڪ ارب جي ضرورت آهي. پر جيڪڏهن اسان اهو ڪندا آهيون، اهو تمام سٺو ڪم نه ڪندو. جيڪڏهن توهان هڪ سسٽم استعمال ڪيو آهي جيڪو هر فرد جي قطار لاء بلاڪنگ انٽري ٺاهي ٿو، پوء توهان ڏسي سگهو ٿا ته اهو پيچيده آهي. ڇو ته توهان کي فوري طور تي هڪ تالا ٽيبل جي وضاحت ڪرڻ جي ضرورت آهي جيڪا اوور فلو ڪري سگهي ٿي، پر پوسٽ گريس اهو نٿو ڪري.

۽ ڇا واقعي هن سلائڊ بابت اهم آهي ته اهو واضح طور تي ظاهر ڪري ٿو ته هڪ ٻيو سسٽم آهي جيڪو MVCC جي اندر هلندو آهي جيڪو انفرادي قطار کي بند ڪري ٿو. تنهن ڪري جڏهن توهان اربين قطارن کي بند ڪريو ٿا، پوسٽ گريس هڪ بلين الڳ لاڪنگ حڪم نه ٺاهي ٿو. ۽ اهو پيداوار تي تمام سٺو اثر آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هڪ تازه ڪاري بابت ڇا؟ مان هاڻي قطار کي اپڊيٽ ڪري رهيو آهيان، ۽ توهان ڏسي سگهو ٿا ته اهو هڪ ئي وقت ۾ ٻه مختلف آپريشن ڪيا آهن. اهو هڪ ئي وقت ٽيبل کي بند ڪري ڇڏيو، پر اهو پڻ انڊيڪس کي بند ڪري ڇڏيو. ۽ هن کي انڊيڪس کي بند ڪرڻ جي ضرورت آهي ڇو ته هن ميز تي منفرد رڪاوٽون آهن. ۽ اسان پڪ ڪرڻ چاهيون ٿا ته ڪو به ان کي تبديل نٿو ڪري، تنهنڪري اسان ان کي بلاڪ ڪيو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

ڇا ٿيندو جيڪڏھن مان ٻن قطارن کي اپڊيٽ ڪرڻ چاھيان؟ ۽ اسان ڏسون ٿا ته هو ساڳيو طريقي سان عمل ڪري ٿو. اسان ٻه ڀيرا وڌيڪ تازه ڪاريون ڪندا آهيون، پر بلڪل ساڳئي تعداد ۾ تالا لائنون.

جيڪڏهن توهان حيران ٿي رهيا آهيو ته پوسٽ گريس اهو ڪيئن ڪندو آهي، توهان کي ٻڌائڻ جي ضرورت پوندي منهنجي ڳالهه ٻولهه MVCC تي اهو سکڻ لاءِ ته پوسٽ گريس اندروني طور تي انهن لائينن کي ڪيئن نشانو بڻائيندو آهي ته اهو تبديل ٿئي ٿو. ۽ Postgres وٽ ھڪڙو طريقو آھي جنھن ۾ اھو اھو ڪري ٿو، پر اھو اھو نٿو ڪري ٽيبل لاڪنگ سطح تي، اھو اھو ڪري ٿو گھٽ ۽ وڌيڪ موثر سطح تي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

ڇا جيڪڏهن مان ڪجهه ختم ڪرڻ چاهيان ٿو؟ جيڪڏهن مان حذف ڪريان، مثال طور، هڪ قطار ۽ مون وٽ اڃا تائين منهنجا ٻه بلاڪنگ ان پٽ آهن، ۽ جيتوڻيڪ آئون انهن سڀني کي حذف ڪرڻ چاهيان ٿو، اهي اڃا تائين موجود آهن.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽، مثال طور، مان 1 لائينون داخل ڪرڻ چاھيان ٿو، ۽ پوءِ يا ته 000 لائينون ڊاھي يا شامل ڪرڻ چاھيان ٿو، پوءِ اھي انفرادي لائينون جيڪي مان شامل ڪريان ٿو يا تبديل ڪريان ٿو، اھي ھتي رڪارڊ نه ڪيون ويون آھن. اهي سيريز جي اندر ئي هيٺين سطح تي لکيل آهن. ۽ ايم وي سي سي جي تقرير دوران مون ان بابت تفصيل سان ڳالهايو. پر اهو تمام ضروري آهي جڏهن توهان تالان جو تجزيو ڪري رهيا آهيو انهي ڳالهه کي يقيني بڻائڻ لاءِ ته توهان ٽيبل جي سطح تي لاڪ ڪري رهيا آهيو ۽ توهان اهو نه ڏسي رهيا آهيو ته هتي انفرادي قطارون ڪيئن رڪارڊ ٿي رهيون آهن.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

واضح بلاڪ بابت ڇا؟

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

جيڪڏھن مان ريفريش تي ڪلڪ ڪريان، مون وٽ ٻه قطارون بند آھن. ۽ جيڪڏهن آئون انهن سڀني کي چونڊيو ۽ ڪلڪ ڪريو "هر جڳهه تازه ڪاري ڪريو،" پوء مون وٽ اڃا تائين ٻه بلاڪ رڪارڊ آهن.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اسان هر فرد جي قطار لاء الڳ رڪارڊ نه ٺاهيندا آهيون. ڇو ته پوءِ پيداوار گهٽجي ٿي، ٿي سگهي ٿي ته ان مان تمام گهڻو. ۽ اسان پاڻ کي اڻ وڻندڙ ​​صورتحال ۾ ڳولي سگهون ٿا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ ساڳي شيء، جيڪڏهن اسان حصيداري ڪريون ٿا، اسان اهو سڀ 30 ڀيرا ڪري سگهون ٿا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اسان اسان جي ٽيبل کي بحال ڪريو، سڀڪنھن شيء کي ختم ڪريو، پوء ھڪڙي قطار داخل ڪريو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

ٻيو رويو جيڪو توهان Postgres ۾ ڏسي ٿو جيڪو تمام گهڻو مشهور آهي ۽ گهربل رويي اهو آهي ته توهان ڪري سگهو ٿا هڪ تازه ڪاري يا هڪ چونڊيو. ۽ توهان هڪ ئي وقت ۾ ڪري سگهو ٿا. ۽ منتخب ڪريو اپڊيٽ کي بلاڪ نٿو ڪري ۽ ساڳئي شيء مخالف سمت ۾. اسان پڙهندڙ کي چئون ٿا ته ليکڪ کي بلاڪ نه ڪيو، ۽ ليکڪ پڙهندڙ کي بلاڪ نه ڪيو.

مان توهان کي ان جو هڪ مثال ڏيان ٿو. مان هاڻي هڪ چونڊ ڪندس. اسان ان کان پوء INSERT ڪنداسين. ۽ پوءِ توھان ڏسي سگھو ٿا - 694. توھان ڏسي سگھوٿا ان ٽرانزيڪشن جي ID جنھن ھن داخل ڪرڻ کي انجام ڏنو آھي. ۽ اهو ڪيئن ڪم ڪري ٿو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ جيڪڏھن مان ھاڻي پنھنجي پسمنظر واري ID کي ڏسان، اھو ھاڻي 695 آھي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ مان ڏسي سگهان ٿو 695 منهنجي ٽيبل ۾ ظاهر ٿيو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ جيڪڏهن آئون هتي هن طرح تازه ڪاري ڪريان ٿو، ته پوء مون کي هڪ مختلف ڪيس حاصل ڪيو. انهي صورت ۾، 695 هڪ خاص تالا آهي، ۽ تازه ڪاري ساڳئي رويي آهي، پر انهن جي وچ ۾ ڪو به تڪرار ناهي، جيڪو ڪافي غير معمولي آهي.

۽ توھان ڏسي سگھوٿا ته مٿي تي اھو ShareLock آھي، ۽ ھيٺئين پاسي اھو ExclusiveLock آھي. ۽ ٻئي ٽرانزيڪشن ڪم ڪيو.

۽ توهان کي MVCC تي منهنجي ڳالهه ٻولهه ٻڌڻ جي ضرورت آهي ته اهو ڪيئن ٿئي ٿو. پر هي هڪ مثال آهي ته توهان اهو هڪ ئي وقت ڪري سگهو ٿا، يعني هڪ ئي وقت چونڊيو ۽ هڪ تازه ڪاري ڪريو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اچو ته ري سيٽ ڪريو ۽ هڪ وڌيڪ آپريشن ڪريو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

جيڪڏهن توهان هڪ ئي قطار ۾ ٻه اپڊيٽ هلائڻ جي ڪوشش ڪندا، اهو بلاڪ ڪيو ويندو. ۽ ياد رکو، مون چيو هو ته پڙهندڙ ليکڪ کي بلاڪ نٿو ڪري، ۽ ليکڪ پڙهندڙ کي بلاڪ نٿو ڪري، پر هڪ ليکڪ ٻئي ليکڪ کي بلاڪ ڪري ٿو. اهو آهي، اسان وٽ ٻه ماڻهو ساڳئي وقت ساڳئي قطار کي اپڊيٽ نٿا ڪري سگهن. توهان کي انتظار ڪرڻو پوندو جيستائين انهن مان هڪ ختم ٿئي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ انهي کي واضع ڪرڻ لاء، مان ڏسندس Lockdemo ٽيبل. ۽ اسان هڪ قطار تي نظر ڪنداسين. في ٽرانزيڪشن 698.

اسان هن کي اپڊيٽ ڪيو آهي 2. 699 پهرين اپڊيٽ آهي. ۽ اهو ڪامياب هو يا اهو هڪ التوا واري ٽرانزيڪشن ۾ آهي ۽ اسان جي تصديق يا منسوخ ڪرڻ جي انتظار ۾ آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

پر ٻيو ڪجهه ڏسو - 2/51 اسان جو پهريون ٽرانزيڪشن آهي، اسان جو پهريون سيشن. 3/112 اها ٻي درخواست آهي جيڪا مٿين طرف کان آئي جنهن ان قيمت کي 3 ۾ تبديل ڪيو. ۽ جيڪڏهن توهان نوٽيس ڪيو ته مٿين هڪ پاڻ کي لاڪ ڪيو، جيڪو 699 آهي. پر 3/112 اهو تالا نه ڏنو. Lock_mode ڪالم چوي ٿو ته اهو انتظار ڪري رهيو آهي. اهو 699 جي توقع رکي ٿو. ۽ جيڪڏهن توهان ڏسو ته 699 ڪٿي آهي، اهو وڌيڪ آهي. ۽ پهرين سيشن ڇا ڪيو؟ هن پنهنجي ٽرانزيڪشن ID تي هڪ خاص تالا ٺاهيو. پوسٽ گريس اهو ڪيئن ڪري ٿو. اهو پنهنجي ٽرانزيڪشن ID کي بلاڪ ڪري ٿو. ۽ جيڪڏھن توھان چاھيو ٿا انتظار ڪرڻ لاءِ ڪنھن جي تصديق ڪرڻ يا منسوخ ڪرڻ لاءِ، ته پوءِ توھان کي انتظار ڪرڻو پوندو جيستائين ھڪڙو التوا وارو معاملو آھي. ۽ اهو ئي سبب آهي ته اسان هڪ عجيب ليڪ ڏسي سگهون ٿا.

اچو ته ٻيهر ڏسو. کاٻي پاسي اسان ڏسون ٿا اسان جي پروسيسنگ ID. ٻئي ڪالمن ۾ اسان ڏسون ٿا اسان جي ورچوئل ٽرانزيڪشن ID، ۽ ٽئين ۾ اسان ڏسون ٿا lock_type. هن جو مطلب ڇا آهي؟ لازمي طور تي اهو ڇا چوي ٿو ته اهو ٽرانزيڪشن ID کي بلاڪ ڪري رهيو آهي. پر نوٽ ڪريو ته ھيٺئين پاسي جون سڀئي قطارون تعلق چون ٿا. ۽ تنهنڪري توهان وٽ ٽيبل تي ٻه قسم جا تالا آهن. اتي هڪ تعلقي تالا آهي. ۽ پوءِ ٽرانزيڪشنڊ بلاڪنگ آهي، جتي توهان پنهنجو پاڻ کي بلاڪ ڪريو ٿا، جيڪو بلڪل ائين ٿئي ٿو جيڪو پهرين قطار ۾ ٿئي ٿو يا بلڪل هيٺ، جتي ٽرانزيڪشن آهي، جتي اسان 699 جو انتظار ڪريون ٿا ان جي آپريشن کي ختم ڪرڻ لاءِ.

مان ڏسندس ته هتي ڇا ٿو ٿئي. ۽ هتي ٻه شيون گڏ ٿين ٿيون. توھان ڏسي رھيا آھيو ھڪڙي ٽرانزيڪشن ID لاڪ کي پھرين قطار ۾ جيڪو پاڻ کي لاڪ ڪري ٿو. ۽ هوءَ پاڻ کي روڪي ٿي ماڻهن کي انتظار ڪرڻ لاءِ.

جيڪڏهن توهان 6هين لڪير تي نظر وجهو ته اهو ساڳيو ئي داخل آهي جيئن پهرين. ۽ تنهن ڪري ٽرانزيڪشن 699 بلاڪ ڪيو ويو آهي. 700 پڻ خود بند ٿيل آهي. ۽ پوءِ ھيٺئين قطار ۾ توھان ڏسندا ته اسان انتظار ڪري رھيا آھيون 699 ان جي آپريشن کي ختم ڪرڻ لاءِ.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ 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 آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

جيڪڏهن خاص serializable تالا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ اسان 719 ڏانھن واپس وڃون ٿا. ان جي پيداوار بلڪل عام آھي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ توھان ڪلڪ ڪري سگھوٿا ٽرانزيڪشن کي ترتيب ڏيڻ کان.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ توهان محسوس ڪيو ته توهان وٽ هاڻي هڪ مختلف قسم جو SA تالا آهي - ان جو مطلب آهي serializable.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ تنهنڪري اسان وٽ هڪ نئين قسم جو تالا آهي جنهن کي SARieadLock سڏيو ويندو آهي، جيڪو هڪ سيريل لاڪ آهي ۽ توهان کي سيريل داخل ڪرڻ جي اجازت ڏئي ٿو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ پڻ توهان داخل ڪري سگهو ٿا منفرد انڊيڪس.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

ھن جدول ۾ اسان وٽ منفرد انڊيڪس آھن.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

پوءِ جيڪڏھن مان ھتي نمبر 2 ڏيان، ته پوءِ مون وٽ ھڪڙو 2 آھي. پر سڀ کان مٿي، مان ٻيو 2 اندر رکيان ٿو. ۽ توھان ڏسي سگھو ٿا ته 721 وٽ ھڪڙو خاص تالا آھي. پر ھاڻي 722 پنھنجي آپريشن کي مڪمل ڪرڻ لاءِ 721 جو انتظار ڪري رھيو آھي ڇاڪاڻ ته اھو 2 داخل نٿو ڪري سگھي جيستائين اھو ڄاڻي ٿو 721 جو ڇا ٿيندو.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ جيڪڏهن اسان ذيلي ٽرانزيڪشن ڪندا آهيون.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

هتي اسان وٽ 723 آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

۽ جيڪڏهن اسان پوائنٽ کي بچايو ۽ پوء ان کي اپڊيٽ ڪيو، پوء اسان کي هڪ نئين ٽرانزيڪشن ID ملي ٿي. هي هڪ ٻيو نمونو آهي جيڪو توهان کي ڄاڻڻ جي ضرورت آهي. جيڪڏهن اسان هن کي واپس ڪريون ٿا، پوء ٽرانزيڪشن ID هليو ويندو. 724 پنن. پر هاڻي اسان وٽ 725 آهي.

پوءِ مان هتي ڇا ڪرڻ جي ڪوشش ڪري رهيو آهيان؟ مان توهان کي غير معمولي تالان جا مثال ڏيکارڻ جي ڪوشش ڪري رهيو آهيان جيڪي توهان ڳولي سگهو ٿا: چاهي اهي سيريلائيزبل لاڪ هجن يا SAVEPOINT، اهي مختلف قسم جا تالا آهن جيڪي تالا ٽيبل ۾ ظاهر ٿيندا.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

ھي ٺھيل آھي پڌري (ظاھر) لاڪ جي، جنھن ۾ 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 کي لاڪ ڏنو ويو آهي جنهن تي اهو انتظار ڪري رهيو آهي. ۽ اهو پڻ معلوم ڪرڻ جي ڪوشش ڪري ٿو ته ڪهڙي پروسيس آئي ڊي جي پروسيس جو انتظار ڪري رهيو آهي لاڪ جي. تنهنڪري توهان هن فنڪشن کي هلائي سگهو ٿا pg_blocking_pids.

۽ اهو تمام مفيد ٿي سگهي ٿو. اسان ھن کي صرف ورزن 9.6 ۾ شامل ڪيو آھي، تنھنڪري ھي فيچر صرف 5 سال پراڻو آھي، پر اھو تمام گھڻو مفيد آھي. ۽ ساڳيو ئي ٻئي درخواست تي لاڳو ٿئي ٿو. اهو ڏيکاري ٿو جيڪو اسان کي ڏسڻ جي ضرورت آهي.

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اھو اھو آھي جيڪو مون توھان سان ڳالهائڻ چاھيو. ۽ جيئن مون توقع ڪئي، اسان اسان جو سڄو وقت استعمال ڪيو ڇو ته اتي ڪيتريون ئي سلائڊون هيون. ۽ سلائڊ ڊائون لوڊ لاءِ موجود آهن. مان هتي اچڻ لاءِ توهان جي مهرباني ڪرڻ چاهيان ٿو. مون کي پڪ آهي ته توهان باقي ڪانفرنس مان لطف اندوز ٿيندا، توهان جي وڏي مهرباني!

سوال:

مثال طور، جيڪڏهن آئون قطار کي اپڊيٽ ڪرڻ جي ڪوشش ڪري رهيو آهيان، ۽ ٻيو سيشن سڄي ٽيبل کي ختم ڪرڻ جي ڪوشش ڪري رهيو آهي. جيستائين مان سمجهان ٿو، اتي هڪ ارادي تالا وانگر ڪجهه هجڻ گهرجي. ڇا Postgres ۾ اهڙي شيء آهي؟

پوسٽ گريس لاڪ مئنيجر کي کولڻ. بروس موجيان

اچو ته بلڪل شروعات ڏانهن واپس وڃو. توھان کي ياد آھي ته جڏھن توھان ڪجھ ڪندا آھيو، مثال طور جڏھن توھان SELECT ڪندا آھيو، اسان ھڪ AccessShareLock جاري ڪندا آھيون. ۽ هي ميز کي ڇڏڻ کان روڪي ٿو. تنهن ڪري جيڪڏهن توهان، مثال طور، ڪنهن ٽيبل ۾ قطار کي اپڊيٽ ڪرڻ چاهيو ٿا يا هڪ قطار کي حذف ڪرڻ چاهيو ٿا، ته پوءِ ڪو ماڻهو هڪ ئي وقت پوري ٽيبل کي ختم نٿو ڪري سگهي، ڇاڪاڻ ته توهان هن AccessShareLock کي سڄي ٽيبل ۽ قطار مٿان رکيل آهيو. ۽ هڪ دفعو توهان ڪيو آهي، اهي ان کي ختم ڪري سگهن ٿا. پر جڏهن توهان سڌو سنئون اتي ڪا شيء تبديل ڪندا، اهي اهو ڪرڻ جي قابل نه هوندا.

اچو ته ان کي ٻيهر ڏيو. اچو ته حذف مثال ڏانھن وڃو. ۽ توهان ڏسو ته ڪيئن هڪ خاص تالا آهي قطار تي پوري ٽيبل جي مٿان.

اهو خاص تالا وانگر نظر ايندو، صحيح؟

ها، اهو ڏسڻ ۾ اچي ٿو. مان سمجهان ٿو ته توهان ڇا ڳالهائي رهيا آهيو. توهان چئي رهيا آهيو ته جيڪڏهن مان هڪ SELECT ڪريان ٿو ته پوءِ مون وٽ هڪ ShareExclusive آهي ۽ پوءِ مان ان کي Row Exclusive ڪريان ٿو، ڇا اهو مسئلو بڻجي ٿو؟ پر حيرت انگيز طور تي اهو مسئلو ناهي. اهو ڏسڻ ۾ اچي ٿو ته تالا جي درجي کي وڌائڻ، پر لازمي طور تي مون وٽ هڪ تالا آهي جيڪو حذف ٿيڻ کان روڪي ٿو. ۽ هاڻي، جڏهن آئون هن تالا کي وڌيڪ طاقتور بڻائي ٿو، اهو اڃا تائين ختم ٿيڻ کان روڪي ٿو. سو ائين ناهي ته مان مٿي وڃان. اهو آهي، اهو ان کي ٿيڻ کان روڪي ٿو جڏهن اهو پڻ گهٽ سطح تي هو، تنهنڪري جڏهن آئون ان جي سطح کي وڌايو ته اهو اڃا تائين ٽيبل کي ختم ٿيڻ کان روڪي ٿو.

مان سمجهان ٿو ته توهان ڇا ڳالهائي رهيا آهيو. هتي ڪو به تالا وڌائڻ وارو ڪيس ناهي، جتي توهان هڪ مضبوط متعارف ڪرائڻ لاءِ هڪ تالا ڇڏڻ جي ڪوشش ڪري رهيا آهيو. هتي اهو صرف بورڊ ۾ هن روڪٿام کي وڌائي ٿو، تنهنڪري اهو ڪنهن به تڪرار جو سبب ناهي. پر اهو هڪ سٺو سوال آهي. هي پڇڻ لاء توهان جي وڏي مهرباني!

جڏهن اسان وٽ ڪيترائي سيشن آهن، صارفين جو هڪ وڏو تعداد، هڪ تعطل واري صورتحال کان بچڻ لاءِ اسان کي ڇا ڪرڻ جي ضرورت آهي؟

Postgres خودڪار طريقي سان ڊيڊ لاڪ حالتن کي نوٽيس ڪري ٿو. ۽ اهو خودڪار طريقي سان هڪ سيشن کي ختم ڪري ڇڏيندو. مئل بلاڪنگ کان بچڻ جو واحد رستو ماڻهن کي ساڳئي حڪم ۾ بلاڪ ڪرڻ آهي. تنهن ڪري جڏهن توهان پنهنجي اپليڪيشن تي نظر رکون ٿا، اڪثر ڪري بند ٿيڻ جو سبب آهي ... اچو ته تصور ڪريو ته مان ٻن مختلف شين کي بلاڪ ڪرڻ چاهيان ٿو. هڪ ايپليڪيشن ٽيبل 1 کي لاڪ ڪري ٿي، ۽ ٻي ايپليڪيشن 2 کي لاڪ ڪري ٿي، ۽ پوءِ ٽيبل 1. ۽ ڊيڊ لاڪ کان بچڻ جو آسان طريقو اهو آهي ته توهان جي ايپليڪيشن کي ڏسو ۽ پڪ ڪرڻ جي ڪوشش ڪريو ته لاڪنگ سڀني ايپليڪيشنن ۾ ساڳئي ترتيب سان ٿئي ٿي. ۽ اهو عام طور تي 80٪ مسئلن کي ختم ڪري ٿو، ڇاڪاڻ ته هر قسم جا ماڻهو اهي ايپليڪيشنون لکندا آهن. ۽ جيڪڏهن توهان انهن کي ساڳئي ترتيب ۾ بلاڪ ڪيو، ته پوء توهان کي بند ٿيل صورتحال جو سامنا نه ٿيندو.

توهان جي ڪارڪردگي لاء تمام گهڻو مهرباني! توهان ويڪيوم فل ​​جي باري ۾ ڳالهايو ۽، جيڪڏهن مان صحيح سمجهان ٿو، ته ويڪيوم مڪمل الڳ اسٽوريج ۾ رڪارڊ جي ترتيب کي خراب ڪري ٿو، تنهنڪري اهي موجوده رڪارڊ کي تبديل نه ڪندا آهن. ويڪيوم فل ​​خاص تالا رسائي ڇو وٺندو آهي ۽ اهو لکڻ جي عملن سان ڇو تڪرار ڪندو آهي؟

اھو ھڪڙو سٺو سوال آھي. ان جو سبب اهو آهي ته ويڪيوم مڪمل ٽيبل وٺندو آهي. ۽ اسان بنيادي طور تي ٽيبل جو نئون نسخو ٺاهي رهيا آهيون. ۽ ٽيبل نئين ٿي ويندي. اهو ظاهر ٿئي ٿو ته هي ٽيبل جو هڪ مڪمل طور تي نئون نسخو هوندو. ۽ مسئلو اهو آهي ته جڏهن اسان اهو ڪندا آهيون، اسان نٿا چاهيون ته ماڻهو ان کي پڙهن ڇو ته اسان کي انهن کي نئين ٽيبل ڏسڻ جي ضرورت آهي. ۽ پوءِ ھي ڳنڍجي ٿو پوئين سوال سان. جيڪڏهن اسان ساڳئي وقت پڙهي سگهون ٿا، اسان ان کي منتقل ڪرڻ جي قابل نه هوندا ۽ ماڻهن کي نئين ٽيبل ڏانهن سڌو رستو ڏيکاريندا. اسان کي هر ڪنهن لاءِ هن ٽيبل کي پڙهڻ لاءِ انتظار ڪرڻو پوندو، ۽ تنهنڪري اهو لازمي طور تي هڪ خاص صورتحال آهي.
اسان صرف اهو چئون ٿا ته اسان شروع کان بند ڪريون ٿا ڇاڪاڻ ته اسان ڄاڻون ٿا ته آخر ۾ اسان کي هر ڪنهن کي نئين ڪاپي ڏانهن منتقل ڪرڻ لاءِ هڪ خاص تالا جي ضرورت پوندي. تنهنڪري اسان ممڪن طور تي هن کي حل ڪري سگهون ٿا. ۽ اسان ان کي هڪ ئي وقت جي اشاري سان هن طريقي سان ڪندا آهيون. پر اهو ڪم ڪرڻ تمام گهڻو ڏکيو آهي. ۽ اهو تمام گهڻو تعلق رکي ٿو توهان جي پوئين سوال سان خاص تالا بابت.

ڇا پوسٽ گريس ۾ لاڪنگ ٽائم آئوٽ شامل ڪرڻ ممڪن آهي؟ Oracle ۾، مان ڪري سگهان ٿو، مثال طور، "اپڊيٽ ڪرڻ لاءِ چونڊيو" لکي ۽ اپڊيٽ ڪرڻ کان پهريان 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

تبصرو شامل ڪريو