我今天正在考虑类似的事情,但我找不到这条信息。
当 SQL Server 请求内存而操作系统无法提供时,我们会得到RESOURCE_SEMAPHORE
等待类型。
但我找不到如下信息:
假设查询要求 3GB。但是只能提供2,查询仍然运行缓慢,还是一直等待?
RESOURCE_SEMAPHORE
意味着查询处于“停止”状态,只是在等待内存?未决的内存授予应始终为 0 对吗?这意味着查询正在请求多少内存但仍在等待,对吗?
我正在阅读Memory Grants:Microsoft 的神秘 SQL Server memory consumer with Many Names,但它没有解释这一点,它只是解释了 Memory grant 是什么。
Paul Randal 描述了RESOURCE_SEMAPHORE:
我理解如果没有所需的内存,查询将无法开始。他的文章还提到查询不会永远等待:
文档如何解决 SQL Server 错误 8645也可能有所帮助: