Partage via


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 requête 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 des requêtes 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 d’index et la population. 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 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’attente définie au niveau du serveur en examinant timeout_sec sys.dm_exec_query_memory_grants.

Cause

Cette erreur est visible par rapport aux allocations de mémoire et aux 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 de délai d’attente a attendu plus de 20 minutes pour terminer leur travail. Il n’y a qu’une seule requête qui a consommé toute la mémoire QE disponible ou il peut y avoir de nombreuses requêtes et ensemble leurs allocations de mémoire ont épuisé la mémoire QE. Si vous avez des demandes 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’ils utilisent.

Action utilisateur

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, vérifiez les paramètres du pool de ressources ou du groupe de charge de travail.

Une explication détaillée et les étapes de résolution des problèmes sont décrites dans La résolution des problèmes de performances lentes ou de faible mémoire causés par les allocations de mémoire dans SQL Server.

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

  1. Identifiez les demandes dans SQL Server qui sont les grands consommateurs de mémoire ou de mémoire QE. Pour plus d’informations, consultez Comment identifier les attentes de mémoire d’exécution de requête.

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

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

  4. Créez des index appropriés pour la requête ou les requêtes identifiées. Les index peuvent réduire le grand nombre de lignes traitées, ce qui modifie les algorithmes JOIN et réduit la taille des subventions ou les élimine 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 des requêtes adaptatifs, ce qui permet au mécanisme de retour d’allocation de mémoire d’ajuster dynamiquement la taille d’allocation de mémoire au moment de l’exécution. Cette fonctionnalité peut empêcher les problèmes d’octroi de mémoire en premier lieu.

  8. Augmentez la mémoire SQL Server 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. Comptez des besoins en mémoire accrus pour SQL Server. Les paramètres par défaut et recommandés sont répertoriés dans les options de configuration de la mémoire du serveur.

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

  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 les déplacer vers un serveur distinct. Cette action peut supprimer la pression de 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