Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
s’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
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 une allocation de 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 avoir attendu une période d’expiration dynamiquement déterminée par le coût de requête estimé par l’optimiseur de requête, SQL Server met fin à la requête avec l’erreur 8645 A timeout occurred while waiting for memory resources to execute the query in the resource pool 'default'.
La valeur de délai d’attente varie légèrement entre les versions de SQL Server, mais a une valeur maximale de délai d’attente de 24 heures. Vous pouvez voir la valeur de délai d’expiration définie au niveau du serveur en examinant timeout_sec
sys.dm_exec_query_memory_grants.
Pour obtenir une explication détaillée des étapes de résolution des problèmes, passez en revue les problèmes de performances lentes ou de mémoire faible causées par les allocations de mémoire dans SQL Server.
Cause
Cette erreur est visible par rapport aux allocations de mémoire et aux attentes prolongées pour que la mémoire soit disponible. En règle générale, lorsqu’une requête est terminée, 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 que d’autres requêtes se terminent au-delà du délai d’attente. Il peut y avoir une seule requête qui a consommé toute la mémoire QE disponible ou il peut y avoir de nombreuses requêtes et combinées, 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.
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 :
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.
Réécrire des requêtes pour réduire ou éviter les opérations de tri et de hachage.
Mettez à jour les statistiques et conservez-les régulièrement pour garantir que SQL Server estime correctement l’allocation de mémoire.
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.
Utilisez l’indicateur OPTION (min_grant_percent = XX, max_grant_percent = XX) dans vos requêtes si possible.
Utilisez Resource Governor pour limiter l’effet de l’utilisation de la mémoire QE uniquement à une certaine charge de travail.
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.
Augmentez la mémoire SQL Server ou ajustez les paramètres existants.
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
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.
Augmentez la mémoire au niveau du système d’exploitation (ram physique ou virtuel).
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.
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