优化实例中的高内存用量

本文档介绍了如何在 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 指标查看实例的内存用量。

后续步骤