2016-12-14

Compatibility Level in SQL Azure

שלום רב
הפוסט היום מיועד ל  DBA's. מן הסתם אחרים פחות יבינו אולם פה אני אסביר לכם גם למה אני כל כך אוהב את הענן.
ובמיוחד את SQL Azure.

פשוט מדהים וכיף - אז ככה מי מה DBA's שקוראים פוסט זה לא יודע מהו Compatibility Level?
2 הצביעו - יפה.
אז הנה הסבר קצר:
לבסיס נתונים יש version שזה מספר הגירסה של בסיס הנתונים, אולם בכדי שתהיה תמיכה לאחרו הוסיפו החכמים את המימד של Compatibility Level.

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

זו הטבלה המדוייקת שנלקחה מהלינק הזה https://msdn.microsoft.com/library/bb510680(SQL.130).aspx :

 
 
אם קוראים בכתובים אפשר לראות למשל ש:
Compatibility-level setting of 130 - The Insert in an Insert-select statement is multi-threaded or can have a parallel plan.
Compatibility-level setting of 120 or lower - The Insert in an Insert-select statement is single-threaded. 
 
כלומר שגם אם תבצע Insert Select  ב SQL Server 2016 וה Compatibility Level  הוא  120 - זה יתבצע לפי 120 ולא לפי גירסה חדשה.
 
מי שרוצה לקרוא דוגמא מפורטת יותר על ההבדל יכול לקרוא במאמר של Thomas Larock https://thomaslarock.com/2016/01/how-to-change-the-compatibility-level-of-an-azure-sql-database/

או במאמר של מיקרוסופט פה:
 
אחלה כבר כולם כתבו על זה אז מה אני מתרגש?
ובכן כרגע כבר אפשר להריץ את זה ב SQL Azure:
 
ALTER DATABASE [DBname]   SET COMPATIBILITY_LEVEL = 140
GO
 
כאשר גם מיקרוסופט עצמה טרם מסבירה מה השינויים ואנו בוחנים ובודקים.
זה קשור ל execution plan  ועוד מלא מילים יפים כאלו של DBA's שרוצים להראות שהם מבינים עניין.
 
אז אני כבר שיניתי באחד מבסיסי הנתונים שלנו  ל  
COMPATIBILITY_LEVEL = 140
ואז רץ לבדוק את ה
Batch Mode Adaptive Memory Grant....
מת על הענן.
חברים יום נעים.
פיני