Compartir vía


MSSQLSERVER_8645

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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 una concesión de 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 esperar un período de tiempo de espera determinado dinámicamente por el costo de consulta estimado por el optimizador de consultas, SQL Server finaliza la consulta con el error 8645 A timeout occurred while waiting for memory resources to execute the query in the resource pool 'default'. El valor de tiempo de espera varía ligeramente entre las versiones de SQL Server, pero tiene un valor de tiempo de espera máximo de 24 horas. Puede ver el valor de tiempo de espera establecido en el nivel de servidor examinando timeout_sec en sys.dm_exec_query_memory_grants.

Para obtener una explicación detallada de los pasos de solución de problemas, consulte Problemas de rendimiento lento o de memoria baja causados por concesiones de memoria en SQL Server.

Causa

Este error se puede ver en relación con las concesiones de memoria y esperas prolongadas para que la memoria esté disponible. Normalmente, cuando se completa una consulta, libera la memoria de ejecución que usa. Por lo tanto, si ve este error, significa que la consulta de tiempo de espera ha esperado a que se completen otras solicitudes más allá del período de tiempo de espera. Podría haber una sola solicitud que consuma toda la memoria QE disponible o podría haber muchas solicitudes y combinarlas, 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.

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