SQL Server 何时会发出有关过多内存授予的警告?

Pau*_*ite 21 sql-server execution-plan warning memory-grant

产生“Excessive Grant”执行计划警告的条件是什么?

查询内存授予检测到“ExcessiveGrant”,这可能会影响可靠性。授权大小:初始 5128 KB,最终 5128 KB,已用 16 KB。

安全管理系统

SSMS计划

SSMS 属性

计划浏览器

计划浏览器

展示计划 xml

<Warnings>
    <MemoryGrantWarning GrantWarningKind="Excessive Grant"
        RequestedMemory="5128" GrantedMemory="5128" MaxUsedMemory="16" />
</Warnings>
Run Code Online (Sandbox Code Playgroud)

Pau*_*ite 20

要产生此警告:

  1. 最大使用存储器必须是小于5%的授予存储器;
  2. 查询必须使用常规(非小)资源信号量

要使用常规资源信号量,查询必须:

  • 授予超过 5MB 的内存(5120 KB,640 x 8KB 页);或者
  • 总估计计划成本超过 3 个单位,并且不是一个琐碎的计划

服务器版本要求

  • SQL Server 2014 SP2 (12.0.5000) 或更高版本
  • SQL Server 2016 SP1 (13.0.4001) 或更高版本
  • SQL Server 2017 RTM (14.0.1000) 或更高版本