en-UShe-IL
You are here:   Blog
Register   |  Login

Blog Archive:

Maximize
* Can be used in order to search for older blogs Entries

Search in blogs


Blog Categories:

Maximize
* Can be used in order to search for blogs Entries by Categories

Blog Tags:

Maximize
* Can be used in order to search for blogs by keywords

TNWikiSummit


Awared MVP 


 


Microsoft® Community Contributor 


Microsoft® Community Contributor


 Read first, before you you use the blog! Maximize
מאי30

Written by: ronen ariely
30/05/2014 08:36 RssIcon

הקדמה

Buffer Pool Extension או בשם המקוצר BPE היא תוספת חדשה בגרסאות Standard ו Enterprise של SQL Server 64 Bit. באופן תאורטי הרחבה זו יכולה לשפר באופן משמעותי את היכולת של מערכות הצורכות זיכרון רב כגון OLTP. ההרחבה מבוססת על הוספת רמה שנייה של Buffer Pool היושב על מחיצה מהירה (SSD למשל), ובכך מאפשרת להרחיב את השימוש בזיכרון ה-RAM. ה BPE יראה עבור המשתמש כזיכרון מטמון נוסף בשם L2 Cache (Level 2).

ארכיטקטורה:

תהליך עיבוד שאילתה מתחיל משכבת פרוטוקול ה Tabular Data Stream האחראית על התקשורת בין האפליקציה לבין השרת SQL ועד לחזרת התוצאה שוב לאפליקציה באמצעות שכבת ה TDS. בדרך נמצא אובייקט מנהל הזיכרון (Buffer Pool Manager).

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

אובייקט מנהל הזיכרון (Buffer Pool Manager) אחראי על ניהול המידע בזיכרון המטמון. אובייקט זה מספק לנו מונים (counters) לניטור אחסון דפי הנתונים בזיכרון, ולפעילות I/O של כתיבה וקריאה לדפי הנתונים.  בשרתי 2014 אובייקט זה אחראי גם על תיאום בין השכבות של הBuffer. באחריות מנהל הזיכרון להעביר דפים נקיים מהרמה העליונה אל הרמה התחתונה של ה Buffer.

Buffer Pool Extension - Ariely Ronen

.

רעיון כללי:

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

מגבלות:

  • לא מומלץ למערכות העושות שימוש בקריאות מרובות (העבודה נעשית אחרי הכול מול ה IO).
  • מתאפשר רק על 64 ביט של גרסאות Standard או Enterprise.
  • הגודל המקסימלי של קובץ ההרחבה (ה BPE) יכול להיות עד פי 32 מגודל הערך של Max Server Memory.
  • על מנת להקטין את הגודל של הקובץ חייבים לאתחל את שרת ה SQL (להגדיל בצורה דינאמית אין בעיה).
  • אינו מופעל בברירת המחדל.
  • יש צורך בהרשאות ALTER SERVER STATE (מדובר באלמנט ברמת השרת).
  • ניהול החלוקה לרמות עולה משאבים (למשל העברת הדפים בין הרמות), ולכן אם יש מספיק זיכרון אנחנו למעשה רק מפריעים.

ניטור

שימוש בטבלאות צפייה (Dynamic Management Views), הקשורות לעבודת הרחבת הזיכרון.

  • sys.dm_os_buffer_descriptors (קיים גם בגרסאות קודמות)
    מספק אינפורמציה על כל הדפים בזיכרון.
  • sys.dm_os_buffer_pool_extension_configuration (נוסף בגרסת 2014)
    מספק מידע על הקונפיגורציה הנוכחית של הרחבת הזיכרון. מחזיר רשומה אחת עבור כל קובץ הרחבה שיש לנו.

שימוש באירועים מורחבים הקורים בניהול הזיכרון

  • sqlserver.buffer_pool_extension_pages_evicted
    אירוע זה קורה בכל פעם שדף או קבוצת דפים מועברת מהרמה הראשונה אל ההרחבה של הזיכרון ברמה השנייה.
  • sqlserver.buffer_pool_extension_pages_read
    אירוע זה קורה בכל פעם שדף נקרא מהרחבת הזיכרון ברמה השנייה אל הרמה הראשונה של ה Buffer Pool
  • sqlserver.buffer_pool_extension_pages_written
    אירוע זה קורה בכל פעם שדף מתנקה מהרחבת הזיכרון
  • sqlserver.buffer_pool_eviction_thresholds_recalculated
    אירוע זה קורה בכל פעם שמבוצע Lazywriter ו/או אירוע שקשור ל thresholds

שימוש ב perfmon

  • Buffer Cache Hit Ratio
    מתאר את אחוז הבקשות לקבלת דפי מידע, אשר קיבלו מענה מה Buffer ולא מהדיסק (מצב חיובי).

שימוש בשאילתות ישירות

עבודה עם הזיכרון המורחב

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

מקורות מידע למאמר ומקורות מידע נוספים

  • SQL Server, Buffer Manager Object
    http://msdn.microsoft.com/en-us/library/ms189628.aspx
  • SQLOS's memory manager and SQL Server's Buffer Pool
    http://blogs.msdn.com/b/slavao/archive/2005/02/11/371063.aspx
    The relation between the SQL Server Buffer Management and the Operating system memory management.
  • Buffer Pool Extension Details
    http://msdn.microsoft.com/en-us/library/dn133176(v=sql.120).aspx
  • Tabular Data Stream Protocol (TDS)
    http://technet.microsoft.com/en-us/library/aa174503(v=sql.80).aspx
    http://calyansql.blogspot.co.il/2012/07/tabular-data-stream-tds-sql-server.html
  • sys.dm_os_buffer_descriptors (Transact-SQL)
    http://msdn.microsoft.com/en-us/library/ms173442.aspx
  • SQL Server 2014: Buffer pool extension - an interesting new feature
    http://www.dbi-services.com/index.php/blog/entry/sql-server-2014-buffer-pool-extension-
  • Buffer Pool Extension.
    http://www.sqlcoffee.com/SQLServer2014_0007.htm

.