סוגי נעילות: Shared Lock, Update Lock, Exclusive Lock

26/07/2013

אין תגובות

Exclusive Lock – נעילה בזמן עדכון טבלה. העדכון נועל אותה, וכל שאר היישומים אינם יכולים לגשת אליה עד שהעדכון יסתיים.

Shared Lock – נעילה לזמן קצר ביותר במהלך ביצוע ה-Select שנועד למצוא אילו שורות לשנות. למשל- שתי פקודות Update נשלחות בו זמנית, שתיהן מפעילות Shared Lock על הטבלה, ומחפשות את השורות הרלוונטיות. כל אחת מהן מונעת מזולתה לעדכן את הטבלה.לא ניתן לעדכן בשלב זה (כשהאחת מחפשת ונועלת- השניה לא יכולה לעדכן), אך כן ניתן לחפש (כשהאחת מחפשת ונועלת- גם השניה יכולה לחפש ולנעול).

Update Lock – כאשר שתי פקודות ניגשות לטבלה בו זמנית – שתיהן מפעילות עליה Shared Lock בשעה שהן מחפשות את השורות לעדכון,
אך כשהראשונה מסיימת למצוא – היא מפעילה Update Lock שאינו יכול להיות משותף כמו ה-Shared Lock וזה מסמן לשנייה שעליה להמתין. כעת הראשונה תשדרג את הנעילה ל-Exclusive Lock לאחר שיסתיים ה-Shared Lock של השניה (בניגוד ל-Shared Lock ול-Update Lock שיכולים להתקיים בו זמנית, ה-Exclusive Lock יכול להתקיים רק לבדו).
נעילה זו קורית כשיש Shared Lock כי לא ניתן להפעיל Exclusive Lock במקביל לנעילה אחרת, וברגע שה-Shared Lock משתחרר – ה-Update Lock הופך ל-Exclusive Lock.
ניתן להפעיל Update Lock כשיש כבר Shared Lock, אל לא להיפך.
הנעילה יוצאת אל הפועל לפני שהעדכון מתבצע: מצד אחד יש נעילה על הטבלה, אך מצד שני אין עדיין בעיות של Dirty Reads וכיו"ב מכיוון שדבר לא השתנה.

לסיכום– על Row או Page או טבלה יכול להיות ברגע נתון Shared Lock, או Shared Lock + Update Lock או Exclusive Lock. כמו כן – יכולים להיות מספר Shared Lock בו זמנית (=יופעל על ידי מספר פקודות), אך רק Update Lock אחד ורק Exclusive Lock אחד.
כדאי לציין שנסיון לנעול (Intent Lock) אינו Shared Lock, אלא מה שקורה כשיש כבר Update Lock או Exclusive Lock שמונעים נסיונות נעילה נוספים (שנכשלים). Shared Lock נוצר רק כששני הנ"ל אינם קיימים, ולכן אינו נסיון שנכשל אלא נעילה שמצליחה.
הנעילות הן על הטבלה, על ה-Page או על ה-Row עצמו.
כל מערכת הנעילות הזו נובעת מהגישה הפסימית (Pessimistic Concurrency Model) שרוצה למנוע מראש כל אפשרות לעדכון כפול או עדכונים שידרסו זה את זה.
לבסוף- כל מה שנכתב כאן הוא כאשר ה-Isolation Level הוא לפי הגדרות ברירת המחדל של המערכת.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *