8651: Could not perform the operation because the requested memory grant was not available(无法执行操作,因为请求的内存授予不可用)
SQL Server含义
查询所需的内存授予不可用,操作无法执行。与 8645 不同,这不是等待,而是直接无法提供所请求的大块内存;通常表明存在严重的内存压力。
原因
服务器上可用的查询内存无法满足单个运算符(例如非常大的排序/哈希)请求的授予。内存估算过高、max server memory 过低、外部内存压力,或 Resource Governor 限制过低(REQUEST_MAX_MEMORY_GRANT_PERCENT(工作负载组)或 MAX_MEMORY_PERCENT(资源池))都可能是原因。
解决方法
优化导致内存授予膨胀的查询(更新统计信息、合适的索引、拆分查询)。监控总内存和可用内存;检查 max server memory 设置以及来自外部应用的内存压力。如果使用 Resource Governor,检查工作负载组的 REQUEST_MAX_MEMORY_GRANT_PERCENT 和资源池的 MAX_MEMORY_PERCENT 设置。将内存密集型批处理作业移到非高峰时段。
同一数据库的其他条目
- 7202Could not find server 'name' in sys.servers(在 sys.servers 中找不到服务器 'name')
- 40501The service is currently busy. Retry the request after 10 seconds(服务当前繁忙。请在 10 秒后重试请求)
- 8645A time out occurred while waiting for memory resources to execute the query(等待执行查询所需的内存资源时超时)
- 5061ALTER DATABASE failed because a lock could not be placed on database(ALTER DATABASE 失败,因为无法在数据库上加锁)
- 3702Cannot drop database because it is currently in use(无法删除数据库,因为它当前正在使用)
- 15138The database principal owns a schema in the database, and cannot be dropped(数据库主体在数据库中拥有架构,无法删除)
- 1934INSERT/UPDATE failed because the following SET options have incorrect settings(INSERT/UPDATE 失败,因为以下 SET 选项的设置不正确)