none
הפעלת טריגר על טבלה "כבדה" RRS feed

  • שאלה

  • היי,

    השאלה שלי היא כזאת : יש לי טבלה עם מליוני  רשומות  -- הועלתה דרישה  לבצע עדכון של  שדה מסוג datetime  בכל עדכון של רשומה או הכנסה של רשומה.

    כרגע זאת הדרישה . ( רוצים לדעת מתי רשומות מתעדכנות)

    יש לי שתי התלבטויות עיקריות :

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

    2) לצור טריגר  שיעשה  את העבודה בשבילי החaש העיקרי של זה ביצועים - הטבלה מאוד כבדה ( יש עליה הרבה  טרנזקציות - עדכונים ו update )

     לפני שאני עובד על בסיס הניסוי והתהייה יש למשהוא  רעיון אחר?

    ושאלה נוספת - האם ניתן לשים אינדקס על טבלטת inserted  כדי לשפר את ביצועי הטריגר?

    תודה מראש

    שרון

     

     

     

     

     

     

     

     

     

    יום חמישי 08 דצמבר 2011 12:16

תשובות

  • הי שרון,

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

    מה שאני ממליץ זה כך:

    בטבלת ה- Audits הטבלה ששומרת את העדכונים, תגדיר טור, column, מסוג Bigint ו- Identity.

    השדה הנ"ל יהיה Primary Key אף על פי שהוא לא טבעי.

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

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

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

     

    אופציה נוספת זה במידה ואתה עובד ב- SQL Server 2008 זה להשתמש ב- CDC.

    להלן הלינק - http://msdn.microsoft.com/en-us/library/bb522489.aspx

    בהצלחה


    אסף שלם
    • סומן כתשובה על-ידי sharonof יום ראשון 11 דצמבר 2011 08:38
    שבת 10 דצמבר 2011 19:14

כל התגובות

  • הי שרון,

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

    מה שאני ממליץ זה כך:

    בטבלת ה- Audits הטבלה ששומרת את העדכונים, תגדיר טור, column, מסוג Bigint ו- Identity.

    השדה הנ"ל יהיה Primary Key אף על פי שהוא לא טבעי.

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

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

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

     

    אופציה נוספת זה במידה ואתה עובד ב- SQL Server 2008 זה להשתמש ב- CDC.

    להלן הלינק - http://msdn.microsoft.com/en-us/library/bb522489.aspx

    בהצלחה


    אסף שלם
    • סומן כתשובה על-ידי sharonof יום ראשון 11 דצמבר 2011 08:38
    שבת 10 דצמבר 2011 19:14
  •  היי אסף,

    אני בהחלט לממש את הפיתרון שלך :)

     תודה שרון

     

    יום ראשון 11 דצמבר 2011 08:38