MSSQLSERVER_8645

Se aplica a: SQL Server

Detalles

Attribute Valor
Nombre del producto SQL Server
Id. de evento 8645
Origen de eventos MSSQLSERVER
Componente SQLEngine
Nombre simbólico MEMTIMEDOUT_ERR
Texto del mensaje Se agotó el tiempo de espera para que los recursos de memoria ejecutaran la consulta en el grupo de recursos de servidor '%ls' (%ld). Vuelva a ejecutar la consulta.

Explicación

Este error se produce si una solicitud de SQL Server ha esperado la memoria de ejecución de consultas (QE) durante un período prolongado de tiempo y la memoria no estaba disponible. La memoria de ejecución de consultas se usa principalmente para operaciones de ordenación, operaciones hash, operaciones de copia masiva y creación y rellenado de índices. Una consulta que realiza una de estas operaciones solicita una concesión de memoria. Si no hay memoria disponible, la consulta se establece para esperar en un RESOURCE_SEMAPHORE hasta que la memoria esté disponible. Si la memoria no está disponible después de más de 20 minutos de espera, SQL Server finaliza la consulta con el error 8645 "Se ha producido un tiempo de espera mientras se espera a que los recursos de memoria ejecuten la consulta en el grupo de recursos "predeterminado". El valor de tiempo de espera varía ligeramente entre las versiones de SQL Server. Puede ver el valor de tiempo de espera establecido en el nivel de servidor examinando timeout_sec en sys.dm_exec_query_memory_grants.

Causa

Este error se puede ver en relación con las concesiones de memoria y esperas prolongadas para que esa memoria esté disponible. Normalmente, cuando una consulta finaliza, libera la memoria de ejecución que usa. Por lo tanto, si ve este error, significa que la consulta agota el tiempo de espera ha esperado para que algunas otras solicitudes de más de 20 minutos completen su trabajo. Podría haber una sola solicitud que consuma toda la memoria QE disponible o podría haber muchas solicitudes y sus concesiones de memoria han agotado la memoria QE. Si tiene solicitudes de larga duración en la carga de trabajo, debe tomar medidas para mejorar su duración de ejecución y reducir la cantidad de memoria QE que usan.

Acción del usuario

Si no usa Resource Governor para limitar el grupo de memoria de determinadas cargas de trabajo, puede comprobar el estado general del servidor y la carga de trabajo. Si usa Resource Governor, compruebe la configuración del grupo de recursos o del grupo de cargas de trabajo.

Se describe una explicación detallada y los pasos de solución de problemas en Solución de problemas de rendimiento lento o poca memoria causados por concesiones de memoria en SQL Server.

En la lista siguiente se resumen los pasos detallados en el artículo mencionado anteriormente. Estos pasos pueden ayudar a reducir o eliminar errores de memoria QE:

  1. Identifique qué solicitudes de SQL Server son la concesión de memoria grande o los consumidores de memoria QE. Para obtener más información, consulte Cómo identificar esperas para la memoria de ejecución de consultas.

  2. Vuelva a escribir consultas para minimizar o evitar operaciones de ordenación y hash.

  3. Actualice las estadísticas y manténgalas actualizadas periódicamente para asegurarse de que SQL Server calcula correctamente la concesión de memoria.

  4. Cree índices adecuados para la consulta o las consultas identificadas. Los índices pueden reducir el gran número de filas procesadas, cambiando así los algoritmos JOIN y reduciendo el tamaño de las concesiones o eliminando por completo.

  5. Use la sugerencia OPTION (min_grant_percent = XX, max_grant_percent = XX) en las consultas siempre que sea posible.

  6. Use Resource Governor para limitar el efecto del uso de memoria de QE solo a una determinada carga de trabajo.

  7. SQL Server 2017 y 2019 usan el procesamiento de consultas adaptables, lo que permite que el mecanismo de comentarios de concesión de memoria ajuste el tamaño de concesión de memoria dinámicamente en tiempo de ejecución. Esta característica puede impedir problemas de concesión de memoria en primer lugar.

  8. Aumente la memoria de SQL Server o ajuste la configuración existente.

    1. Compruebe los siguientes parámetros de configuración de memoria de SQL Server:

      • memoria máxima del servidor : aumente si es necesario.
      • memoria de servidor mínima
      • memoria mínima por consulta
    2. Observe si hay algún valor fuera de lo normal. Corríjalos según sea necesario. Tenga en cuenta el aumento de los requisitos de memoria para SQL Server. Los valores predeterminados y recomendados se muestran en Opciones de configuración de memoria del servidor.

  9. Aumente la memoria en el nivel de sistema operativo (RAM física o virtual).

  10. Compruebe si otras aplicaciones o servicios están consumiendo memoria en este servidor. Vuelva a configurar aplicaciones o servicios menos críticos para consumir menos memoria o moverlas a un servidor independiente. Esta acción puede eliminar la presión de memoria externa.

  11. Ejecute los siguientes comandos DBCC para liberar varias memorias caché de memoria de SQL Server: una medida temporal.

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE