本文档介绍了如何在 Cloud SQL for SQL Server 实例被预配不足的实例 Recommender 识别为内存消耗较高时查看和优化该实例。
SQL Server 内存
SQL Server 内存可分为以下几类:
缓存
这些是磁盘上可重新加载的对象,例如数据库页面和存储过程。因此,SQL Server 可以根据内存利用率增加和缩小这些对象。缓存包括缓冲区池和计划缓存。
固定内存
固定内存可以增加和缩减。只有在未使用时(例如,当连接数减少或执行的查询数减少时),它才会缩减。 固定内存与缓存不同。如果固定内存不足,SQL Server 可能会耗尽内存。 固定内存包括连接内存和内存授权。
SQL Server 开销
SQL Server 开销包括线程和栈。
内存中 OLTP
内存中 OLTP 包括内存中表和内存中文件组。
通过设置 maximum server memory
和 memory.memory.limitmb
来控制 SQL Server 的内存消耗。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
表示最早的页面在缓冲区池中保留的时长(以秒为单位)。 根据 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'
使用 Metrics Explorer 确定内存用量
您可以使用 Metrics Explorer 中的 database/memory/components.usage
指标查看实例的内存用量。