批处理模式处理和大型页面内存模型之间的互操作性问题

本文可帮助你解决在 SQL Server 中使用列存储和行存储时使用批处理模式处理时出现的性能和稳定性问题。

原始产品版本: SQL Server 2012、SQL Server 2014、SQL Server 2016、SQL Server 2017、SQL Server 2019、SQL Server 2022
原始 KB 数: 3210239

现象

  • 在 SQL Server 实例中,使用 跟踪标志 834跟踪标志 876 作为启动标志。 你可能已执行此操作,以便 SQL Server 内存管理器启用大型页面分配,以提高 64 位实例的性能。

  • 对行存储使用列存储索引或批处理模式处理。

在此方案中,遇到以下一个或多个问题:

  • SQL Server 错误日志中的非生成计划程序错误和关联的内存转储。

  • 使用批处理模式处理的查询可能会遇到严重的性能问题。

  • SQL Server 错误日志中的访问冲突异常和关联的内存转储。

  • 运行 sp_createstats时可能会看到以下错误消息:

    There is insufficient system memory in resource pool 'default' to run this query
    

解决方法

若要缓解这些问题,请尝试使用以下两种方法之一或两种方法:

  • 通过从 SQL Server 实例上的 SQL Server 启动参数中删除 跟踪标志 834-T834) 来禁用大型页内存模型。 完成此步骤后,SQL Server 将停止使用 large page 内存模型并还原到 conventional 内存 lock pages 模型。

  • 如果不在 SQL Server 中使用列存储索引,并且遇到所描述的症状,则可以使用 <a0/> 在数据库级别禁用行存储的批处理模式。 有关详细信息,请参阅 ALTER DATABASE SCOPED CONFIGURATION

详细信息