Remarque
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.
SQL Server In-Memory OLTP utilise plus de mémoire et de différentes façons que SQL Server. Il est possible que la quantité de mémoire que vous avez installée et allouée pour In-Memory OLTP devienne insuffisante pour vos besoins croissants. Si c’est le cas, vous pourriez manquer de mémoire. Cette rubrique explique comment récupérer à partir d’une situation OOM. Consultez Surveiller et résoudre les problèmes d’utilisation de la mémoire pour obtenir des conseils qui peuvent vous aider à éviter de nombreuses situations OOM.
Abordé dans cette rubrique
| Sujet | Aperçu |
|---|---|
| Résoudre les échecs de restauration de base de données en raison de OOM | Que faire si vous obtenez le message d’erreur « Échec de l’opération de restauration pour la base de données « <databaseName » en raison d’une mémoire insuffisante dans le pool de ressources « resourcePoolName>>».< |
| Résoudre l’impact d’une mémoire faible ou de conditions OOM sur la charge de travail | Que faire si vous trouvez des problèmes de mémoire faible ont un impact négatif sur les performances. |
| Résoudre les échecs d’allocation de pages en raison d’une mémoire insuffisante lorsque la mémoire suffisante est disponible | Que faire si vous obtenez le message d'erreur « Interdiction d'attribution de pages pour la base de données '<databaseName>' en raison d'une mémoire insuffisante dans le pool de ressources '<resourcePoolName>'. ..." lorsque la mémoire disponible est suffisante pour l’opération. |
Résoudre les échecs de restauration de base de données en raison de OOM
Lorsque vous tentez de restaurer une base de données, vous pouvez recevoir le message d’erreur : « Échec de l’opération de restauration pour la base de données « <databaseName> » en raison d’une mémoire insuffisante dans le pool de ressources « <resourcePoolName> ». Avant de pouvoir restaurer correctement la base de données, vous devez résoudre le problème de mémoire insuffisant en rendant plus de mémoire disponible.
Pour résoudre l'échec de récupération dû à un manque de mémoire, utilisez un ou plusieurs des moyens suivants pour augmenter temporairement la mémoire disponible pour l'opération de récupération.
Fermez temporairement les applications en cours d’exécution.
En fermant une ou plusieurs applications en cours d’exécution, telles que Visual Studio, Internet Explorer, OneNote et d’autres, vous définissez la mémoire qu’ils utilisaient pour l’opération de restauration. Vous pouvez les redémarrer après la restauration réussie.Augmentez la valeur de MAX_MEMORY_PERCENT.
Cet extrait de code change MAX_MEMORY_PERCENT pour le pool de ressources PoolHk à 70% de mémoire installée.Important
Si le serveur s’exécute sur une machine virtuelle et n’est pas dédié, définissez la valeur de MIN_MEMORY_PERCENT sur la même valeur que MAX_MEMORY_PERCENT.
Pour plus d’informations, consultez la rubrique Meilleures pratiques : utilisation de In-Memory OLTP dans un environnement de machine virtuelle .-- disable resource governor ALTER RESOURCE GOVERNOR DISABLE -- change the value of MAX_MEMORY_PERCENT ALTER RESOURCE POOL PoolHk WITH ( MAX_MEMORY_PERCENT = 70 ) GO -- reconfigure the Resource Governor -- RECONFIGURE enables resource governor ALTER RESOURCE GOVERNOR RECONFIGURE GOPour plus d’informations sur les valeurs maximales de MAX_MEMORY_PERCENT consultez la section Rubrique Pourcentage de mémoire disponible pour les tables et index mémoire optimisées
Reconfigurez la mémoire maximale du serveur.
Pour plus d’informations sur la configuration de la mémoire maximale du serveur , consultez la rubrique Optimisation des performances du serveur à l’aide des options de configuration de la mémoire.
Résoudre l’impact d’une mémoire faible ou de conditions OOM sur la charge de travail
Évidemment, il est préférable de ne pas entrer dans une situation de mémoire insuffisante ou de OOM (hors mémoire). Une bonne planification et une surveillance peuvent vous aider à éviter les situations OOM. Toujours, la meilleure planification ne prévoit pas toujours ce qui se passe réellement et vous risquez de finir avec une mémoire faible ou OOM. Il existe deux étapes pour récupérer à partir de OOM :
Ouvrir une DAC (connexion d’administrateur dédié)
Microsoft SQL Server fournit une connexion d’administrateur dédiée (DAC). La DAC permet à un administrateur d’accéder à une instance en cours d’exécution du moteur de base de données SQL Server pour résoudre les problèmes sur le serveur, même si le serveur ne répond pas à d’autres connexions clientes. La DAC est disponible via l’utilitaire sqlcmd et SQL Server Management Studio (SSMS).
Pour obtenir des conseils sur l’utilisation sqlcmd et la DAC, consultez Utilisation d’une connexion d’administrateur dédié. Pour obtenir des conseils sur l’utilisation de DAC via SSMS , consultez Guide pratique pour utiliser la connexion administrateur dédiée avec SQL Server Management Studio.
Prendre des mesures correctives
Pour résoudre votre condition OOM, vous devez libérer de la mémoire existante en réduisant l’utilisation, ou rendre plus de mémoire disponible pour vos tables en mémoire.
Libérer la mémoire existante
Supprimer les lignes de table optimisées en mémoire non essentielles et attendre la collecte de déchets
Vous pouvez supprimer des lignes non essentielles d’une table optimisée en mémoire. Le collecteur de déchets libère la mémoire utilisée par ces lignes afin qu'elle soit disponible. . Le moteur OLTP en mémoire collecte les lignes obsolètes de façon agressive. Toutefois, une transaction de longue durée peut empêcher le ramassage des ordures. Par exemple, si vous avez une transaction qui s'exécute pendant 5 minutes, toutes les versions de ligne créées en raison d'opérations de mise à jour ou de suppression tant que la transaction est active ne peuvent pas être récupérées par le ramasse-miettes.
Déplacer une ou plusieurs lignes vers une table sur disque
Les articles TechNet suivants fournissent des conseils sur le déplacement de lignes d’une table optimisée en mémoire vers une table sur disque.
Augmenter la mémoire disponible
Augmenter la valeur de MAX_MEMORY_PERCENT sur le pool de ressources
Si vous n’avez pas créé de pool de ressources nommé pour vos tables en mémoire, vous devez le faire et lier vos bases de données OLTP In-Memory. Consultez la rubrique Lier une base de données avec des tables Memory-Optimized à un pool de ressources pour obtenir des conseils sur la création et la liaison de vos bases de données OLTP In-Memory à un pool de ressources.
Si votre base de données OLTP In-Memory est liée à un pool de ressources, vous pouvez peut-être augmenter le pourcentage de mémoire auquel le pool peut accéder. Consultez la sous-rubrique Modifier MIN_MEMORY_PERCENT et MAX_MEMORY_PERCENT sur un pool existant pour obtenir des conseils sur la modification de la valeur de MIN_MEMORY_PERCENT et de MAX_MEMORY_PERCENT pour un pool de ressources.
Augmentez la valeur de MAX_MEMORY_PERCENT.
Cet extrait de code change MAX_MEMORY_PERCENT pour le pool de ressources PoolHk à 70% de mémoire installée.
Important
Si le serveur s’exécute sur une machine virtuelle et n’est pas dédié, définissez la valeur de MIN_MEMORY_PERCENT et MAX_MEMORY_PERCENT sur la même valeur.
Pour plus d’informations, consultez la rubrique Meilleures pratiques : utilisation de In-Memory OLTP dans un environnement de machine virtuelle .
-- disable resource governor
ALTER RESOURCE GOVERNOR DISABLE
-- change the value of MAX_MEMORY_PERCENT
ALTER RESOURCE POOL PoolHk
WITH
( MAX_MEMORY_PERCENT = 70 )
GO
-- reconfigure the Resource Governor
-- RECONFIGURE enables resource governor
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Pour plus d’informations sur les valeurs maximales pour MAX_MEMORY_PERCENT consultez la section Pourcentage de mémoire disponible pour les tables et index mémoire optimisées.
Installer une mémoire supplémentaire
Finalement, la meilleure solution, si possible, consiste à installer une mémoire physique supplémentaire. Si vous effectuez cette opération, n’oubliez pas que vous serez probablement en mesure d’augmenter la valeur de MAX_MEMORY_PERCENT (voir la sous-rubrique Modifier MIN_MEMORY_PERCENT et MAX_MEMORY_PERCENT sur un pool existant), car SQL Server n’aura probablement pas besoin de plus de mémoire, ce qui vous permet de tirer le meilleur parti si la mémoire nouvellement installée n’est pas disponible pour le pool de ressources.
Important
Si le serveur s’exécute sur une machine virtuelle et n’est pas dédié, définissez la valeur de MIN_MEMORY_PERCENT et MAX_MEMORY_PERCENT sur la même valeur.
Pour plus d’informations, consultez la rubrique Meilleures pratiques : utilisation de In-Memory OLTP dans un environnement de machine virtuelle .
Résoudre les échecs d’allocation de pages en raison d’une mémoire insuffisante lorsque la mémoire suffisante est disponible
Si vous recevez le message d'erreur « Disallowing page allocations for database '<databaseName>' en raison d'une mémoire insuffisante dans le pool de ressources '<resourcePoolName>'. Consultez «https://go.microsoft.com/fwlink/?LinkId=330673» pour plus d’informations dans le journal des erreurs lorsque la mémoire physique disponible est suffisante pour allouer la page ; cela peut être dû à un Gouverneur de ressources désactivé. Lorsque Resource Governor est désactivé MEMORYBROKER_FOR_RESERVE provoque une sollicitation artificielle de la mémoire.
Pour résoudre ce problème, vous devez activer Resource Governor.
Consultez Activer Resource Governor pour obtenir des informations sur les limites et les restrictions, ainsi que des conseils sur l’activation de Resource Governor à l’aide de l’Explorateur d’objets, des propriétés Resource Governor ou de Transact-SQL.
Voir aussi
Gestion de la mémoire pour In-Memory OLTP
Surveiller et résoudre les problèmes d’utilisation de la mémoire
Lier une base de données avec des tables Memory-Optimized à un pool de ressources
Meilleures pratiques : utilisation de In-Memory OLTP dans un environnement de machine virtuelle