)concurrency control( בקרת בו זמניות תוכנית הניגשת לנתונים ו(אולי) מעדכנת :)transaction( טרנזקציה . אותם partially committed committed דיאגרמת מצבים active failed aborted.
Download
Report
Transcript )concurrency control( בקרת בו זמניות תוכנית הניגשת לנתונים ו(אולי) מעדכנת :)transaction( טרנזקציה . אותם partially committed committed דיאגרמת מצבים active failed aborted.
)concurrency control(
בקרת בו זמניות
תוכנית הניגשת לנתונים ו(אולי) מעדכנת:)transaction( טרנזקציה
.אותם
partially
committed
committed
דיאגרמת מצבים
active
failed
aborted
תזמון ()schedule
תזמון ( :)scheduleתזמון של קבוצת טרנזקציות הוא רצף של
פעולות ,הכולל את כל הפעולות השייכות לקבוצת הטרנזקציות
והשומר על הסדר שבו מופיעות הפעולות בכל אחת מהטרנזקציות.
תזמון סדרתי ( :)serial scheduleתזמון בו הפעולות השייכות
לכל אחת מהטרנזקציות מופיעות ברצף ,כלומר לא משולבות
ביניהן פעולות של טרנזקציות אחרות.
תזמון לא סדרתי ( :)nonserial scheduleתזמון בו הפעולות
השייכות לקבוצת טרנזקציות משולבות זו בזו.
המשך,תזמונים
.B- לA מחשבון10% – העברT1 ,B- לA מחשבון50 – העברT0
S1 - תזמון סדרתי
T0
T1
S2 - זמני-תזמון בו
Ai = 1000, Bi = 2000
read(A)
A = A-50
write(A)
read(B)
B = B+50
write(B)
T0
T1
read(A)
A = A-50
write(A)
read(A)
tmp = A*0.1
A = A-tmp
write(A)
read(B)
B = B+tmp
Ae = 855
write(B)
Be = 2145
read(A)
tmp = A*0.1
A = A-tmp
write(A)
read(B)
B = B+50
write(B)
Ae = 855
Be = 2145
read(B)
B = B+tmp
write(B)
המשך,תזמונים
.B- לA מחשבון10% – העברT1 ,B- לA מחשבון50 – העברT0
S1 - תזמון סדרתי
T0
T1
S3 - זמני לא שקול-תזמון בו
Ai = 1000, Bi = 2000
read(A)
A = A-50
write(A)
read(B)
B = B+50
write(B)
T0
T1
read(A)
A = A-50
read(A)
tmp = A*0.1
A = A-tmp
write(A)
read(A)
tmp = A*0.1
A = A-tmp
write(A)
read(B)
B = B+tmp
write(B)
write(A)
read(B)
B = B+50
write(B)
Af = 855,
Bf = 2145
Af = 950
Bf = 2150
read(B)
B = B+tmp
write(B)
conflict serializability
פעולות מתנגשות (: )conflicting opertaionsשתי פעולות עוקבות
Iiו Ijהשייכות לטרנזקציות שונות ,הן פעולות מתנגשות אם הן
מתייחסות לאותו פריט מידע ואם לפחות אחת מהן היא פעולת
כתיבה.
שקילות התנגשות ( : )conflict equivalenceשני תזמונים Sו `S
הם conflict equivalentאם ניתן לעבור מתזמון Sלתזמון `S
על ידי סדרה של החלפות של פעולות שאינן מתנגשות.
תזמון בר-סידור קונפליקטי ( :)conflict serializableתזמון הוא
בר-סידור קונפליקטי אם הוא conflict equivalentלתזמון
סדרתי כלשהו.
testing for conflict serializability
בדיקת :conflict serializabilityגרף קדימויות ( precedence
.)graph
יהי Sתזמון .גרף קדימויות של Sמורכב מקבוצה Vשל קדקודים
וקבוצה Eשל קשתות .לכל טרנזקציה אחת מ Sמתאים קודקוד ב
.Vהקבוצה Eכוללת קשת TiTjאם קיים פריט מידע Qכך
שמתקיים אחד מהתנאים:
• Tiמבצעת ( write(Qלפני ש Tjמבצעת (.read(Q
• Tiמבצעת ( read(Qלפני ש Tjמבצעת (.write(Q
• Tiמבצעת ( write(Qלפני ש Tjמבצעת (.write(Q
אם הגרף כולל מעגל מכוון -התזמון אינו .conflict serializable
view serializability
שקילות תצפית ( : )view equivalenceשני תזמונים Sו ` Sהם
view equivalentאם הם מורכבים מאותה קבוצה של טרנזקציות,
ואם לכל פריט מידע Qמתקיימים שלושת התנאים הבאים:
• אם בתזמון Sטרנזקציה Tiקוראת את ערכו ההתחלתי של ,Qאזי
בתזמון ` Sטרנזקציה Tiקוראת את ערכו ההתחלתי של . Q
• אם בתזמון Sטרנזקציה Tiקוראת את ערכו של ,Qוערך זה נוצר על ידי
טרנזקציה Tjאזי בתזמון ` Sטרנזקציה Tiקוראת את הערך של Qשנוצר
על ידי טרנזקציה .Tj
•אם בתזמון Sהטרנזקציה Tiכותבת את ערכו הסופי של ,Qאזי בתזמון
` Sהטרנזקציה Tiכותבת את ערכו הסופי של . Q
תזמון בר סידור-תצפיתי ( :)view serializableתזמון הוא בר-
סידור תצפיתי אם הוא שקול-תצפית לתזמון סדרתי כלשהו.
הערות
•סיבוכיות הבדיקה האם תזמון בר-סידור קונפליקטיO(n2) :
(בדיקת מעגלים בגרף); סיבוכיות הבדיקה האם תזמון בר-סידור
תצפיתי.NP-Complete :
•כל תזמון שהוא בר-סידור קונפליקטי הוא גם בר-סידור תצפיתי
(אך לא ההיפך).
•לדוגמא:
T3
T2
T1
)read(Q
)write(Q
)write(Q
)write(Q
פרוטוקולים של בקרת בו זמניות
• פרוטוקולי נעילה
• פרוטוקולי תג זמן
• פרוטוקולים אופטימיים
פרוטוקולים מבוססי נעילה
נעילה משותפת ( :)shared lockאם טרנזקציה Tiקיבלה נעילה
משותפת (המסומנת ב )S-lockעל פריט מידע Qאזי Tiרשאית
לקרוא פריט זה אך לא לכתוב אותו.
נעילה בלעדית ( :)exclusive lockאם טרנזקציה Tiקיבלה נעילה
בלעדית (המסומנת ב )X-lockעל פריט מידע Qאזי Tiרשאית
לקרוא פריט זה ולכתוב אותו.
כללי השימוש בנעילות
•לפני הגישה לפריט מידע כלשהו טרנזקציה חייבת לנעול אותו ,על ידי
בקשת נעילה משותפת לגישה של קריאה בלבד ונעילה בלעדית לגישת
קריאה וכתיבה.
•אם פריט המידע אינו נעול על ידי טרנזקציה אחרת ,הנעילה תאושר.
•אם פריט המידע נעול ,ה DBMSקובע מתי הבקשה תואמת את
הנעילה הקיימת .אם הבקשה היא לנעילה משותפת של פריט שקיימת
עליו כבר נעילה משותפת ,הנעילה תאושר; בכל מקרה אחר הטרנזקציה
המבקשת חייבת להמתין ( )waitעד שהנעילה הקיימת תשוחרר.
•טרנזקציה ממשיכה להחזיק בנעילה עד אשר היא משחררת אותה
באופן מפורש במהלך הביצוע או כאשר היא מסיימת פעולתה .תוצאות
פעולת כתיבה הופכות זמינות לטרנזקציות אחרות רק כאשר
משתחררת נעילת הכתיבה.
1 כללי השימוש בנעילות – דוגמא
T0
Concurrencycontrol manager
T1
Xlock(A)
read(A)
write(A)
unlock(A)
Xlock(B)
read(B)
write(B)
unlock(B)
grant-X(A,T0)
Xlock(A)
read(A)
write(A)
unlock(A)
Xlock(B)
read(B)
write(B)
unlock(B)
grant-X(A,T1)
grant-X(B,T0)
grant-X(B,T1)
T2
2 כללי השימוש בנעילות – דוגמא
T0
T2
grant-X(A,T0)
Xlock(A)
read(A)
write(A)
unlock(A)
Xlock(B)
read(B)
write(B)
unlock(B)
Concurrencycontrol manager
Slock(A)
read(A)
unlock(A)
Slock (B)
read(B)
unlock(B)
Display(A+B)
grant-S(A,T2)
grant-S(B,T2)
grant-X(B,T0)
פרוטוקול “נעילה דו-פאזית” ()two phase locking
•פאזת גדילה ()growing phase
הטרנזקציה רשאית לבקש נעילות
אך לא לשחרר נעילות.
•פאזת הצטמקות( shrinking
:)phaseהטרנזקציה רשאית
לשחרר נעילות אך לא לבקש נעילות.
כל התזמונים החוקיים תחת 2PLהם .serializable
הפרוטוקול אינו נקי מנעילות מוות (.)deadlock
פרוטוקולי נעילה מבוססי גרפים
מגדירים סדר חלקי על קבוצת פריטי המידע {D = {d1, d2, ...dn
בבסיס הנתונים .אם di djאזי כל טרנזקציה הניגשת לשני פריטי
המידע diו djחייבת לגשת ל diלפני שניגשת ל . dj
את הסדר החלקי המושרה על Dניתן לייצג כגרף מכוון אציקלי (,)acyclic
הנקרא גרף בסיס הנתונים.
פרוטוקול עץ ()tree protocol
נעזר בנעילות בלעדיות ( )xlockבלבד.
טרנזקציה Tרשאית לנעול פריט מידע בהתאם לכללים הבאים:
•הנעילה הראשונה של Tעשויה להיות על פריט מידע כלשהו.
•בהמשך ,פריט מידע Qעשוי להינעל ע”י Tרק אם ההורה של Qנעול
ע”י . T
• Tרשאית לשחרר נעילות בכל זמן שהוא.
• Tאינה רשאית לנעול פריט מידע שננעל ושוחרר על ידיה.
כל התזמונים החוקיים תחת פרוטוקול העץ הם conflict
.serializable
הפרוטוקול נקי מנעילות-מוות.
דוגמה- פרוטוקול עץ
T1
A
G
E
H
T3
xlock(B)
B
D
T2
xlock(D)
xlock(H)
unlock(D)
C
F
xlock(E)
unlock(E)
xlock(D)
unlock(B)
xlock(B)
xlock(E)
I
unlock(H)
xlock(G)
unlock(D)
J
unlock(E)
unlock(B)
unlock(G)
פרוטוקול תג זמן ()timestamp protocol
כל טרנזקציה Tiמקבלת חותמת זמן ) TS(Tiייחודית וקבועה על
ידי ה DBMSהמעידה על המועד היחסי של תחילת הטרנזקציה.
בנוסף כל פריט מידע מקבל שתי חותמות זמן:
W-timestampהמציינת את הערך המירבי של חותמות הזמן של
טרנזקציות שכתבו בהצלחה את פריט המידע( .חותמת הזמן של
הטרנזקציה הצעירה ביותר שכתבה את פריט המידע)
R-timestampהמציינת את הערך המירבי של חותמות הזמן של
טרנזקציות שקראו את פריט המידע( .חותמת הזמן של הטרנזקציה
הצעירה ביותר שקראה את פריט המידע)
timestamp ordering protocol
אם טרנזקציה Tiמבצעת (:read(Q
•אם ( TS(Ti)<W-timestamp(Qפעולת הקריאה נדחית ו Ti
מגולגלת אחורנית.
•אם ( TS(Ti)>=W-timestamp(Qפעולת הקריאה מתבצעת; יש
לעדכן (אולי) את ( .R-timestamp(Q
אם טרנזקציה Tiמבצעת (:write(Q
•אם ( TS(Ti)<R-timestamp(Qפעולת הכתיבה נדחית ו Tiמגולגלת
אחורנית.
•אם ( TS(Ti)<W-timestamp(Qפעולת הכתיבה נדחית ו Ti
מגולגלת אחורנית.
•אחרת פעולת הכתיבה מתבצעת; יש לעדכן את ( .W-timestamp(Q
Thomas’ write rule
וריאציה על פרוטוקול חותמות הזמן הבסיסי:
אם טרנזקציה Tiמבצעת (:read(Q
הכללים זהים לאלה של פרוטוקול תגי-הזמן הבסיסי.
אם טרנזקציה Tiמבצעת (:write(Q
•אם ( TS(Ti)<R-timestamp(Qפעולת הכתיבה נדחית ו Ti
מגולגלת אחורנית.
•אם ( TS(Ti)<W-timestamp(Qמתעלמים מפעולת הכתיבה.
•אחרת פעולת הכתיבה מתבצעת; יש לעדכן את ( W-
.timestamp(Q
השימוש ב Thomas’ write ruleמאפשר יצירת תזמונים שאינם
אפשריים בפרוטוקול נעילה כלשהו.
שיטות אופטימיות
)(optimistic / validation methods
אין כל בדיקה של serializabilityבזמן ביצוע טרנזקציה ,אלא רק
לאחר סיומה.
שלושה שלבים:
• :read phaseהטרנזקציה קוראת נתונים מבסיס הנתונים ,אך
עדכונים נעשים לעותק לוקלי של פריטי המידע.
• :validation phaseנערכת בדיקה להבטיח כי אין פגיעה ב
serializabilityאם העדכונים יבוצעו על בסיס הנתונים.
• :write phaseאם בדיקת התקינות בשלב הקודם הצליחה
העדכונים נעשים על בסיס הנתונים; אחרת ,כל העדכונים מבוטלים
והטרנזקציה מופעלת מחדש.
Validation phase
לכל טרנזקציה Tiשלוש חותמות זמן:
• ( - start(Tiמציין תחילת הטרנזקציה Ti
• ( - validation(Tiמציין את סיום שלב הקריאה ( )read phaseותחילת
שלב האימות ( )validation phaseשל Ti
• ( - finish(Tiמציין סיום שלב הכתיבה של Ti
פרוטוקול חותמת-הזמן מתבצע עם חותמת הזמן )TS(Ti) = validation (Ti
מבחן ה validationלגבי טרנזקציה Tiדורש כי כל טרנזקציה Tjבעלת
חותמת זמן קטנה יותר ,TS(Tj) < TS(Ti) ,תקיים אחד משני התנאים:
•)finish(Tj) < start(Ti
• קבוצת פריטי המידע ש Tjכותבת זרה לקבוצת פריטי המידע ש Tiקוראת,
ו Tjמסיימת את שלב הכתיבה לפני ש Tiמתחילה את שלב האימות.
Multiple granularity
פרוטוקולים המאפשרים לנעול בסיס נתונים ברמות שונות של גרנולריות.
למשל ,ברמה של בסיס הנתונים ,שטח ,קובץ ,רשומה.
DB
R9
R8
A2
A1
F3
F2
R7
R6
R5
הירארכיה של גרנולריות
R4
F1
R3
R2
R1
Intention Locks
כאשר צומת ננעל בנעילה בלעדית או משותפת ,נעילה מתאימה מתבצעת
על כל הצאצאים בעץ intention locks .מושמות על כל ההורים של
הצומת ,לפני שהוא ננעל מפורשות.
טרנזקציה המבקשת לנעול צומת כלשהו ,Qעוברת את הנתיב משורש העץ
עד ,Qותוך כדי כך ,נועלת ב intention locksאת הצמתים על הנתיב.
סוגי intention locks
• )intention shared (IS
• )intention exclusive (IX
Compatibility Matrix
IS
IX
S
X
IS
true
true
true
false
IX
true
true
false false
S
true
false
true
X
false false false false
false
MGL – Multiple Granularity Locking
.1נעילות שאינן תואמות את מטריצת הקומפטיביליות אינן מאושרות.
.2בכל סוג נעילה ,שורש העץ חייב להינעל ראשון (בכל סוג נעילה).
.3צומת Nיכול להינעל ע"י טרנזקציה Tבנעילה מסוג Sאו ISרק אם
) parent(Nנעול ע"י Tבנעילת ISאו .IX
.4צומת Nיכול להינעל ע"י טרנזקציה Tבנעילה מסוג Xאו IXרק אם
) parent(Nנעול ע"י Tבנעילת .IX
.5טרנזקציה Tיכולה לנעול צומת רק אם היא עדיין לא שחררה אף צומת
(.)2PL
.6טרנזקציה Tיכולה לשחרר צומת Nרק אם אף אחד מ
) descendants(Nאינו נעול כעת ע"י .T
Isolation level in SQL
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
| READ COMMITED | REPEATABLE READ | READ
UNCOMITTED
Level
Dirty
Read
NonRepeatable Phantom
Read
Read
Read Uncommitted
Yes
Yes
Yes
Read Committed
No
Yes
Yes
Repeatable Read
No
No
Yes
Serializable
No
No
No