אופטימיזציה של שימוש גבוה בזיכרון במופעים

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

זיכרון של שרת SQL

אפשר לחלק את הזיכרון של SQL Server באופן הבא:

קובצי מטמון

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

זיכרון קבוע

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

תקורה של שרת SQL

התקורה של SQL Server כוללת שרשורים ומחסניות.

In-Memory OLTP

In-Memory OLTP כולל טבלאות In-Memory וקבוצות קבצים של In-Memory.

צריכת הזיכרון של SQL Server נשלטת על ידי ההגדרות maximum server memory ו-memory.memory.limitmb. הפרמטר memory.memory.limitmb מוגדר באופן אוטומטי על ידי Cloud SQL.

מידע נוסף על memory.memory.limitmb זמין במאמרי העזרה של Microsoft.

אפשרויות לאופטימיזציה של הזיכרון

כדי לבדוק אם צריך לשנות את הגדרות הזיכרון של מכונה, מבצעים את הפעולות הבאות:

  • בודקים את הערך של הדגל 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.

המאמרים הבאים