优化实例中的高内存用量

本文档介绍了如何在 Cloud SQL for SQL Server 实例被预配不足的实例 Recommender 识别为内存消耗较高时查看和优化该实例。

SQL Server 内存

SQL Server 内存可分为以下几类:

缓存

这些是磁盘上可重新加载的对象,例如数据库页面和存储过程。因此,SQL Server 可以根据内存利用率增加和缩小这些对象。缓存包括缓冲区池和计划缓存。

固定内存

固定内存可以增加和缩减。只有在未使用时(例如,当连接数减少或执行的查询数减少时),它才会缩减。 固定内存与缓存不同。如果固定内存不足,SQL Server 可能会耗尽内存。 固定内存包括连接内存和内存授权。

SQL Server 开销

SQL Server 开销包括线程和栈。

内存中 OLTP

内存中 OLTP 包括内存中表和内存中文件组。

通过设置 maximum server memorymemory.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 指标查看实例的内存用量。

后续步骤