)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‬כוללת קשת ‪ TiTj‬אם קיים פריט מידע ‪ 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