Share via


Résoudre les problèmes de mémoire insuffisante

SQL Server In-Memory OLTP utilise plus de mémoire et de différentes manières 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 risquez de manquer de mémoire. Cette rubrique explique les procédures à mettre en œuvre en cas d'insuffisance de mémoire. Consultez Analyse et dépannage de l’utilisation de mémoire pour des conseils pouvant vous aider à éviter de nombreuses situations d’épuisement de la mémoire.

Thèmes abordés dans cette rubrique

Rubrique Vue d’ensemble
Résoudre les problèmes de restauration de base de données en cas d'insuffisance de mémoire Que faire si vous recevez 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 les problèmes d'insuffisance de mémoire ayant un impact sur la charge de travail Explique la procédure à suivre si vous constatez que les problèmes d'insuffisance de mémoire ont un effet négatif sur les performances.
Résoudre les échecs d'allocation de pages dus à une mémoire insuffisante alors qu'il y a suffisamment de mémoire à disposition Que faire si vous recevez le message d’erreur« Refus des allocations de page 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 problèmes de restauration de base de données en cas d'insuffisance de mémoire

Lorsque vous tentez de restaurer une base de données, vous pouvez recevoir le message d’erreur : « L’opération de restauration a échoué pour la base de données '<databaseName>' en raison d’une mémoire insuffisante dans le pool de ressources '<resourcePoolName>' ». Avant de pouvoir restaurer la base de données, vous devez résoudre le problème de mémoire insuffisante en rendant plus de mémoire disponible.

Pour résoudre un échec de récupération dû à une situation d'insuffisance de mémoire, augmentez la mémoire disponible à l'aide de tous les moyens à votre disposition afin de disposer temporairement d'une mémoire suffisante 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, comme Visual Studio, Internet Explorer, OneNote et autres, vous mettez à disposition de l’opération de restauration la quantité de mémoire qu’elles utilisaient. Vous pourrez les redémarrer à la fin de la restauration.

  • Augmentez la valeur de MAX_MEMORY_PERCENT.
    Cet extrait de code modifie la valeur de MAX_MEMORY_PERCENT pour le pool de ressources PoolHk à 70 % de la mémoire installée.

    Important

    Si le serveur s'exécute sur une machine virtuelle sans être dédié, attribuez à MIN_MEMORY_PERCENT et à MAX_MEMORY_PERCENT la même valeur.
    Consultez la rubrique Bonnes pratiques : Utilisation de l’OLTP en mémoire dans un environnement de machine virtuelle pour plus d’informations.

    
    -- 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 de rubrique Pourcentage de mémoire disponible pour les tables et les index à mémoire optimisée

  • Reconfigurezz max server memory.
    Pour plus d’informations sur la configuration de max server memory, consultez la rubrique Optimisation des performances du serveur à l’aide des options de configuration de la mémoire.

Résoudre les problèmes d'insuffisance de mémoire ayant un impact sur la charge de travail

Évidemment, il est préférable de ne pas se trouver dans une situation d'insuffisance de mémoire. Une planification et une surveillance appropriées permettent souvent d'éviter ce type de problème. Néanmoins, même la meilleure des planifications ne suffit pas toujours pour anticiper ce qui va réellement se produire. Vous risquez donc d'être confronté à un problème d'insuffisance de mémoire à un moment ou un autre. Vous pouvez mettre fin à une situation d'insuffisance de mémoire en procédant aux deux étapes ci-dessous :

  1. Ouvrir une connexion administrateur dédiée (DAC).

  2. Prendre une mesure corrective

Ouvrir une connexion administrateur dédiée (DAC).

Microsoft SQL Server propose une connexion administrateur dédiée (DAC). Cette connexion DAC permet à un administrateur d’accéder à une instance active du moteur de base de données SQL Server afin de résoudre les problèmes sur le serveur, même si ce serveur ne répond pas aux autres connexions clientes. La connexion DAC est disponible via l'utilitaire sqlcmd et SQL Server Management Studio (SSMS).

Pour obtenir des conseils sur l'utilisation de sqlcmd et de DAC, consultez Utilisation d'une connexion administrateur dédiée. Pour obtenir des conseils sur l'utilisation de DAC via SSMS, consultez Procédure : utiliser la connexion administrateur dédiée avec SQL Server Management Studio.

Prendre une mesure corrective

Pour résoudre une situation d'insuffisance de mémoire, vous devez libérer de la mémoire existante en réduisant son utilisation ou mettre plus de mémoire à la disposition de vos tables en mémoire.

Libérer de la mémoire existante

Supprimer les lignes non essentielles des tables mémoire optimisées et patienter jusqu'au prochain garbage collection

Vous pouvez supprimer les lignes non essentielles d'une table mémoire optimisée. Le garbage collector remet à disposition la mémoire utilisée par ces lignes. . Le moteur de l'OLTP en mémoire collecte les lignes à nettoyer de façon agressive. Cependant, une transaction longue peut empêcher cette opération de garbage collection. Par exemple, si une transaction s’exécute pendant 5 minutes, les versions de ligne créées par des opérations de mise à jour ou de suppression alors que la transaction était active ne peuvent pas être récupérées par le garbage collector.

Déplacer une ou plusieurs lignes dans une table sur disque

Les articles TechNet suivants donnent des conseils pour déplacer des lignes d'une table mémoire optimisée 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 y lier vos bases de données OLTP In-Memory. Consultez la rubrique Lier une base de données avec Memory-Optimized tables à 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 In-Memory base de données OLTP est liée à un pool de ressources, vous pourrez 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 des valeurs MIN_MEMORY_PERCENT et MAX_MEMORY_PERCENT pour un pool de ressources.

Augmentez la valeur de MAX_MEMORY_PERCENT.
Cet extrait de code modifie la valeur de MAX_MEMORY_PERCENT pour le pool de ressources PoolHk à 70 % de la mémoire installée.

Important

Si le serveur s'exécute sur une machine virtuelle sans être dédié, attribuez à MIN_MEMORY_PERCENT et à MAX_MEMORY_PERCENT la même valeur.
Consultez la rubrique Bonnes pratiques : Utilisation de l’OLTP en mémoire dans un environnement de machine virtuelle pour plus d’informations.

  
-- 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 de MAX_MEMORY_PERCENT, consultez la section Pourcentage de mémoire disponible pour les tables et index mémoire optimisés.

Installer de la mémoire supplémentaire

En fin de compte, la meilleure solution, le cas échéant, consiste à installer de la mémoire physique supplémentaire. Dans ce cas, n’oubliez pas que vous serez probablement en mesure d’augmenter également la valeur de MAX_MEMORY_PERCENT (consultez 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 mettre la plupart, voire la totalité de la mémoire nouvellement installée, disponible pour le pool de ressources.

Important

Si le serveur s'exécute sur une machine virtuelle sans être dédié, attribuez à MIN_MEMORY_PERCENT et à MAX_MEMORY_PERCENT la même valeur.
Consultez la rubrique Bonnes pratiques : Utilisation de l’OLTP en mémoire dans un environnement de machine virtuelle pour plus d’informations.

Résoudre les échecs d'allocation de pages dus à une mémoire insuffisante alors qu'il y a suffisamment de mémoire à disposition

Si vous recevez le message d’erreur « Interdiction des allocations de pages pour la base de données '<databaseName>' en raison d’une mémoire insuffisante dans le pool de ressources '<resourcePoolName>'. Pour plus d’informations, consultez «https://go.microsoft.com/fwlink/?LinkId=330673 » dans le journal des erreurs lorsque la mémoire physique disponible est suffisante pour allouer la page, cela peut être dû à une Resource Governor désactivée. Lorsque Resource Governor est désactivé, MEMORYBROKER_FOR_RESERVE induit une sollicitation de la mémoire artificielle.

Pour corriger le problème, vous devez activer Resource Governor.

Consultez Activer Resource Governor pour obtenir des informations sur les limites et les restrictions, ainsi que sur l’activation de Resource Governor à l’aide de l’Explorateur d’objets, sur les propriétés de Resource Governor et sur Transact-SQL.

Voir aussi

Gestion de la mémoire pour l’OLTP en mémoire
Surveiller l’utilisation de la mémoire et résoudre les problèmes connexes
Lier une base de données avec des tables mémoire optimisées à un pool de ressources
Bonnes pratiques : Utilisation de In-Memory OLTP dans un environnement de machine virtuelle