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

本文件說明如何檢查及改善 Cloud SQL for SQL Server 執行個體,如果該執行個體的記憶體用量過高,系統會建議您進行調整。

SQL Server 記憶體

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

快取

這些是磁碟上可重新載入的物件,例如資料庫頁面和預存程序。因此,SQL Server 可以根據記憶體用量來增加或縮減這些物件。快取包括緩衝區和規劃快取。

固定記憶體

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

SQL Server 額外負擔

SQL Server 額外負擔包括執行緒和堆疊。

記憶體內 OLTP

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

您可以設定 maximum server memorymemory.memory.limitmb 來控制 SQL Server 的記憶體用量。Cloud SQL 會自動設定 memory.memory.limitmb 參數。

如要進一步瞭解 memory.memory.limitmb,請參閱 Microsoft 說明文件

您必須將 max server memory 限制設為適當的值。在 SQL Server 中,如果未設定 max server memory,資料庫頁面可能會耗用大部分的記憶體,甚至達到 100%。但有時可能會造成誤導。

記憶體最佳化選項

如要判斷執行個體是否需要更多記憶體調整,請執行下列操作:

  • 設定 max server memory 的值。一般建議將 max server memory 設為約 80%,以免 SQL Server 耗用所有可用記憶體。對於記憶體量大的執行個體,80% 可能太低,可能會導致記憶體浪費。

  • 監控 Page life expectancy

    Page life expectancy 表示最舊的頁面會保留在緩衝區集區的秒數。根據 Microsoft 的建議,這個值應大於 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'
    

後續步驟