正在运行SQL Server 2014
。我有一个存储过程,在几个表上执行多个连接。它通常在5毫秒内运行,但偶尔需要30秒。我可以在本地,单用户,独立数据库(Express Edition
)上重复此操作,只需在SQL Management Studio
中运行查询 - 就像50次一样。
数据库几乎是空的。最多有100-1000行,并且所有列都已编制索引。查询如何连续五十次 3毫秒运行,然后突然 30秒 - 没有其他活动连接?
我可以确认延迟是由MemoryGrant
延迟引起的。执行计划显示此警告:
在执行期间,查询必须等待11秒才能获得MemoryGrant
如何防止这种情况发生?我不明白为什么在以前运行此查询时可能会立即释放内存问题。