PracticU

סיכום על טרנזקציות SQL

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › סיכום על טרנזקציות SQL
מילון מושגים:
קומיט - פעולה ב-Git ששומרת תמונת מצב של השינויים במאגר יחד עם תיאור. גם אישור סופי של שינויים במסד נתונים.
רשומה - שורה בטבלת מסד נתונים שמרכזת את כל השדות של פריט אחד, למשל כל הפרטים של לקוח יחיד.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.

סיכום על טרנזקציות SQL
הסיכום עובר על רמות הבידוד (isolation level) ב-SQL, ועל הבעיות שכל רמה פותרת או משאירה פתוחות כשטרנזקציות רצות במקביל.
הבעיות והפתרונות
1. Dirty Reads: קריאת נתונים שנכתבו בטרנזקציה שטרם בוצע לה Commit ובוטלה אחר כך. נפתרת ברמה Read Committed, שקוראת רק נתונים שבוצע להם Commit.
2. Non-Repeatable Reads: שתי קריאות באותה טרנזקציה מחזירות ערכים שונים, כי מישהו עדכן בינתיים. נפתרת ב-Repeatable Read, שנועל את הרשומות שנקראו.
3. Lost Updates: עדכונים של טרנזקציה ארוכה נדרסים או נכנסים להמתנה. גם הם נפתרים ב-Repeatable Read.
4. Phantom Reads: שורות חדשות שנוספו במהלך הטרנזקציה מופיעות בקריאה נוספת. Repeatable Read לא פותר את זה, ונדרש Serializable, שנועל את הטבלה מפני הוספות.
5. Snapshot: ב-Read Committed יש נעילות רבות. ב-Snapshot כל קורא רואה גרסה של הרשומה מלפני השינוי, והעדכון נחשף לאחרים רק אחרי Commit.
Read Committed היא רמת ברירת המחדל במסד הנתונים, ולכן חשוב להכיר את הבעיות שהיא משאירה פתוחות.

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

  1. 00:00

    סיכום רמות Isolation בטרנזקציות

  2. 00:40

    Dirty Reads ופתרונו ב-Read Committed

  3. 01:22

    Non-Repeatable Reads ו-Repeatable Read

  4. 02:00

    Lost Updates ועדכונים שאובדים

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

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

  1. 00:20

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

  2. 00:49

    Level הוא Read Uncoded, אולם פתרנו את הבעיה הזאת כאשר עלינו לרמה של Read Data Committed בלבד. Read Committed אנחנו קוראים נתונים רק כאלו שבוצע בגינם Committed, אולם בעיה אחרת שנחשפנו אליה זה ה-Non-Repeatable Reads, טרנזקציה אחת שיש בתוכה שני סלקטים כאשר השאיפה

  3. 01:16

    שלי ששני הסלקטים הללו אף שהם מופיעים בתחילתה של הטרנזקציה והשני בסיומה יקראו את אותם נתונים בדיוק צו זה היה בלתי אפשרי בעבודה מול read committed ולכן עברנו ל-isolation level המתקדם יותר שהוא ה-repeatable read מצב שבו בעת תחילתה של הטרנזקציה אנחנו בעצם נועלים את הרשומות ולא מאפשרים לאף משתמש אחר בכל קונקשן שהוא להתחבר לתוך הדאטאבייס,

  4. 01:49

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

  5. 02:04

    נקודה נוספת בעייתית שראינו בעבודה מול data committed זה ה-lost מול read committed זהו ה-lost updates, עיבוד עדכונים. בשעה שאני פותח טרנזקציה שהיא ארוכה, היא שולפת נתונים ורק בסוף בסוף בסוף מעדכנת אותם בתוך הדאטאפס.

  6. 02:24

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

  7. 02:42

    זהו ה-Lost Updates ואת שתי הבעיות הללו שלפניכם

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

ההרצאה הקודמת: snapshot

ההרצאה הבאה: CLR - מבוא

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

  • LINQ ל- SQL
  • התקנה של SQL
  • קורס BI - התקנת שרת SQL
  • התקנה של SQL על וונדוס 10

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

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