Thuta Learning
ရှာဖွေရန်
AdvancedData & Databasesbeginner

Locks နှင့် Deadlocks

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Locks နှင့် Deadlocks concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • နမူနာ SQL/command ကို ကိုယ်တိုင် run ပြီး output စစ်နိုင်ရန်
  • Tutorial Platform project နှင့် production scenario တွင် အသုံးချနိုင်ရန်

နားလည်ထားရမယ့် အချက်

PostgreSQL က consistency အတွက် implicit locks ယူပါတယ်။ `SELECT ... FOR UPDATE` က read-then-write race ကိုကာကွယ်နိုင်သော်လည်း lock duration ကိုတိုထားရပါတယ်။ Transactions နှစ်ခုက resources မတူသောအစီအစဉ်နဲ့ယူရင် deadlock ဖြစ်ပြီး PostgreSQL ကတစ်ခုကို abort လုပ်ကာ cycle ဖြတ်ပါတယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

Seat inventory လို scenario မှာ available count ကို lock လုပ်ပြီးမှလျှော့မယ်။ Application တစ်ခုလုံးမှာ rows ကို ID ascending စသည့် consistent order နဲ့ lock လုပ်ခြင်း၊ timeout သတ်မှတ်ခြင်းနှင့် aborted transaction retry လုပ်ခြင်းတို့သုံးပါ။

အတူတူ စမ်းရေးကြည့်မယ်

sql
BEGIN;
SET LOCAL lock_timeout = '2s';

SELECT seats_left
FROM app.course_sessions
WHERE session_id = 7
FOR UPDATE;

UPDATE app.course_sessions
SET seats_left = seats_left - 1
WHERE session_id = 7 AND seats_left > 0
RETURNING seats_left;

COMMIT;
You should see
Concurrent booking တွင် negative inventory မဖြစ်အောင် serialized update ရမည်။

၅ မိနစ် စမ်းကြည့်

Terminal နှစ်ခုမှာ row နှစ်ခုကို opposite order နဲ့ lock ကာ deadlock ဖြစ်စေပြီး error ကိုမှတ်ပါ။

သတိလေးတစ်ချက်

Lock wait ကို application hang လို့ပဲထင်ပြီး root blocker မရှာခြင်းက outage ကိုရှည်စေပါတယ်။

PostgreSQL — Explicit LockingPostgreSQL Global Development Group

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Lock wait ကို application hang လို့ပဲထင်ပြီး root blocker မရှာခြင်းက outage ကိုရှည်စေပါတယ်။
  • နမူနာ code ကို production data ပေါ် တိုက်ရိုက်မစမ်းဘဲ local/test database နှင့် recoverable backup ပေါ်တွင် အရင်အတည်ပြုပါ။

လေ့ကျင့်ခန်း

Terminal နှစ်ခုမှာ row နှစ်ခုကို opposite order နဲ့ lock ကာ deadlock ဖြစ်စေပြီး error ကိုမှတ်ပါ။

You'll know it worked when: Concurrent booking တွင် negative inventory မဖြစ်အောင် serialized update ရမည်။

Locks နှင့် Deadlocks | Thuta Learning