במאמר הזה מוסבר איך לבדוק ולבצע אופטימיזציה של מכונת Cloud SQL ל-SQL Server אם שירות המלצות על מכונות עם הקצאות-חסר זיהה במכונה צריכת זיכרון גבוהה.
זיכרון שרת SQL
הזיכרון של SQL Server יכול להתחלק לקטגוריות הבאות:
קובצי מטמון
אלה אובייקטים בדיסק שאפשר לטעון מחדש, כמו דפי מסד נתונים ופרוצדורות מאוחסנות. כתוצאה מכך, האובייקטים האלה ב-SQL Server יכולים לגדול או לקטון בהתאם לניצול הזיכרון. מטמון כולל מאגרי נתונים זמניים ומטמון של תוכניות.
זיכרון קבוע
הזיכרון הקבוע יכול לגדול או להצטמצם. הוא מתכווץ רק כשלא משתמשים בו, למשל כשמספר החיבורים יורד או כשמספר השאילתות שמופעלות יורד. הוא שונה ממטמון. אם אין מספיק זיכרון קבוע, יכול להיות ש-SQL Server יפעל ללא זיכרון. הזיכרון הקבוע כולל זיכרון חיבורים והקצאות זיכרון.
תקורה של שרת SQL
התקורה של SQL Server כוללת שרשורים ומחסניות.
In-Memory OLTP
OLTP בזיכרון כולל טבלאות בזיכרון וקבוצות קבצים בזיכרון.
השימוש בזיכרון על ידי SQL Server נשלט על ידי ההגדרות maximum server memory ו-memory.memory.limitmb. הפרמטר memory.memory.limitmb מוגדר אוטומטית על ידי Cloud SQL.
מידע נוסף על memory.memory.limitmb זמין במסמכי התיעוד של מיקרוסופט.
אפשרויות לאופטימיזציה של הזיכרון
כדי לבדוק אם צריך לכוונן את הזיכרון של מופע מסוים, מבצעים את הפעולות הבאות:
- בודקים את הערך של הדגל
max server memory (mb).מומלץ לאפשר ל-Cloud SQL לנהל את הערך של הדגל הזה. אם אתם צריכים לנהל את הערך הזה באופן ידני, תוכלו להשתמש בנוסחת השימוש
max_server_memory (mb)שמפורטת במאמר בנושא שיטות מומלצות כדי למנוע מצב שבו SQL Server צורך את כל הזיכרון.מידע נוסף זמין במאמר בנושא דגלים מיוחדים.
- עוקבים אחרי הסימון
Page life expectancy.
Page life expectancyמציין את משך הזמן בשניות שהדף הכי ישן נשאר במאגר הנתונים הזמני. הערך הזה צריך להיות גדול מ-300, כמומלץ על ידי מיקרוסופט. אם הערך נמוך מ-300 באופן עקבי, יכול להיות שהמופע מתמודד עם ניצול גבוה של הזיכרון. מריצים את השאילתה הבאה כדי לעקוב אחריPage life expectancy.SELECT [object_name], [counter_name], [cntr_value] FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Manager%' AND [counter_name] = 'Page life expectancy'
- בודקים את הדגל
Memory Grants Pending.
Memory Grants Pendingמציין את המספר הכולל של תהליכים שממתינים להקצאת זיכרון בסביבת עבודה. מריצים את השאילתה הבאה כדי לבדוק אתMemory Grants Pending. אם השאילתה הזו מראה באופן עקבי שההרשאות בהמתנה, זה מצביע על ניצול גבוה של הזיכרון. כדי לצמצם את זמן העיכוב הזה, אפשר להריץ שאילתה במסד הנתונים כדי לראות את זמני ההמתנה ולשנות את ההגדרות של כל הצהרה שממתינה לזיכרון.SELECT @@SERVERNAME AS [Server Name], RTRIM([object_name]) AS [Object Name], cntr_value AS [Memory Grants Pending] FROM sys.dm_os_performance_counters WITH(NOLOCK) WHERE [object_name] LIKE N'%Memory Manager%' -- Handles named instances AND counter_name = N'Memory Grants Pending'
שימוש ב-Metrics Explorer כדי לזהות את השימוש בזיכרון
אפשר לבדוק את השימוש בזיכרון של המופע באמצעות המדד database/memory/components.usage בMetrics Explorer.