PracticU

serializable - transaction isolation level

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › serializable - transaction isolation level
מילון מושגים:
SQL Server - מערכת ניהול מסדי נתונים יחסיים של מיקרוסופט, הנשלטת בשפת T-SQL.
שרת - מחשב או תוכנה שמספקים שירות למחשבים אחרים (לקוחות) ברשת, למשל אחסון קבצים, אתר אינטרנט או מסד נתונים, ומגיבים לבקשות שלהם.
קומיט - פעולה ב-Git ששומרת תמונת מצב של השינויים במאגר יחד עם תיאור. גם אישור סופי של שינויים במסד נתונים.
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.

serializable - transaction isolation level
ההרצאה מסבירה את רמת הבידוד Snapshot ב-SQL Server: טרנזקציה שרואה את הנתונים כפי שהיו בתחילתה, בלי לחסום עדכונים של טרנזקציות אחרות.
השלבים העיקריים
1. הגדרה ברמת בסיס הנתונים: מפעילים את האפשרות ALLOW_SNAPSHOT_ISOLATION. לפני כן סוגרים את כל החיבורים לבסיס הנתונים, בעזרת SET SINGLE_USER WITH ROLLBACK IMMEDIATE, ואחר כך מחזירים אותו ל-MULTI_USER.
2. הגדרה ברמת הטרנזקציה: בתחילת כל טרנזקציה מסמנים SET TRANSACTION ISOLATION LEVEL SNAPSHOT. ברירת המחדל היא READ COMMITTED.
3. קריאה עקבית: הטרנזקציה שפתחה קריאה רואה את הנתונים כפי שהיו בזמן פתיחתה. גם אם טרנזקציה אחרת עדכנה את הנתונים ועשתה COMMIT, הקריאה הראשונה עדיין מקבלת את הערך הישן.
4. בלי נעילות: עדכון שנעשה בטרנזקציה אחרת נשמר בצד, ולא חוסם את הקריאה. גם ROLLBACK של עדכון לא נראה לטרנזקציה הקוראת.
5. מיזוג בסיום: כשהטרנזקציה הארוכה מסתיימת, הגרסאות של הנתונים מתמזגות, והקריאה הבאה רואה את הערך העדכני.
פקודות והגדרות
- ALTER DATABASE Northwind SET ALLOW_SNAPSHOT_ISOLATION ON
- SET TRANSACTION ISOLATION LEVEL SNAPSHOT
טעויות נפוצות
- אי אפשר להפעיל את ההגדרה ברמת בסיס הנתונים כשיש חיבורים פתוחים, ולכן צריך לסגור אותם קודם.
- עדכונים שנעשו בתוך הטרנזקציה עצמה נראים לה, אבל עדכונים מבחוץ לא נראים עד לסיומה.
שימו לב
הבידוד Snapshot מאפשר לקרוא נתונים עקביים בלי לעכב כותבים, במחיר של שמירת גרסאות נתונים נוספות.
השיעור הבא בקורס: snapshot

פרקי ההרצאה: serializable - transaction isolation level

  1. 00:00

    רמת בידוד Snapshot ומה היא קובעת

  2. 00:55

    הגדרת Snapshot ברמת הדאטאבייס

  3. 02:06

    טרנזקציה שקוראת בתוך Snapshot

  4. 02:40

    עדכון מחיבור אחר בזמן הטרנזקציה

  5. 03:22

    גרסאות ישנות של הרשומה (Row Versioning)

  6. 04:20

    מיזוג הגרסאות וקריאה נקייה

  7. 04:55

    שני תנאים להפעלת Snapshot

תמלול ההרצאה: serializable - transaction isolation level

הטקסט המלא של הדקות הראשונות בהרצאה «serializable - transaction isolation level» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:20

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

  2. 00:42

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

  3. 00:57

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

  4. 01:08

    ברמת הדאטאבס אנחנו צריכים לעשות אלטר דאטאבס להדליק את ה-Allowed Snapshot Isolation והן בתחילתה של טרנזקציה אנחנו צריכים לסמן שה-Isolation Level שלנו הוא Snapshot.

  5. 01:20

    כדי לעשות זאת ברמה של הדאטאבס אנחנו אנחנו צריכים לסגור ראשית את כל הקונקשנים. על מנת לבצע פקודת אלתר דאטאבייס Northwind אנחנו סוגרים את כל הקונקשנים לפי הפקודה שלפניכם Set Single User with Rollback Immediately.

  6. 01:34

    סגרתי את כל הקונקשנים ואז אני יכול לפנות ולבצע את אלתר דאטאבייס Hello Snapshot Isolation תדליק לי את האפשרות לעבוד ברמת בידול של סנאפשוט.

  7. 01:45

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

  8. 02:11

    מסמנים שהיא תהיה סנאפ שוט בגין טרנזקשן ואנחנו שולפים נתונים את כל הרשומות בהם first name שווה ננסי אנחנו מגלים שיש לי שלוש שורות כאלה בתוך הטבלה, ה-Nodes שלהם קרקרק, ובמקביל נפתחת לה טרנזקציה אחרת.

  9. 02:28

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

  10. 02:47

    שימו לב להפתעתנו הרבה האישום התקבל one rose affected אין לנו כאן נעילות אתה רוצה לעדכן לנתון בבקשה תעדכן אתה רוצה לבצע לו גם קומיט הקומיט מתקבל קומיט completed successfully הכנסת כאן לנתון חדש עדכנת רשומה חדשה לעובדת מספר 1 זוהי ננסי עדכנת לה בתוכנות סטרינג חדש האם הטרנזקציה שנמצאת מצד שמאל רואה נתונים אלו הטרנזקציה

  11. 03:08

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

  12. 03:39

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

  13. 04:01

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

  14. 04:20

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

  15. 04:47

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

  16. 05:01

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

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

ההרצאה הקודמת: Repeatable Reads

ההרצאה הבאה: snapshot

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

  • Serializable
  • Server Transaction
  • הגדרת הרשאות - רמות 2-14 enable level

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

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