none
Replication Performance RRS feed

  • שאלה

  • שלום לכולם,

    אני הקמתי בהצלחה - Server - Client Marge Replication with Pull Subscribers.

    אך יש לי בעית ביצועים בשרת ה- Publisher, כל פעולת DML לוקחת הרבה יותר זמן מהרגיל. כאשר בדקתי מה שונה - ראיתי שבכל עדכון של מידע מתבצעות קריאות רבות מטבלאות מערכת של הרפליקציה ובעיקר מטבלאות בשם : MSmerge_contents ו 'MSmerge_current_partition_mappings'

    כדי לתקן את הבעיה הזו שינית את הפאבלישר פרמטר - precompute partitions מ- True ל- False.

    שינוי זה האומנם פתר את בעיית הביצועיים, אך יצר באג אחר- הסנכרון של המידע ל- subsribers לא עובד טוב  כאשר אני משתמש ב- Dynamic parameter - Host_name.

    על מנת שהמידע יעבור מסונן בצורה טובה, אני צריך לבצע אחרי כל שינוי של מידע ב- Publisher , התחול של הנתונים - reinitialize subsciptions.

    יש למישהו עצה איך לפתור את בעיית הביצועים מבלי לשנות את ה- precompute partitions? או לחילופין למה שינוי הפרמטר יוצר באג בסינכרון

    הנתונים כאשר משתמשים בפרמטר דינמי.

    תודה מראש.

    יום רביעי 26 ינואר 2011 15:59

תשובות

כל התגובות

  • הי,

    יכול להיות שאתה סובל מניהול על טבלאות הניהול של הרפליקציה, פעולות ה- DML מעדכנות מספר רב של נתונים?

    במידה וכן זו יכולה להיות הסיבה.

    תעבור על ה post הנ"ל אולי הוא יכול לכוון אותך לפתרון.

    http://social.msdn.microsoft.com/forums/en-US/sqlreplication/thread/d666d26a-9c84-422b-9f84-0213d2f71ad9

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

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

    מה אופי השינויים בטבלה? עדכוני batch או רשומה רשומה?

    מה עוד קורה בשרת בזמן הסינכרון? 

    יום טוב. 


    אסף שלם
    יום חמישי 27 ינואר 2011 09:10
  • אשמח לפרט :)

    ה- Publication בנוי ממספר רב של טבלאות מקושרות (Articals), כ- 50 טבלאות, אשר מקושרות אחד לשני ב- Join אחד ארוך.

    הטבלה הראשונה ב- join מסוננן על ידי ה- host_name שמגיע מה- subscriber. על ידי כך מסונן  המידע הרלונטי לאותו מנוי.

    כמות הרשומות בטבלאות נא בין מספר רשומות בודדות (ברוב הטבלאות) עד 1000-2000 רשומות (בחלק קטן של הטבלאות).

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

    כאשר אני משווה את ה- statistics IO בין עדכון בלי Publication לעדכון עם Publication אני רואה שהבעיה היא בקריאה מטבלאות המערכת.

    ***כמו שכתבתי עיקר הקריאות הן מטבלאות - : MSmerge_contents ו 'MSmerge_current_partition_mappings'

     

    להל"ן צילום של ה- statistic IO בזמן הכנסת רשומה אחת בודדת ללא רפליקציה:

     

    Table 'EZF_MD_Source'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Kiosk'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

     

    סך הכל  - logical reads 4

     

    להל"ן צילום של ה- statistic IO בסמן הכנסת אותה רשומה עם רפליקציה:

     

    Table 'EZF_MD_Source'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Kiosk'. Scan count 0, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

     

    Table 'sysmergearticles'. Scan count 1, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_tombstone'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 0, logical reads 16, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_current_partition_mappings'. Scan count 0, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_partition_groups'. Scan count 1, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_RepGroups_Kiosks'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Source'. Scan count 1, logical reads 20, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'sysmergearticles'. Scan count 1, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 0, logical reads 33, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Source'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_current_partition_mappings'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'Worktable'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_partition_groups'. Scan count 1, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Source'. Scan count 0, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 0, logical reads 54, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Technician'. Scan count 1, logical reads 19, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Source'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 1, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 0, logical reads 9, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Source'. Scan count 0, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'sysmergearticles'. Scan count 1, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 0, logical reads 21, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Source'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_current_partition_mappings'. Scan count 4, logical reads 501, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 1, logical reads 317, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 1, logical reads 9, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Source'. Scan count 0, logical reads 8, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Kiosk'. Scan count 1, logical reads 9, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_partition_groups'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Store'. Scan count 1, logical reads 9, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 0, logical reads 66, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'sysmergearticles'. Scan count 1, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 1, logical reads 15, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Store'. Scan count 0, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_current_partition_mappings'. Scan count 4, logical reads 8190, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 1, logical reads 4969, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_partition_groups'. Scan count 20, logical reads 80, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Source'. Scan count 0, logical reads 44, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 0, logical reads 44, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Store'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Kiosk'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_past_partition_mappings'. Scan count 1, logical reads 8, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Store'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 0, logical reads 12, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_RegionBrands'. Scan count 3, logical reads 16, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 0, logical reads 30, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'sysmergearticles'. Scan count 1, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_genhistory'. Scan count 1, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 1, logical reads 63, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_RegionBrands'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_current_partition_mappings'. Scan count 16, logical reads 546, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 1, logical reads 365, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_RegionBrands'. Scan count 3, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_partition_groups'. Scan count 4, logical reads 16, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Kiosk'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Source'. Scan count 0, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_past_partition_mappings'. Scan count 1, logical reads 32, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_RegionBrands'. Scan count 6, logical reads 12, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'EZF_MD_Regions'. Scan count 0, logical reads 12, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    Table 'MSmerge_contents'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

     

    סך הכל  - הרבה.

    כמו שניתן לראות ההבדל הוא גדול.

    אשמח לכל עזרה בנושא.

    יום חמישי 27 ינואר 2011 16:00
  • הי,

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

    זה בפועל מה שאתה רואה ב- IO Statistics.

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

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

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

    מקווה שזה ברור מספיק.

     


    אסף שלם
    יום חמישי 27 ינואר 2011 22:28
  • תודה,

    כל הטבלאות יכולות להתעדכן.

    אני חושב שהבנתי את הצעתך, אבל הבעיה היא שחשוב לשמור על המבנה הטבלאתי של ה- DB.

    אן יש לך רעיון אחר אשמח לשמוע.

    כרגע אני פותר את הבעיה על ידי שינוי הפרמטר - precompute partitions ל- False והרצת reinitialize subsciptions אחרי כל עדכון מידע ב- Publisher.

    לא אידיאלי אבל עובד.

     

    יום ראשון 30 ינואר 2011 08:22
  • הי,

    הגדרת רפליקציה על כל טבלה בנפרד במקום Select  אחד עם 50 Joins לא בא בחשבון?

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

    בגדול מה שאתה צריך לשאוף אליו זה שבזמן עדכון רשומה יהיה חיפוש, כמה שיותר ממוקד, בטבלאות ה- System של הרפליקציה.

    יום טוב, 

     


    אסף שלם
    יום ראשון 30 ינואר 2011 09:13
  • תודה,

     

    יום טוב.

    • סומן כתשובה על-ידי Rani W יום שני 31 ינואר 2011 15:41
    יום ראשון 30 ינואר 2011 10:51