none
sql compatibility mode RRS feed

  • שאלה

  • כאשר אני מבצע שחזור של קובץ SQL2000 ל SQL2008 הוא מריץ את בסיס הנתונים במצב תאימות ל sql2000

    השאלה היא:

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

    יום שלישי 08 מאי 2012 07:00

תשובות

  • יעילות של מה? היעילות של תהליך השחזור או העבודה בהמשך עם מסד נתונים בפורמט 2000 במקום 2008?

    אין בעיה של יעילות של תהליך השחזור אצמו אבל אם רמת הגרסה תהיה נמוכה יותר אז תאבד כמה פיצ'רים שלא תוכל לעשות בהם שימוש בהמשך במסד הנתונים הזה ולכן אין סיבה לא לבצע שינוי אחר כך נראה לי (כרגע לאור זה שאין אפיון כמובן ואנחנו לא יודעים אם אתה דווקא נעזר בפיצ'ר של 2000 שבהתאמה לגרסה אחרת לא יעבוד לך כמצופה)

    לדוגמה הנה הבדלים בין ה 2000 ל 2005 לקוח מתוך ה BOL 2005

    Compatibility level setting of 80 or earlier Compatibility level setting of 90 Possibility of impact
    For locking hints in the FROM clause, the WITH keyword is always optional. With some exceptions, table hints are supported in the FROM clause only when the hints are specified with the WITH keyword. For more information, see FROM (Transact-SQL). High
    The *= and =* operators for outer join are supported with a warning message. These operators are not supported; the OUTER JOIN keyword should be used. High
    SET XACT_ABORT OFF is allowed inside a trigger. SET XACT_ABORT OFF is not allowed inside a trigger. Medium


    signature

    • נערך על-ידי pituachMVP, Editor יום שלישי 08 מאי 2012 08:36
    • סומן כתשובה על-ידי tetitu יום שלישי 08 מאי 2012 14:24
    יום שלישי 08 מאי 2012 08:35
    מנחה דיון
  • שלום רב,

    המטרה של ה-  compatibility level הינה להגדיר תחת איזה קוד t-sql ירוץ בסיס הנתונים.

    כידוע ישנם סוגי קוד שעבדו ב- 2000 ומ- 2005 הינם חוקיים - לדוגמא: *= במקום left join.

    כלומר compatibility level משפיע בעיקר SQL syntax ועל query parsing ולא אמור להשפיע על הביצועים.

    לפרטים נוספים:

    http://serverfault.com/questions/76777/would-the-database-compatibility-level-affect-performance

    בהצלחה.


    Best Regards,

    Itai Binyamin, MVP
    SQL Server Group Manager
    Veracity Group

    www.Veracity-Group.com
    www.ItaiBinyamin.Blogspot.com

    • הוצע כתשובה על-ידי Ami Levin יום שלישי 08 מאי 2012 11:47
    • סומן כתשובה על-ידי tetitu יום שלישי 08 מאי 2012 14:24
    יום שלישי 08 מאי 2012 08:36
  • שלום Tetitu,

    כמו שכתבת, יש הרבה מאוד שיפורים ותוספות בין גירסא לגירסא, ויש להניח שביצועי המערכת שלך ישתפרו במעבר מ-SQL Server 2000 ל-SQL Server 2008, אם כי לא בהכרח. אבל אין לזה שום קשר ל-Compatibility Level. כאשר אתה משחזר בסיס נתונים ב-SQL Server 2008, בזמן השחזור הקבצים עוברים הסבה לפורמט של SQL Server 2008, ובסיס הנתונים שלך ירוץ מעתה ואילך באמצעות מנוע של SQL Server 2008. זה קורה בכל מקרה, בלי קשר ל-Compatibility Level. אין אפשרות "להריץ" בסיס נתונים בשרת SQL Server 2008 עם המנוע של SQL Server 2000. יש רק מנוע אחד.

    כמו שאיתי ציין, ה-Compatibility Level משפיע אך ורק על ה-Parsing של הקוד שרץ בתוך בסיס הנתונים. אם ה-Compatibility Level הוא 80 (SQL Server 2000), אז בכל פעם שתריץ קוד כלשהו בבסיס הנתונים הזה, SQL Server יבדוק את ה-Syntax, כאילו זה היה SQL Server 2000. כך, למשל, אם בקוד שלך מופיע "=*" (במקום LEFT OUTER JOIN), אז זה עדיין יעבוד, כאשר ה-Compatibility Level הוא 80. לעומת זאת, אם ה-Compatibility Level הוא 90 או 100, תקבל הודעת שגיאה. זאת הסיבה שבזמן השחזור, SQL Server מסמן את ה-Compatibility Level בהתאם לגירסא שבה נוצר הגיבוי של בסיס הנתונים. זה מאפשר לך לבצע בדיקות ולבצע שינויים בקוד לפני שאתה עובר לתאימות מלאה לגירסא החדשה.

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

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

    מקווה שעזרתי...

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי tetitu יום חמישי 10 מאי 2012 13:35
    יום חמישי 10 מאי 2012 13:03
    מנחה דיון

כל התגובות

  • יעילות של מה? היעילות של תהליך השחזור או העבודה בהמשך עם מסד נתונים בפורמט 2000 במקום 2008?

    אין בעיה של יעילות של תהליך השחזור אצמו אבל אם רמת הגרסה תהיה נמוכה יותר אז תאבד כמה פיצ'רים שלא תוכל לעשות בהם שימוש בהמשך במסד הנתונים הזה ולכן אין סיבה לא לבצע שינוי אחר כך נראה לי (כרגע לאור זה שאין אפיון כמובן ואנחנו לא יודעים אם אתה דווקא נעזר בפיצ'ר של 2000 שבהתאמה לגרסה אחרת לא יעבוד לך כמצופה)

    לדוגמה הנה הבדלים בין ה 2000 ל 2005 לקוח מתוך ה BOL 2005

    Compatibility level setting of 80 or earlier Compatibility level setting of 90 Possibility of impact
    For locking hints in the FROM clause, the WITH keyword is always optional. With some exceptions, table hints are supported in the FROM clause only when the hints are specified with the WITH keyword. For more information, see FROM (Transact-SQL). High
    The *= and =* operators for outer join are supported with a warning message. These operators are not supported; the OUTER JOIN keyword should be used. High
    SET XACT_ABORT OFF is allowed inside a trigger. SET XACT_ABORT OFF is not allowed inside a trigger. Medium


    signature

    • נערך על-ידי pituachMVP, Editor יום שלישי 08 מאי 2012 08:36
    • סומן כתשובה על-ידי tetitu יום שלישי 08 מאי 2012 14:24
    יום שלישי 08 מאי 2012 08:35
    מנחה דיון
  • שלום רב,

    המטרה של ה-  compatibility level הינה להגדיר תחת איזה קוד t-sql ירוץ בסיס הנתונים.

    כידוע ישנם סוגי קוד שעבדו ב- 2000 ומ- 2005 הינם חוקיים - לדוגמא: *= במקום left join.

    כלומר compatibility level משפיע בעיקר SQL syntax ועל query parsing ולא אמור להשפיע על הביצועים.

    לפרטים נוספים:

    http://serverfault.com/questions/76777/would-the-database-compatibility-level-affect-performance

    בהצלחה.


    Best Regards,

    Itai Binyamin, MVP
    SQL Server Group Manager
    Veracity Group

    www.Veracity-Group.com
    www.ItaiBinyamin.Blogspot.com

    • הוצע כתשובה על-ידי Ami Levin יום שלישי 08 מאי 2012 11:47
    • סומן כתשובה על-ידי tetitu יום שלישי 08 מאי 2012 14:24
    יום שלישי 08 מאי 2012 08:36
  • תודה רבה לכם פיתוח ואיתי על התשובות.

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

    אז אני אחדד את השאלה.

    מכיוון שהעברתי קובץ בינארי מ SQL2000 אל מנוע של 2008 אני לא חושב שהוא עשה rebuild לאינדקסים.

    והרי (אני מקווה) שמיקרוסופט לא מוציאה כל 3 שנים גרסה חדשה של SQL ורק משנה לה את השם אלה גם משפרת את המנוע שלה ובעקבות זאת גם משנה את המבנה הבינארי של הקובץ.

    אז:

    האם שאילטה תרוץ לי יותר מהר אם אני יחליף את גרסת הcompitability

    יום שלישי 08 מאי 2012 12:36
  • זה שאלה יפה ואני לא בטוח בתשובה שלה (אולי עמי ידע ויוכל לענות) אבל אני חושב שבכל מקרה כדאי לבצע בנייה מחדש של האינדקסים כדי להיות בטוחים

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

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


    signature

    יום שלישי 08 מאי 2012 17:50
    מנחה דיון
  • תודה על הכל.

    לצערי אין לי את הזמן והתחיל לבצע שינויים ובדיקות כאלו :(

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

    השאלה הייתה בשביל הידע הכללי.

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

    יום רביעי 09 מאי 2012 11:31
  • שלום Tetitu,

    כמו שכתבת, יש הרבה מאוד שיפורים ותוספות בין גירסא לגירסא, ויש להניח שביצועי המערכת שלך ישתפרו במעבר מ-SQL Server 2000 ל-SQL Server 2008, אם כי לא בהכרח. אבל אין לזה שום קשר ל-Compatibility Level. כאשר אתה משחזר בסיס נתונים ב-SQL Server 2008, בזמן השחזור הקבצים עוברים הסבה לפורמט של SQL Server 2008, ובסיס הנתונים שלך ירוץ מעתה ואילך באמצעות מנוע של SQL Server 2008. זה קורה בכל מקרה, בלי קשר ל-Compatibility Level. אין אפשרות "להריץ" בסיס נתונים בשרת SQL Server 2008 עם המנוע של SQL Server 2000. יש רק מנוע אחד.

    כמו שאיתי ציין, ה-Compatibility Level משפיע אך ורק על ה-Parsing של הקוד שרץ בתוך בסיס הנתונים. אם ה-Compatibility Level הוא 80 (SQL Server 2000), אז בכל פעם שתריץ קוד כלשהו בבסיס הנתונים הזה, SQL Server יבדוק את ה-Syntax, כאילו זה היה SQL Server 2000. כך, למשל, אם בקוד שלך מופיע "=*" (במקום LEFT OUTER JOIN), אז זה עדיין יעבוד, כאשר ה-Compatibility Level הוא 80. לעומת זאת, אם ה-Compatibility Level הוא 90 או 100, תקבל הודעת שגיאה. זאת הסיבה שבזמן השחזור, SQL Server מסמן את ה-Compatibility Level בהתאם לגירסא שבה נוצר הגיבוי של בסיס הנתונים. זה מאפשר לך לבצע בדיקות ולבצע שינויים בקוד לפני שאתה עובר לתאימות מלאה לגירסא החדשה.

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

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

    מקווה שעזרתי...

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי tetitu יום חמישי 10 מאי 2012 13:35
    יום חמישי 10 מאי 2012 13:03
    מנחה דיון