MSSQLSERVER_8645

S’applique à :SQL Server

Détails

Attribut Valeur
Nom du produit SQL Server
ID de l’événement 8645
Source de l’événement MSSQLSERVER
Composant SQLEngine
Nom symbolique MEMTIMEDOUT_ERR
Texte du message Le délai a été dépassé pendant l'attente de ressources mémoire pour exécuter la requête dans le pool de ressources '%ls' (%ld). Réexécutez la requête.

Explication

Cette erreur est générée si une demande de SQL Server a attendu la mémoire d’exécution de requête (QE) pendant une période prolongée et que la mémoire n’était pas disponible. La mémoire d’exécution de requête est principalement utilisée pour les opérations de tri, les opérations de hachage, les opérations de copie en bloc et la création et la population d’index. Une requête qui effectue l’une de ces opérations demande une allocation de mémoire. Si aucune mémoire n’est disponible, la requête est définie pour attendre sur un RESOURCE_SEMAPHORE jusqu’à ce que la mémoire devienne disponible. Si la mémoire n’est pas disponible après plus de 20 minutes d’attente, SQL Server met fin à la requête avec l’erreur 8645 « Un délai d’attente s’est produit en attendant que les ressources de mémoire exécutent la requête dans le pool de ressources « par défaut ». La valeur du délai d’expiration varie légèrement entre les versions de SQL Server. Vous pouvez voir la valeur de délai d’expiration définie au niveau du serveur en examinant timeout_sec dans sys.dm_exec_query_memory_grants.

Cause

Cette erreur peut être observée en relation avec les allocations de mémoire et les attentes prolongées pour que cette mémoire soit disponible. En règle générale, lorsqu’une requête se termine, elle libère la mémoire d’exécution qu’elle utilise. Par conséquent, si vous voyez cette erreur, cela signifie que la requête dont le délai d’expiration a attendu d’autres demandes pendant plus de 20 minutes pour terminer leur travail. Il peut y avoir une seule requête qui a consommé toute la mémoire QE disponible ou il peut y avoir de nombreuses demandes et, ensemble, leurs allocations de mémoire ont épuisé la mémoire QE. Si vous avez des requêtes de longue durée dans votre charge de travail, vous devez prendre des mesures pour améliorer leur durée d’exécution et réduire la quantité de mémoire QE qu’elles utilisent.

Action requise

Si vous n’utilisez pas Resource Governor pour limiter le pool de mémoire pour certaines charges de travail, vous pouvez vérifier l’état global du serveur et la charge de travail. Si vous utilisez Resource Governor case activée les paramètres du pool de ressources ou du groupe de charges de travail.

Une explication détaillée et les étapes de dépannage sont décrites dans Résoudre les problèmes de performances lentes ou de mémoire insuffisantes causés par les allocations de mémoire dans SQL Server.

La liste suivante récapitule les étapes détaillées dans l’article ci-dessus. Ces étapes peuvent vous aider à réduire ou à éliminer les erreurs de mémoire QE :

  1. Identifiez les requêtes dans SQL Server les consommateurs de mémoire volumineuse ou QE. Pour plus d’informations, consultez Comment identifier les attentes pour la mémoire d’exécution de requête.

  2. Réécrire les requêtes pour réduire ou éviter les opérations de tri et de hachage.

  3. Mettez à jour les statistiques et maintenez-les régulièrement à jour pour vous assurer que SQL Server estime correctement l’allocation de mémoire.

  4. Créez les index appropriés pour la ou les requêtes identifiées. Les index peuvent réduire le grand nombre de lignes traitées, modifiant ainsi les algorithmes JOIN et réduisant la taille des subventions ou les éliminant complètement.

  5. Utilisez l’indicateur OPTION (min_grant_percent = XX, max_grant_percent = XX) dans vos requêtes si possible.

  6. Utilisez Resource Governor pour limiter l’effet de l’utilisation de la mémoire QE uniquement à une certaine charge de travail.

  7. SQL Server 2017 et 2019 utilisent le traitement adaptatif des requêtes, ce qui permet au mécanisme de commentaires sur l’octroi de mémoire d’ajuster dynamiquement la taille de l’octroi de mémoire au moment de l’exécution. Cette fonctionnalité peut éviter les problèmes d’octroi de mémoire en premier lieu.

  8. Augmentez SQL Server mémoire ou ajustez les paramètres existants.

    1. Vérifiez les paramètres de configuration de la mémoire de SQL Server suivants :

      • mémoire maximale du serveur : augmenter si nécessaire
      • Mémoire minimum du serveur
      • Mémoire minimum par requête
    2. Identifiez les paramètres inhabituels. Si besoin est, corrigez-les. Prenez en compte l'augmentation de la mémoire requise pour SQL Server. Les paramètres par défaut et recommandés sont répertoriés dans Options de configuration de la mémoire du serveur .

  9. Augmentez la mémoire au niveau du système d’exploitation (RAM physique ou virtuelle).

  10. Vérifiez si d'autres applications ou services consomment de la mémoire sur ce serveur. Reconfigurez les applications ou services moins critiques pour consommer moins de mémoire ou déplacez-les vers un serveur distinct. Cette action peut supprimer la pression de la mémoire externe.

  11. Exécutez les commandes DBCC suivantes pour libérer plusieurs caches de mémoire SQL Server, une mesure temporaire.

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE