首页 > 解决方案 > SQL Server 高估了执行计划,授予了 GB 的 RAM,但查询实际上只使用了 MB

问题描述

我们管理着近十几个 SQL Server 2016 Enterprise 实例,所有这些实例都发生了这种情况:查询所需的内存被高估了。实际高估,在 GB 级别。

大多数服务器都有 512 或 256 GB 的 RAM,所以据我所知,SQL Server 的设计将 75% 的专用内存用于查询(工作区内存),从这 75% 开始,它可能会占用最多 25% 作为授予的最大值每个查询的内存。好吧,这会导致我们进行查询——我知道的错误查询(在查看后进行几次连接、排序和查看,查询成本为数千)有时会被授予约 45 GB 的 RAM(约 75% 的 25%)。

如下图所示,问题在于:

在此处输入图像描述

请求和授予的内存都比所需的和实际使用的内存要好得多。

我已经尝试过了,但无济于事:

因此,从 SQL Server 的工作方式来看,只需要 5-6 个请求内存事务估计不佳(例如,每个 45 GB)将所有其他剩余查询引导到 RESOURCE_SEMAPHORE 等待队列(因为 SQL Server 认为“请求的”内存,而不是将会话放入资源信号量时的“必需”内存)。

你有什么想法或建议吗?

标签: sql-servermemoryresourcessql-execution-plansql-tuning

解决方案


推荐阅读