Har clause kyun? Chalo ise yaad karne ki jagah derive karte hain.
xmin committed kyun hona chahiye? Agar jo transaction ne yeh version create kiya wo commit nahi hua, toh uska data baaki sabke liye uncommitted garbage hai → invisible (warna hum dirty data padhte).
xmin ko snapshot ke active set se exclude kyun karein? Chahe wo baad mein commit kare, jis pal maine apna snapshot liya wo tab bhi run kar raha tha → ek consistent picture ke liye mujhe pretend karna hoga ki yeh kabhi hua hi nahi. Yahi repeatable reads deta hai.
xmin<xmaxsnap kyun? Koi bhi txid ≥xmaxsnap mere snapshot ke baad shuru hua — yeh mera future hai, toh invisible hai.
Deleter logic mirror image kyun hai? Ek deletion mere liye tab "effect" leti hai jab deleting transaction khud mere liye unhi teen rules se visible ho. Agar deleter invisible hai, toh row abhi bhi alive dikhti hai.
T200 stock=5 padhta hai, → 4 update karta hai (xmin=200 create karta hai).
T201 bhi same row update karna chahta hai. Wo ek naya version likhne ki koshish karta hai.
Yeh step kyun? MVCC read–write blocking hata deta hai lekin write–writesame row par abhi bhi conflict karta hai (do "current" versions nahi ho sakte jo dono ek hi ko supersede karne ka claim karein). Toh:
T201 ko T200 ke commit/abort hone ka wait karna hoga (latest version par row-level write lock).
Agar T200 commit karta hai, toh T201 (Snapshot Isolation ke under) re-check karta hai aur serialization error milti hai ("could not serialize access due to concurrent update") ya re-reads karta hai, isolation level par depend karta hai.
Dead old row versions ka accumulation jo garbage-collect nahi hui hain (VACUUM).
MVCC ke under long-running transactions harmful kyun hain?
Ye GC horizon rok ke rakhti hain, old versions clean hone se rokti hain → bloat aur slow scans.
Snapshot ko txid >= xmax_snap kyun invisible hota hai?
Yeh snapshot lene ke baad shuru hua, toh transaction ke future mein hai.
Recall Feynman: 12-saal ke bachche ko explain karo
Socho ek shared diary jo bahut log ek saath padhte aur likhte hain. Ek person diary lock karne ki bajay taaki koi aur touch na kar sake, diary har purane page ki photocopies rakhti hai. Jab tum padhna shuru karte ho, tumhe apni photocopy milti hai diary kaisi dikhti thi us moment. Koi aur usi time ek naya page scribble kar sakta hai — tumhe koi fark nahi, tum apni photo padh rahe ho. Koi line mein nahi wait karta. Jhagda tab hota hai jab do log bilkul same page rewrite karne ki koshish karte hain — tab ek ko wait karna padta hai. Baad mein, ek cleaner woh photocopies phek deta hai jise koi nahi dekh raha.