本文件說明如何檢查及改善 Cloud SQL for SQL Server 執行個體,如果該執行個體的記憶體用量過高,系統會建議您進行調整。
SQL Server 記憶體
SQL Server 記憶體可分為以下幾種:
快取
這些是磁碟上可重新載入的物件,例如資料庫頁面和預存程序。因此,SQL Server 可以根據記憶體用量來增加或縮減這些物件。快取包括緩衝區和規劃快取。
固定記憶體
固定記憶體可增減。只有在未使用時才會縮減,例如連線數量減少或執行的查詢數量減少時。與快取不同。如果固定記憶體不足,SQL Server 可能會耗盡記憶體。固定記憶體包括連線記憶體和記憶體授權。
SQL Server 額外負擔
SQL Server 額外負擔包括執行緒和堆疊。
記憶體內 OLTP
記憶體內 OLTP 包含記憶體內資料表和記憶體內檔案群組。
您可以設定 maximum server memory
和 memory.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'