SQL Server高估了执行计划,授予了GB GB的RAM,但查询实际上仅使用MB

时间:2019-05-09 09:11:17

标签: sql-server memory resources sql-execution-plan sql-tuning

我们管理着几乎十二个SQL Server 2016 Enterprise实例,并且在所有实例中都发生这种情况:查询所需内存过剩。在GB级别上的实际高估。

大多数服务器具有512 GB或256 GB的RAM,所以据我所知,根据设计,SQL Server将其专用内存的75%用于查询(工作空间内存),而从这75%来看,它可能要占用25%的内存。每个查询的最大授权内存。好吧,这导致我们进行查询-我所知道的错误查询(在视图之后需要进行多次连接,排序和查看,并且查询成本成千上万)有时会被授予〜45 GB的RAM(占75%的25%)。

从下图中可以看到,问题是:

enter image description here

请求和授予的内存都比所需的和专门使用的内存优越。

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

  • 刷新执行计划缓存
  • 强制对表进行统计更新
  • 手动指定这些查询的重新编译
  • MAXDOP的不同设置(它仅对“必需”内存有影响,而对“请求/授予”没有影响)

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

您有什么想法或建议吗?

0 个答案:

没有答案