本文档介绍了如何在 Cloud SQL for SQL Server 实例被预配不足的实例 Recommender 识别为内存消耗较高时查看和优化该实例。
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
限制设置为合适的值。在 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'