Updateable Clustered ColumnStore Index - אשליה או אמת? - ilDBA Portal

Updateable Clustered ColumnStore Index – אשליה או אמת?

08/09/2014 | פורסם על ידי

ה-Clustered ColumnStore Index (CCI) הם סוג של אשליה של SQL 2014 מכוון שהאינדקסים הם לא באמת ברי עדכון on the fly. אומנם אנחנו יכולים לעדכן את הנתונים בזמן אמת וזה בהחלט feature חדש עם הרבה אפשרויות, אבל יש להבין את המימוש הפנימי שלו כדי לנצל אותו בצורה מיטבית. במאמר זה נסביר איך זה עובד ונציג איור שמדגים זאת.

עדכון ישיר של CCI אינו אפשרי. מעשית ייקח יותר מדי זמן לבצע decompress ו- compress כל פעם שיש Insert, Update או Delete ויגרום לרמת פרגמנטציה גבוהה. הפתרון: CCI מורכב באופן הבא:

  • Column Stores– Column Segment שהוא כבר דחוס מבוסס עמודות.
  • ו- Delta (Row) Stores – טבלה זמנית מבוססת שורות (rowstore). הטבלה מחזיקה את השורות, כאמור לא דחוסות, עד שמספר השורות מגיעה מספיק גדול כדי להעביר אותו לפורמט דחוס של Column Stores. הטבלה הזאת מבוססת B Tree.
  • Delete Bitmaps – B Tree עם IDs של רשומות שנמחקו.

דבר זה מתואר בשרטוט הבא:

updatable-cci-1

לכל instance של SQL יש תהליך יחיד מסוג Tuple Movers. הוא רץ כל מספר דקות, הופך הנתונים ב- Delta Store לפורמט דחוס של Column Store, ודוחף את השינויים באופן א- סינכרוני ל- CCI. בכל פעם עבור Delta Store אחד בלבד. התהליך ממתין כ 15 שניות במעבר בין דחיסה של Delta Store לשני. כאמור הדחיסה היא ברמת עמודות בלבד.

בגלל השימוש ב Delta Store ו- Delta Bitmaps נדמה שה- CCI הוא בר עדכון, מה שלא קורה באמת. הנה ההסבר:

INSERT –בכל פעם שאתה מכניס רשומה, הרשומה לא נכנסת ישירות CCI אלא ל- Delta Stores. ה- Delta Stores כאמור הוא B-Tree על כל החסרונות והיתרונות. כאשר מבצעים קריאה ל- CCI, SQL Server מחזיר איחוד של הרשומות מה CCI ומה Delta Store.

DELETE – כאשר מתבצע מחיקה, שום דבר לא קורה ב CCI. הרשומה נמחקת באופן לוגי מה Delete Bitmap. לכל רשומה ב CCI יש ביט מתאים ב Delete Bitmap. המחיקה תתבצע רק כאשר יתבצע REBUILD לאינדקס.

SELECT – זוהי למעשה פעולה לוגית של איחוד בן ה- Column Store, השורות ב Delta Store ואלימינציה של השורות הרשומות כמחוקות ב Delete Bitmaps.

Reorganize – ביצוע רה-ארגון לאינדקס הופך Delta Store ל- Columns Store, כלומר מפעיל דחיסה על הנתונים על ידי הפעלה של תהליך ה Tuple Movers באופן יזום, כפי שנראה בהמשך.

Bulk Insert – בעת טעינות מסוג bulk Insert אם יש פחות מ 102,400רשומות, הרשומות יגיעו ל- Delta Store אחרת הן תגענה ישירות ל- Column Store.

שורות נטענות ל Delta Store עד שמספר השורות מגיע למקסימום המותר ל- Row Group. כאשר Delta Store מכיל את מספר השורות המכסימלי המותר ל- Row Group (1048076), SQL Server מסמן את ה- Row Group כ "CLOSED". תהליך ה tuple mover מאתר את ה- Row Groupהללו (CLOSED Row Group), מכווץאת ה Row Groupכ- Column Segments,ומעביר אותם לColumns Store.
לכל CCI יכולים להיות כמהDelta Stores.

  • אם Delta Stores נעול, SQL Server ינעל Delta Storesאחר. אם אין Delta Store זמינים, הוא יצור Delta Stores חדש.
  • עבור Partitioned Table, יכול להיות Delta Storesאחד או יותר פר טבלה.

טעינת נתונים ל- CCI

טעינת נתונים ל- CCI מודגמת בשרטוט הבא מתוך BOL של SQL Server:

updatable-cci-2

הסבר: עבור כל Row Group שהגיע לגודלו המקסימאלי הוא מסומן כ- Closed, אינו עובר דרך ה- Delta Store, כל עמודה ב Row Group נדחסת לפורמט של Column Stores בצורה ישירה.

עבור השורות הנותרות, אם מספר השורות גדול מהמינימום הנדרש עבור Row Group (102400), השורות מתווספות ל Column Stores. אם מספר השורות קטן מהמינימום הנדרש עבור Row Group, השורות מופנות ל- Delta Store.

The following two tabs change content below.

דוד יצחק

דוד יצחק , DBA אפליקטיבי ותשתיתי של SQL Server, Oracle ,Sybase Anywhere מזה 17 שנה עם התמחות בשיפור ביצועים, שרידות, זמינות גבוהה, רפלקציה, תוספים גיאוגרפיים, אבטחת מידע ו-Business Intelligence. הוא מרכז את פורום DBA צפון של ilOUG ומרצה בפורום משתמשי SQL Server.

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

בדיקת ביצועים של Clustered ColumnStore Index

במאמרים הקודמים דיברנו על איך משתמשים ב-Clustered ColumnStore Index, במאמר זה נשחק קצת עם הביצועים שלו לשם ההתרשמות. כדי לבצע את זה, ניצור 3 טבלאות על פי הבא: SalesOrders_Clustered- עם cluster index על השדה SalesOrderNumber. [...]

עבודה עם Clustered ColumnStore Index

במאמר זה נדבר על העבודה המעשית עם ה-Clustered ColumnStore Index (CCI). נסביר איך יוצרים אותו על חלק מהעמודות, נדבר על Catalog Views ואיך מתחזקים את ה-index. יצירה של CCI על חלק מהעמודות כל העמודות חיבות להיות מוכלות ב CCI [...]

Clustered ColumnStore Index מגבלות והערות נוספות

ה-Clustered ColumnStore Index הוא פיצ'ר נחמד של גרסה SQL Server 2014, אבל הוא מגיע עם כמה מגבלות ודברים ששווה לבדוק לפני שרצים לממש אותו. הנה כמה מהדברים האלה… תמיכה ב- isolation levels ל- SQL Server 6 isolation levels: Read Uncommitted, Read [...]
Copyright 2019 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: