盡可能改善執行個體記憶體用量偏高的情形

本文說明如何檢查及最佳化 SQL Server 適用的 Cloud SQL 執行個體。如果資源不足的執行個體建議工具指出該執行個體的記憶體用量偏高,請按照本文操作。

SQL Server 記憶體

SQL Server 記憶體可分為下列幾種:

快取

這些是磁碟上的物件,可以重新載入,例如資料庫頁面和預存程序。因此,SQL Server 可以根據記憶體用量擴大和縮小這些物件。快取包括緩衝區集區和計畫快取。

固定記憶體

固定記憶體可擴增和縮減。只有在未使用時才會縮減,例如連線數減少或執行的查詢數減少時。 這與快取不同。如果固定記憶體不足,SQL Server 可能會耗盡記憶體。固定記憶體包括連線記憶體和記憶體授權。

SQL Server 負荷

SQL Server 負荷包括執行緒和堆疊。

In-Memory OLTP

記憶體內 OLTP 包含記憶體內資料表和記憶體內檔案群組。

SQL Server 的記憶體用量是由 maximum server memorymemory.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 找出記憶體用量

您可以在 Metrics Explorer 中使用 database/memory/components.usage 指標,查看執行個體的記憶體用量。

後續步驟