本文說明如何檢查及最佳化 SQL Server 適用的 Cloud SQL 執行個體。如果資源不足的執行個體建議工具指出該執行個體的記憶體用量偏高,請按照本文操作。
SQL Server 記憶體
SQL Server 記憶體可分為下列幾種:
快取
這些是磁碟上的物件,可以重新載入,例如資料庫頁面和預存程序。因此,SQL Server 可以根據記憶體用量擴大和縮小這些物件。快取包括緩衝區集區和計畫快取。
固定記憶體
固定記憶體可擴大和縮小,但只會在未使用時縮小,例如連線數減少或執行的查詢數減少時。這與快取不同。如果固定記憶體不足,SQL Server 可能會記憶體不足。固定記憶體包括連線記憶體和記憶體授權。
SQL Server 負荷
SQL Server 負荷包括執行緒和堆疊。
記憶體內 OLTP
記憶體內 OLTP 包含記憶體內資料表和記憶體內檔案群組。
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 (Microsoft 建議)。如果持續低於 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 指標,查看執行個體的記憶體用量。