רמות הבידוד בשכפול

בדף הזה מוסבר איך להפעיל רמת בידוד של טרנזקציה בצילומי מצב של מסדי נתונים של Microsoft SQL Server ו-MySQL בעבודות שכפול של Cloud Data Fusion.

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

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

שרת SQL

כדי לתעד שינויים בטבלאות המקור במסד נתונים של SQL Server, עבודת השכפול משתמשת במחבר Debezium. במהלך השלב snapshotting,‏ Debezium מקבל נעילות בהתאם לsnapshot.isolation.mode שהוגדר.

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

מצב בידוד נעילות שנרכשו עקביות הנתונים
read_uncommitted ללא לא.
read_committed נעילות משותפות על קבוצת שורות בכל פעם חלקי. רשומה שנוספה יכולה להופיע פעמיים: פעם אחת בתמונת המצב הראשונית ופעם אחת בשלב הסטרימינג.
repeatable_read
(ברירת מחדל)
מנעולים משותפים בכל השורות חלקי. רשומה שנוספה יכולה להופיע פעמיים: פעם אחת בתמונת המצב הראשונית ופעם אחת בשלב הסטרימינג.
snapshot ללא מלא.
exclusive נעילה בלעדית של כל הטבלאות מלא.

מידע נוסף על מצבי בידוד זמין במאמר בנושא הגדרת רמת בידוד של טרנזקציות.

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

מומלץ להשתמש ברפליקציה עם בידוד snapshot אם הוא כבר מופעל במסד הנתונים של המקור, כי הוא מספק עקביות מלאה של הנתונים בלי לנעול את הטבלאות. אם האפשרות לא מופעלת, כדאי לקרוא על ההשפעה של רמות בידוד שמבוססות על ניהול גרסאות של שורות במנוע מסד הנתונים של SQL Server לפני שמפעילים אותה.

לחלופין, אפשר להשתמש במצב בידוד read_committed, שלא נועל את הטבלאות במהלך שלב יצירת התמונה.

הפעלת בידוד snapshot במשימת רפליקציה

  1. מפעילים בידוד snapshot במסד הנתונים של SQL Server:

    ALTER DATABASE DATABASE_NAME
    SET ALLOW_SNAPSHOT_ISOLATION ON
    

    מחליפים את DATABASE_NAME בשם של מסד הנתונים של SQL Server.

  2. מגדירים את ארגומנט זמן הריצה snapshot.isolation.mode ל-snapshot. מידע נוסף מופיע במאמר העברת ארגומנט של זמן ריצה לעבודת שכפול.

MySQL

כדי לתעד שינויים בטבלאות המקור במסד נתונים של MySQL, עבודת השכפול משתמשת במחבר Debezium. במהלך השלב snapshotting,‏ Debezium מקבל נעילות בהתאם לsnapshot.locking.mode שהוגדר.

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

כדי למנוע נעילות, מגדירים את המצב לnone.

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

שינוי התנהגות הנעילה במהלך הצילום של תמונת מצב ב-MySQL

  • כדי לשנות את אופן הנעילה של תמונת מצב במסד הנתונים של MySQL, צריך להגדיר את ארגומנט זמן הריצה, snapshot.locking.mode property, לערך מתאים של מצב נעילה.

מידע נוסף מופיע במאמר העברת ארגומנט של Debezium לעבודת שכפול.

מגבלות

  • שכפול ב-Cloud Data Fusion תומך ב-Debezium Connector גרסה 1.3.

מקורות Oracle ב-Cloud Data Fusion

שכפול ממקורות Oracle ב-Cloud Data Fusion מבוסס על Datastream. ‫Datastream לא נועל טבלאות.

המאמרים הבאים