התאוששות ( recovery )

28
( תתתתתתתת( תתתתתתתתrecovery recovery ) )

Upload: titania-lyris

Post on 01-Jan-2016

29 views

Category:

Documents


1 download

DESCRIPTION

התאוששות ( recovery ). סוגי אחסון ( storage types ). זיכרון נדיף ( volatile storage ): לדוגמא, זיכרון ראשי, מטמון ( cache ). זיכרון לא נדיף ( nonvolatile storage ) לדוגמא, זיכרון משני, טייפ מגנטי. זיכרון יציב ( stable storage ) יש רק קירוב של זיכרון כזה. סוגי כשלים ( failure types ). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: התאוששות ( recovery )

((recoveryrecoveryהתאוששות )התאוששות )

Page 2: התאוששות ( recovery )

(storage typesסוגי אחסון )

(: לדוגמא, זיכרון ראשי, volatile storageזיכרון נדיף )•(.cacheמטמון )

( לדוגמא, זיכרון משני, nonvolatile storageזיכרון לא נדיף )•טייפ מגנטי.

יש רק קירוב של זיכרון כזה. (stable storageזיכרון יציב )•

Page 3: התאוששות ( recovery )

(failure typesסוגי כשלים )

(logical errorכשל לוגי )•(system errorשגיאת מערכת )•(system failureנפילת מערכת )•(disk failureכשל דיסק )•

Page 4: התאוששות ( recovery )

לשם מה T התאוששות?

read (A)

A = A - 50

write(A)

read(B)

B = B + 50

write(B)

Page 5: התאוששות ( recovery )

התאוששות מבוססת יומן

שיטת ההתאוששות הנפוצה ביותר.

( מתארת כתיבה אחת לבה”נ וכוללת logכל רשומת יומן )את השדות:

שם טרנזקציה.•שם פריט המידע.•ערך ישן.•

. ערך חדש•

Page 6: התאוששות ( recovery )

רשומות יומן מיוחדות נוספות מתעדות אירועים מיוחדים במהלך העיבוד של הטרנזקציה, כמו למשל תחילת

(.abort או commitהטרנזקציה או סיומה )

שטרנזקציה מבצעת פעולת כתיבה כלשהי, הכרחי לפנילרשום קודם לכן את הרשומה המתאימה בקובץ היומן.

<Ti start><Ti , Xj, V1, V2><Ti commit>

Page 7: התאוששות ( recovery )

defferedעדכון מושהה )modification)

בשיטה זו רושמים את פעולות העדכון לבה”נ ביומן, אך ( עד writeמשהים את הביצוע של כל פעולות הכתיבה )

.partially commitשהטרנזקציה עוברת למצב

בשלב זה כל האינפורמציה ביומן הקשורה בטרנזקציה זו משמשת לביצוע העדכונים המושהים. אם המערכת

קורסת לפני סיום הטרנזקציה, או אם היא עוברת למצב abort .פשוט מתעלמים מהאינפורמציה ביומן ,

בלבד. redoהתאוששות על ידי פעולות

Page 8: התאוששות ( recovery )

דוגמא

T0 : read (A)

A=A-50

write(A)

read(B)

B=B+50

write(B)

T1 : read (C)

C=C-100

write(C)

LOG RECORDS

<T0 , start>

<T0 , A, 950>

<T0 , B, 2050>

<T0 , commit>

<T1 , start>

<T1 , C, 600>

<T1 , commit>

בהנחה של ביצוע סדרתי ושל ערכים

התחלתיים: A=$1000 B=$2000

C=$700

ערכים סופיים: A=$950 B=$2050

C=$600

Page 9: התאוששות ( recovery )

immediateעדכון מיידי )modification)

בשיטה זו העדכון של בה”נ עשוי להתבצע כאשר (. פעולות עדכון activeהטרנזקציה במצב פעיל )

שנרשמות על ידי טרנזקציה במצב פעיל נקראות uncommited modifications .

במקרה של נפילה או של כישלון הטרנזקציה, השדה של הערך-הישן ברשומות היומן משמשות לשחזור הערכים

ששונו לערכיהם בטרם תחילת הטרנזקציה.

מתבצעת הוספת write(Xלפני כל ביצוע פעולת כתיבה ) partiallyרשומה מתאימה ליומן. כאשר הטרנזקציה

commits נכתבת ליומן הרשומה , <T , commit> .

.undo ו redoהתאוששות על ידי פעולות

Page 10: התאוששות ( recovery )

דוגמא

T0 : read (A)

A=A-50

write(A)

read(B)

B=B+50

write(B)

T1 : read (C)

C=C-100

write(C)

LOG RECORDS

<T0 , start>

<T0 , A, 1000,950>

<T0 , B, 2000,2050>

<T0 , commit>

<T1 , start>

<T1 , C, 700,600>

<T1 , commit>

בהנחה של ביצוע סדרתי ושל ערכים

התחלתיים: A=$1000 B=$2000

C=$700

ערכים סופיים: A=$950 B=$2050

C=$600

Page 11: התאוששות ( recovery )

(bufferניהול החוצץ )

מסיבות של יעילות רצוי לרכז בחוצץ מספר עדכוני יומן, ולכותבם לזיכרון היציב יחד.

כדי לשמור על יכולת ההתאוששות ואטומיות הטרנזקציות יוטלו אילוצים נוספים על טכניקות ההתאוששות:

רק לאחר שרשומת commit עוברת למצב Tiטרנזקציה •< נכתבה לזיכרון היציב.Ti commitהיומן >

< תיכתב לזיכרון היציב, Ti commitלפני שרשומת היומן >• חייבות Tiכל רשומות היומן הקשורות לטרנזקציה

להיכתב לזיכרון היציב.לפני שבלוק של מידע בזיכרון הראשי נכתב לבסיס •

הנתונים )דיסק(, כל רשומות היומן הקשורות לנתוני המידע בבלוק, נכתבו לזיכרון היציב.

Page 12: התאוששות ( recovery )

checkpoints

במקרה של נפילת מערכת, על אילו טרנזקציות יש לבצע undo/redo?

בעיקרון, יש לסרוק את כל היומן.

:חסרונותתהליך החיפוש מבזבז משאבים.•על פי האלגוריתם, על רוב הטרנזקציות נצטרך להפעיל •

redo למרות שהן כבר כתבו את העדכונים שלהן לבסיס ,הנתונים - הארכה מיותרת של תהליך ההתאוששות.

Page 13: התאוששות ( recovery )

checkpoints

בנוסף לתחזוקת יומן כמתואר, )בשיטת העדכון המושהה או המיידי( המערכת מבצעת מידי פעם “ביקורת”

checkpoint :המחייבות את סדרת הפעולות הבאה כתוב את כל רשומות היומן הנמצאות בזיכרון הראשי •

לזיכרון/ אחסון יציב .( bufferכתוב את כל הבלוקים המעודכנים שבחוצץ )•

על הזיכרון המשני.< לזיכרון /אחסון יציב.checkpointכתוב רשומת יומן >•

Page 14: התאוששות ( recovery )

Shadow paging - Basics

1234

n

טבלת דפים page table

5

דפים בזיכרון המשני

Page 15: התאוששות ( recovery )

Shadow paging

הרעיון המרכזי: לתחזק שתי טבלאות דפים במהלך וטבלת current page tableטרנזקציה: הטבלה הנוכחית

. shadow page tableהצל בתחילת הטרנזקציה הטבלאות זהות. טבלת הצל אינה

משתנה במהלך הטרנזקציה. הטבלה הנוכחית עשויה inputלהשתנות עקב ביצוע פעולות כתיבה. כל פעולות ה

משתמשות בטבלה הנוכחית לאתר דפי בסיס outputוה נתונים על הזיכרון המשני.

Page 16: התאוששות ( recovery )

shadow and current page tables

1234

n

current page table

5

דפים בזיכרון המשני

1234

n

shadow page table

5

Page 17: התאוששות ( recovery )

shadow paging לעומת שיטות מבוססות יומן

: shadow pagingיתרונות נחסכת העלות של כתיבת רשומות יומן. •התאוששות מהירה בהרבה, כיוון שאין צורך •

. undo או redoלבצע:shadow pagingחסרונות

פרגמנטציה של הנתונים.•( – יש להשתמש garbageיצירת עמודי זבל )•

.garbage collectionבמנגנון של מסובך הרבה יותר למימוש במערכות שבהן •

טרנזקציות מתבצעות בו זמנית.

Page 18: התאוששות ( recovery )

- זמניים בו תזמונים בביצוע בעיות

•Cascade rollback

•Non-recoverable schedules

•deadlocks

Page 19: התאוששות ( recovery )

במקרה של ביצוע בו זמני של טרנזקציה, התאוששות עלולה להביא לגלגול אחורנית של טרנזקצית אחדות:

Cascading Rollback

T1 T2 T3

read(A)read(B)write(A)

read(A)write(A)

read(A)read(C)

Page 20: התאוששות ( recovery )

הפרוטוקולים הבסיסיים לבקרת בו-זמניות עלולים ליצור תזמונים )בו-זמניים( שההתאוששות מהם אינה אפשרית.

Non -Recoverable Schedules

T4 T5

read(A)write(A)

read(A)write(C)commit

read(B)

Page 21: התאוששות ( recovery )

כאשר טרנזקציות מתבצעות בו זמנית, רשומת היומן של L< , כאשר checkpoint, Lנקודת-הביקורת תהיה מהצורה >

היא רשימה של כל הטרנזקציות הפעילות בזמן נקודת-הביקורת.

בזמן ההתאוששות המערכת בונה שתי רשימות של טרנזקציות:undo-list ו redo-list על ידי סריקת היומן אחורנית עד ה

checkpoint:הראשון שפוגשים .redo-list ל Ti< - מוסיפים את Ti, commitsלכל רשומת >• אם undo-list ל Ti< - מוסיפים את Ti, startsלכל רשומת >•

Ti אינה שייכת ל redo-list. ב Ti. כל כל טרנזקציה L לאחר סריקת כל היומן, בודקים את

L שאינה ב redo-list מוסיפים ל undo-list.

(Log Scanningסריקת יומן )

Page 22: התאוששות ( recovery )

תהליך ההתאוששות: לכל undo. סורקים את היומן )שוב( אחורנית ומבצעים 1

. בשלב זה undo-list ב ל Tiרשומת יומן השייכת לטרנזקציה . הסריקה מפסיקה רק redo-listמתעלמים מפעולות יומן שב

של טרנזקציות ב ל <Ti, start>אחרי שנמצאו כל רשומות undo-list.

< העדכנית ביותר.checkpoint, L. מאתרים את רשומת >2 לכל רשומת יומן redo. סורקים את היומן קדימה ומבצעים 3

. בשלב זה מתעלמים redo-list ב Tiהשייכת לטרנזקציה . undo-listמפעולות יומן שב

סריקת יומן - המשך

Page 23: התאוששות ( recovery )

- מערכת נמצאת בנעילת מוות אם (deadlockנעילת מוות ) T0{ כך שT0,T1,…Tnקיימת קבוצה של טרנזקציות }

ממתינה לפריט T1, T1ממתינה לפריט מידע שמחזיקה ממתינה לפריט מידע שמחזיקה Tn … ו T2מידע שמחזיקה

T0.

גישות לטיפול בנעילת מוות(detection & recoveryגילוי והתרה )•(preventionמניעה )•

טיפול בנעילות מוות

Page 24: התאוששות ( recovery )

wait-for graph( הוא גרף מכוון G=(V,E כאשר V קבוצה של כוללת כל V קבוצה של קשתות מכוונות. Eצמתים ו

E תהיה ב Tj ל Tiהטרנזקציות במערכת. קשת מכוונת מ .Tj מחכה לפריט מידע כלשהו המוחזק ע”י Tiאם

-wait-forיש במערכת נעילת מוות אםם קיים מעגל מכוון ב graph.

התאוששות מנעילת מוות:בחירת קורבן•גלגול אחורנית של ה”קורבן”•

גילוי של נעילות מוות והתרתן

Page 25: התאוששות ( recovery )

גישות למניעת נעילות מוותנעילת כל פריטי המידע לפני תחילת הביצוע של •

הטרנזקציההגדרת סדר חלקי על פריטי המידע•timeoutשיטות של • :rollbackהגדרת זכויות קדימה בין טרנזקציות ושימוש ב •

wound-waitו wait-dieפרוטוקולי

מניעה של נעילות מוות

Page 26: התאוששות ( recovery )

timeoutשיטות

לה • להמתין רשאית נעילה שבקשה טרנזקציה . קצוב זמן פרק

הזה – • הזמן פרק תוך אושרה לא הנעילה אםאחורנית מגולגלת המבקשת הטרנזקציה

מחדש להתבצע ומתחילה• , יותר או אחת מוות נעילת של במקרה

יגולגלו המוות לנעילת הקשורות מהטרנזקציותאחורנית

Page 27: התאוששות ( recovery )

Wound-wait, Wait-die

כל טרנזקציה מקבלת חותמת זמן ייעודית )שונה מזו של בקרת בו זמניות(•טרנזקציה שומרת על חותמת הזמן המקורית שלה גם אם היא מגולגלת אחורנית.•

בנעילה לא Tjמבקשת פריט מידע המוחזק על ידי Tiנניח שטרנזקציה •קומפטיבילית:

#wait-die( אם :TS(Ti) < TS(Tj ( Ti )זקנה יותר Ti( רשאית להמתין wait אחרת . )Ti (.die)צעירה יותר( מגולגלת אחורנית )

רק טרנזקציות זקנות רשאיות להמתין לפריטי מידע נעולים. במילים פשוטות:#טרנזקציות צעירות אינן מורשות להמתין אלא הן מגולגלות אחורנית.

טרנזקציה עלולה "למות" מספר פעמים לפני שהיא מקבל פריט מידע מסוים#

#wound-wait( אם :TS(Ti) < TS(Tj ( Ti )זקנה יותר Tj( מגולגלת אחורנית Ti פוגעת (.wait)צעירה יותר( מחכה )Ti ( . אחרת Tjב

טרנזקציות צעירות רשאיות להמתין לפריטי מידע נעולים. טרנזקציות במילים פשוטות:#זקנות המבקשות פריט מידע נעול גורמות לגלגול אחורנית של הטרנזקציה הצעירה

המחזיקה אותו.wait-dieפרוטוקול פחות מועד לגלגולים מאשר #

Page 28: התאוששות ( recovery )

Wound-wait, Wait-die

טרנזקציות • הפרוטוקולים שבשני כיוון נמנעת הרעבההמקוריים הזמן תגי על שומרות אחורנית שמגולגלות , ובשלב, ביותר לזקנות הופכות דבר של ובסופו שלהן

. לסיים אפשרות להן תהיה זה

אינו • שהפרוטוקול כיוון נמנעות מוות נעילותב המתנות של מעגל wait-for-graph מאפשר

לזקנות wound-waitב– להמתין יכולות צעירות טרנזקציות רקמהן

מהן wait-dieב– לצעירות להמתין יכולות זקנות טרנזקציות רק