PracticU

Read Committed / UnCommitted

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › Read Committed / UnCommitted
Read Committed / UnCommitted
השיעור עוסק בשתי רמות בידוד נמוכות בדאטהבייס: Read Uncommitted ו-Read Committed, והבעיות שכל אחת מהן פותרת או יוצרת.
Dirty Reads
קריאת נתונים שלא אושרו, כלומר נתונים שטרנזקציה אחרת עדיין משנה. הבעיה: אם הטרנזקציה מתבטלת, הנתון שנקרא מעולם לא היה קיים בדאטהבייס באופן סופי.
Read Uncommitted
- רמת הבידוד הנמוכה ביותר.
- לא נדרשות נעילות לקריאה, ולכן הקריאה לא ממתינה לטרנזקציה אחרת.
- החיסרון: הקורא עלול לקבל נתונים שגויים.
בהדגמה טרנזקציה עדכנה את עמודת Notes של עובדת בטבלת Employees, וקריאה ב-Read Uncommitted החזירה את הערך המעודכן, אף שהטרנזקציה טרם הסתיימה. כשהטרנזקציה בוטלה, הערך חזר למצבו הקודם.
Read Committed
- קוראים רק נתונים שאושרו בדאטהבייס.
- הקריאה ממתינה אם הנתון נעול על ידי טרנזקציה אחרת, עד שהטרנזקציה מסתיימת.
- בהדגמה הקריאה המתינה עד סיום העדכון, ואז קיבלה את הערך המאושר.
- היתרון: אין Dirty Reads. החיסרון: יש נעילות והמתנה.
ההבדל בין שתי הרמות הוא בין מהירות לבין אמינות הנתונים שנקראים.
השיעור הבא בקורס: Repeatable Reads

פרקי ההרצאה: Read Committed / UnCommitted

  1. 00:00

    רמות בידוד בין טרנזקציות ומטרתן

  2. 00:56

    Dirty Reads: קריאת נתונים מלוכלכים

  3. 01:31

    דוגמה: עדכון עובדת בחיבור ראשון

  4. 02:08

    Read Uncommitted - רמת הבידוד הנמוכה ביותר

  5. 02:44

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

  6. 03:22

    שליפת נתון שטרם נשמר בדאטאבייס

  7. 03:59

    הנתון שנקרא שגוי ולא היה קיים

  8. 04:36

    הסכנה בקריאה ממצב Uncommitted

תמלול ההרצאה: Read Committed / UnCommitted

הטקסט המלא של הדקות הראשונות בהרצאה «Read Committed / UnCommitted» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:21

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

  2. 00:46

    מה עם רמות הבידול ואילו בעיות הם פותרים לנו? את זאת אנחנו נראה בשיעורים הקרובים. הראייה הראשונה שאותה אנחנו רואים כבר בשקף כאן שלפנינו, הנושא של Dirty Reets.

  3. 00:56

    ארבע בעיות שנגרמות או נפתרות על ידי רמות בידול שונות אנחנו נראה בשיעורים הקרובים. השיעור שלפנינו דן בנושא של Dirty Reets, קריאת נתונים מלוכלכים. ולמה הכוונה במושג הזה Dirty Reets, נתונים מלוכלכים?

  4. 01:11

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

  5. 01:26

    בואו נתחבר לדאטאבס ונראה את הדוגמה שלפנינו. בדוגמה שלפנינו אנחנו מדברים על רשומה ספציפית בתוך הדאטאבס.

  6. 01:34

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

  7. 01:55

    קונקשן ראשון, עובד מעדכן את הרשומה של עובד מספר 1, מכניס לה מחרוזת, מחרוזת רמית לחלוטין שבחרתי אותה ברגע זה, This is new string from connection 1, מעדכן את זה, אבל שימו לב מהי רמת הבידול.

  8. 02:11

    רמת הבידול, כך אנחנו מציינים זאת, וזה הסינטקס של הפקודה, Transaction, תגדיר לי את הטרנזקציה, מבחינת Isolation Level, מבחינת רמת הבידול, לרמת בידול שנקראת Read Uncommited, קריאת נתונים שהם לא Committed, שהם לא אושרו מול הדאטאבייס, לא אושרו באופן סופי בעת סיום הטרנזקציה.

  9. 02:35

    Read Un Committed, אגב, זוהי רמת הבידול הנמוכה ביותר, זוהי רמת בידול שאינה דורשת נעילות של הנתונים. הגם שאני מעדכן נתון, היא לא הייתה רשומה באופן אקסקלוסיבי, לא הייתה טבלה.

  10. 02:49

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

  11. 03:00

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

  12. 03:08

    אני מריץ את הטרנזקציה, הטרנזקציה כעת בעיצומה. עדכנה לי מחרוזת חדשה בתוך נאוץ עבור עובדת מספר 1, עבור ננסי. באותה זמנית, בו זמנית, נכנסת ל-Connection אחר ומתחיל לשלוף נתונים מתוך ה-Database, שוב פעם עובד ב-Mode של Isolation Level Read Uncommitted, קורא נתונים שהם לא Committed על מנת להיות משוחרר מנעילה כזו או אחרת,

  13. 03:31

    קורא את הנתונים, שולף, ושימו לב מה הוא מקבל, הוא מקבל כאן מחרוזת שעודכנה אבל טרם בוצעה בגינה Commit או Rollback, הוא קורא בעצם dirty reads, הוא קורא נתונים מלוכלכים, נתונים שעדיין עובדים עליהם, שהם עדיין חלק מטרנזקציה.

  14. 03:51

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

  15. 04:14

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

  16. 04:28

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

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: transaction save point

ההרצאה הבאה: Repeatable Reads

הרצאות קשורות מקורסים אחרים

  • Write and Read Binary File

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI