SQL Server 2014 – New age of performance

13 במאי 2014

אין תגובות

 

image מאת: אסף פרנקל, מיקרוסופט ישראל

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

בגדול, מערכות מסדי נתונים מתחלקות לשני סוגים מרכזיים, מערכות המשמשות משתמשים ומיצרות טרנזקציות, או בשמם הידוע OLTP – On Line Transaction Processing ומערכות המיועדות למיחסון נתונים Data Warehousing.

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

כדי לשפר ביצועים SQL Server 2014 יצא עם שני features חדשים, אחד לכל סוג שימוש

In Memory OLTP

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

מוטיבציה:

ירידת מחירי החומרה בכלל ומחירי הזיכרון בפרט מאפשרת להתקין שרתים עם זכרון ענק של 256GB-1TB בעלויות סבירות. בדרך כלל OLTP הינו בעל נפח פעיל בגודל סביר היכול לעלות כולו לזיכרון, כאשר מידע פחות נדרש נשמור בטבלאות רגילות.

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

מספר הסברים חשובים:

1. לא מדובר ב process נוסף אלא באותו database מה שאומר שאפשר לבצע פעולות כרגיל לרבות join בין טבלאות בזיכרון לבין טבלאות רגילות

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

3. ישנה אפשרות לוותר על durability (לדוגמא לצרכי סימולציות) ואז אין שימוש ב log בכלל!!

4. מנגנון ללא נעילות הבנוי על גישה אופטימית

מה עוד אפשר להרוויח:

  • Stored Procedure הניגשות לטבלאות בזיכרון יכולות להיות מקומפלת לשפת מכונה וכך לעבוד בסדר גודל יותר מהיר לעומת ההפעלה הרגילה
  • לא נפגעת הזמינות – ניתן להשתמש ב Always on או ב Clustering. ב Always On הרווח יהיה גדול במיוחד שכן מעט מאוד Logging צריך לעבור בין הסביבות
  • אין תהליכים כואבים של Rebuild Index
  • המעבר טבעי, ובדרך כלל ידרוש שעות ספורות של עבודה
  • כל הכלים הרגילים ממשיכים לעבוד – SSMS, Back Up, SQL Server Agent, Configuration Manager
  • לא נדרשת הכשרה ארוכה – אותם מפתחים ו DBA ימשיכו לפתח ולתמוך

יש כמובן גם מגבלות, אציין את החשובות לדעתי:

  • נתמכים כמעט כל ה data types למעט החורגים מגודל ה page (8060 תווים), XML ו spatial
  • לא נתמכים triggers
  • אין foreign keys ו check constraints
  • אין תמיכה ב replication, TDE, CDC
  • ספרור אוטומטי בעזרת Identity(1,1) השכיח ביותר נתמך , לאינטרוולים אחרים יש להשתמש ב sequence במקום ב identity

יישומים אידיאלים לדוגמא:

  • מערכות ניירות ערך הנדרשות ל latency אפסי
  • מערכות בהן locking מהווה אתגר
  • מערכות הטוענות בקצב גבוה והקטנת כמות הכתיבות ל log ללא התפשרות על שמירת הנתונים חשובה
  • מערכות סימולציה המעבדות נתונים בקצב מסחרר אך יכולות להיות מאותחלות שוב

לינקים:

  • התיעוד המרכזי נמצא כאן
  • Kalen Delaney פירסמה white paper, בגירסא הסופית הוכנסו שיפורים שלא מתועדים

In Memory Columnstore

בעולם ה Data warehouse פתרונות המעלות מסדי נתונים של טרות רבות לזיכרון אינם מעשיים. לכן בתחום זה אנו נוקטים בגישה שונה לחלוטין. השיטה היא להפוך שורות לעמודות ועמודות לשורות. זו טכנולוגיה שאינה חדשה, ויצאה כבר ב SQL Server 2012. לכן, לא אסביר בבלוג זה את התיאוריה מאחורי השיטה אלא את הדגשים הרלוונטיים והשינויים המשמעותיים בגירסת SQL Server 2014.

שיטת העמודות גורמת לכך שבכל page נשמרים נתונים (כמיליון בדרך כלל) של עמודה מסוימת, לדוגמא – קוד יישוב. כיוון שהנתונים מאותו סוג, ישנם חזרות רבות ויחס הדחיסה משתפר עד כדי 1:6 לעומת טבלאות רגילות. SQL Server מעלה לזיכרון דפים דחוסים, ולכן, מסד הנתונים שומר בזיכרון חלק מכובד ופעיל של מחסן הנתונים, ולכן השם של התכונה הנו In Memory Columnstore.

בגרסת 2014 חלו שלושה שינויים מרכזיים:

1. Columnstore Index can be Clustered (CCI)

המפתח הראשי לטבלא יכול להיות Clustered או בקיצור CCI. דבר זה מייתר את הצורך בשמירה רגילה (Clustered or heap) וגורם לחיסכון עצום בנפח.

לדוגמא:

  • גירסאת 2008 דחוסה: 1000GB נתונים, 800GB אינדקסים, יחס דחיסה 1:3 סה"כ 600GB
  • גירסאת 2012: 1000GB נתונים יחס דחיסה 1:3 סה"כ 333GB, 166GB אינדקס של CCI לפי דחיסה של 1:6 , סה"כ 500GB
  • גירסאת 2014: 166GB אינדקס של CCI לפי דחיסה של 1:6 , סה"כ 166GB

קל לראות חסכון של 1:3 לעומת גירסת 2008 ו 5:18 לעומת גירסת 2012

2. CCI can be Updated

הטבלא ניתנת לעדכון גם במצב שיש עליה clustered column based index. זו היתה מגבלה בגירסא הקודמת שמנעה מארגונים רבים להשתמש בתכונה, ועתה היא הוסרה.

לצורך המימוש נוצר infrastructure שלם שניתן לקרוא עליו פה.

3. New Cardinality Estimator

בגירסא השתנה לחלוטין ה Cardinality Estimator (תפקידו יוסבר מיד), כתוצאה מדיוק מוגבר של ההערכות, ה query plan הנוצר טוב הרבה יותר ועל כן מביא תוצאות במהירות רבה יותר.

Cardinality Estimator תפקידו הוא להעריך כמה רשומות יחזרו לפי תנאי השאילתה עוד לפני שהיא מבוצעת, כדי להחליט את סדר הביצוע בין הטבלאות ולפי איזה אינדקס לבצע, ניתן לקרוא על כך כאן ובדגש על גירסת 2014 כאן

תוצאות:

SQL Server 2014 גובר על Oracle ושובר מספר שיאי עולם בביצועים בתחום OLTP ומחסני נתונים. לאור מה שקראתם, שתי התכונות החדשות אפשרו הישגים אלו.

ב- 16 באפריל, אישר ארגון התקנים למידוד ביצועים, TPC, כי Microsoft SQL Server 2014 שבר את השיא העולמי בעומס עבודה של עיבוד תנועות מקוון (OLTP) במבחן ה- TPC-E וכן מספר שיאים עולמיים באחסון נתונים (DW) במבחן ה- TPC-H

נקודות עיקריות:

  • Microsoft ו- HP שברו את השיא במבחן TPC-H של 3TB ו 10TB של נתונים וגובר על Oracle הן במדד הביצועים (שאילתה לשעה) והן ביחס בין המחיר לבין הביצועים בעת שימוש ב- SQL Server 2014 עם מאגר עמודות בזיכרון (CCI)
  • Microsoft ו- Fujitsu שברו את השיא העולמי הקודם שהוחזק במבחן TPC-E במדד OLTP בעת שימוש ב- SQL Server 2014

מדוע זה חשוב:

  • מראה כי SQL Server 2014 מחזיק במירב המבחנים בשיא העולמי הן ב- OLTP והן במחסני נתונים
  • מספק הוכחה חזקה לגבי האפקטיביות של In Memory Columnstore ושל In Memory OLTP, ולכן מראה בבירור שכדאי לכם ליישם

איך רואים שזה באמת עובד:

  • שיפור של פי 12 ב TPC-E לעומת גירסא קודמת של SQL Server
  • IBM (לא טעות!) הראתה שיפור של 800% בעזרת שימוש ב In Memory OLTP לעומת הגירסא הקודמת על אותו שרת
  • Fusion IO, יצרנית מובילה בתחום ה SSD הראתה שיפור פי 4 בשימוש ב In Memory OLTP עם דיסקים שלה
  • גם בארץ, לקוח מוביל בתחום הבריאות (בקרוב יפורסם סיפור לקוח) שיפר את השאילתות הקשות מדקות לשניות בעזרת שימוש ב In Memory Columnstore

כמה מילים לגבי TPC

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

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

לדוגמא עבור OLTP, חברת Oracle מתמקדת ב TPC-C שהנו מבדק ישן ואילו מיקרוסופט ב TPC-E המעודכן יותר. יותר הסברים ניתן למצוא כאן.

ניתן לראות שיפורים לאורך זמן בתוך הספק (כפי שהראיתי), ובין ספקים כשיש נתונים להשוואה (לדוגמא Oracle vs. SQL Server במבדקי TPC-H). יש לזכור להשוות גם price/performance ולא רק performance.

לסיכום

  • הגירסא החדשה יכולה לאפשר (בין השאר (J שיפורי ביצועים משמעותיים לכל workload
  • הגירסא זמינה ואפילו יצא לה כבר CU1
  • ניתן לראות את השיפור בהשוואת ביצועים אובייקטיבית לעומת גירסת 2012
  • רוצו לנסות – שיפורי ביצועים מובטחים

 

להתנסות ב SQL Server 2014  לחץ כאן

להקלטת ובינר בעברית בנושא הכרות עם SQL Server 2014 לחץ כאן

אסף פרנקל הוא ארכיטקט בכיר – מסדי נתונים, קבוצת היועצים (MCS) מיקרוסופט ישראל

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. (*) שדות חובה מסומנים