התאוששות ( recovery )

Post on 01-Jan-2016

29 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

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

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

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

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

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

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

read (A)

A = A - 50

write(A)

read(B)

B = B + 50

write(B)

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

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

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

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

. ערך חדש•

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

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

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

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

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

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

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

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

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

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

דוגמא

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

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

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

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

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

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

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

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

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

דוגמא

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

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

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

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

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

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

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

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

checkpoints

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

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

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

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

checkpoints

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

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

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

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

Shadow paging - Basics

1234

n

טבלת דפים page table

5

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

Shadow paging

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

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

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

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

shadow and current page tables

1234

n

current page table

5

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

1234

n

shadow page table

5

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

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

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

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

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

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

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

•Cascade rollback

•Non-recoverable schedules

•deadlocks

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

Cascading Rollback

T1 T2 T3

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

read(A)write(A)

read(A)read(C)

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

Non -Recoverable Schedules

T4 T5

read(A)write(A)

read(A)write(C)commit

read(B)

כאשר טרנזקציות מתבצעות בו זמנית, רשומת היומן של 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סריקת יומן )

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

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

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

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

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

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

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

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

T0.

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

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

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

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

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

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

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

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

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

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

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

timeoutשיטות

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

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

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

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

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פרוטוקול פחות מועד לגלגולים מאשר #

Wound-wait, Wait-die

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

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

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

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

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

top related