MSSQLSERVER_8645

Se aplica a:SQL Server

Detalles

Atributo Value
Nombre de 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 las operaciones de ordenación, las operaciones hash, las operaciones de copia masiva y la creación y el 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. Es posible que vea el valor de tiempo de espera establecido en el nivel timeout_sec de servidor examinando 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 otras solicitudes de más de 20 minutos completen su trabajo. Puede haber una sola solicitud que consuma toda la memoria QE disponible o que haya muchas solicitudes y que sus concesiones de memoria hayan 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.

Una explicación detallada y los pasos de solución de problemas se tratan en Solución de problemas de rendimiento lento o problemas de memoria bajos 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 de QE:

  1. Identifique qué solicitudes de SQL Server son los consumidores de memoria grandes o de memoria de QE. Para obtener más información, consulte Cómo identificar las esperas de 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 estima la concesión de memoria correctamente.

  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 dinámicamente el tamaño de concesión de memoria en tiempo de ejecución. Esta característica puede evitar problemas de concesión de memoria en primer lugar.

  8. Aumente SQL Server memoria 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 : aumentar 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. Investigue el porqué de los mayores requisitos de memoria de 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 SQL Server: una medida temporal.

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE