Rac*_*SQL 1 sql-server memory memory-grant
我今天正在考虑类似的事情,但找不到这条信息。
当 SQL Server 请求内存而操作系统无法提供内存时,我们会得到RESOURCE_SEMAPHORE等待类型。
但我找不到类似的信息:
假设查询要求 3GB。但只能提供2,查询是否仍然运行缓慢,或者一直在那里等待?
RESOURCE_SEMAPHORE意味着查询处于“停止”状态只是等待内存?
待处理的内存授予应该始终为 0,对吗?这意味着查询正在请求多少内存但仍在等待,对吧?
我正在阅读Microsoft 的《内存授予:神秘的 SQL Server 内存消费者与许多名字》,但它没有解释这一点,它只是解释了什么是内存授予。
Paul Randal 描述了RESOURCE_SEMAPHORE:
\n\n\n此等待类型是指线程正在等待查询执行\n内存授予以便它可以开始执行。[强调]
\n
据我所知,如果没有所需的内存,查询就无法开始。他的文章还提到查询不会永远等待:
\n\n\n这种类型的高等待是因为查询无法获取\n执行所需的内存,并且您还可能会看到错误 8645(\xe2\x80\x9c在等待内存资源在资源池\xe2 中执行查询时发生超时\n \x80\x98\xe2\x80\x99 ()。重新运行查询。\xe2\x80\x9d
\n
文档如何解决 SQL Server 错误 8645也可能有帮助:
\n\n\n当内存密集型查询(例如涉及排序和散列的查询)排队并且无法在超时期限之前获取请求的内存时,将引发错误消息 8645。SQL Server 等待内存的时间长度取决于查询等待配置值。默认情况下,查询等待值设置为 -1,这意味着 SQL Server 等待的时间是查询估计成本的 25 倍。如果将查询等待值修改为非负数,\nSQL Server 将等待您在\n查询等待选项值中指定的秒数。
\n
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |