Comment résoudre le problème de faible quantité de mémoire libérable dans mon instance RDS for SQL Server ?

Dernière mise à jour : 03/10/2022

Comment résoudre le problème de faible quantité de mémoire libérable dans mon instance Amazon Relational Database (Amazon RDS) for SQL Server ?

Brève description

Une très faible quantité de mémoire libérable provoque des temps d'arrêt inattendus sur votre instance. Il est donc important de surveiller l'utilisation de la mémoire sur l'instance et de prendre des mesures correctives.

La mémoire libérable est la quantité de mémoire (RAM) disponible sur l'instance RDS. La quantité totale de mémoire disponible sur une instance Amazon RDS dépend de la classe d'instance. Par exemple, la classe d'instance db.r5.8xlarge fournit 32 vCPU et 256 Gio de mémoire. Si vous allouez une instance RDS avec la classe d'instance db.r5.8xlarge, la mémoire totale sur la classe d'instance (256 Gio) est partagée par les éléments suivants :

  • Le système d'exploitation
  • Les processus Amazon RDS
  • Le moteur de base de données
  • Les threads de travail
  • Les applications de la suite Business Intelligence (SSIS, SSAS, SSRS), etc.

Pour plus d'informations sur la façon dont SQL Server utilise la mémoire, consultez le Guide d'architecture de gestion de la mémoire (français non garanti) sur le site Web de documentation de Microsoft.

Solution

Surveiller l'utilisation de la mémoire sur votre instance

Métriques Amazon CloudWatch

Surveillez les métriques Amazon CloudWatch pour FreeableMemory afin d'identifier les occurrences de mémoire faible. En plus de FreeableMemory, vous pouvez surveiller les éléments suivants pour identifier une augmentation de la charge de travail lorsque la mémoire disponible est faible :

  • DatabaseConnections
  • CPUUtilization
  • ReadIOPS
  • ReadThroughput
  • WriteIOPS
  • WriteThroughput

Surveillance améliorée

La surveillance améliorée peut être activée avec différentes granularités, telles que 1, 5, 10, 15, 30 ou 60 secondes pour surveiller les métriques du système d'exploitation pour Microsoft SQL Server. Définir la granularité à 1 ou 5 secondes constitue une bonne pratique (la valeur par défaut est de 60 secondes). Vous pouvez créer des alarmes CloudWatch pour surveiller la consommation de mémoire de votre instance de base de données Amazon RDS for SQL Server à l'aide de la surveillance améliorée

Résolution des problèmes de faible quantité de mémoire libérable

Pour résoudre les problèmes de faible quantité de mémoire libérable, procédez comme suit :

Limiter la quantité de mémoire utilisée par l'instance RDS

Limitez la quantité de mémoire utilisée par l'instance RDS en définissant la quantité maximale de mémoire du serveur à une valeur qui n'entraîne pas de sollicitation de la mémoire à l'échelle du système. Vous pouvez déterminer la valeur de la quantité maximale de mémoire du serveur pour votre instance à l'aide de la formule suivante :

max_server_memory = total_RAM – (1 Go pour le système d'exploitation + memory_basis_amount_of_RAM_on_the_server)

Total_RAM est égal à la mémoire de la classe de l'instance où la memory_basis_amount_of_RAM_on_the_server est déterminée comme suit :

  • Si la RAM sur le serveur est comprise entre 4 Go et 16 Go : laissez 1 Go par 4 Go de RAM. Par exemple, pour un serveur de 16 Go, laissez 4 Go.
  • Si la RAM sur le serveur est supérieure à 16 Go : laissez 1 Go par 4 Go de RAM jusqu'à 16 Go, et 1 Go par 8 Go de RAM au-delà de 16 Go.

Par exemple, si un serveur dispose de 64 Go de RAM, le calcul est le suivant :

  • 1 Go pour le système d'exploitation
  • Jusqu'à 16 Go de RAM : 16/4 = 4 Go
  • RAM restante supérieure à 16 Go : (64-16)/8 = 6
  • Total de la RAM à laisser : 1 + 4 + 6 = 11 Go
  • max_server_memory : 64 – 11 = 53 Go

Remarques :

  • Si vous utilisez SSIS, SSAS ou SSRS sur l'instance, la mémoire max_server_memory doit être ajustée pour prendre en compte ces composants.
    Exemple : vous voulez utiliser SSRS avec l'instance RDS. Définissez la valeur de la mémoire maximale de SSRS à 10 % (pourcentage de la mémoire totale de l'instance de base de données). Cela représente environ 6,4 Gio sur une instance avec 64 Gio de mémoire. La valeur de max_server_memory devrait être d'environ 46 Gio (64-11-6,4).
  • Après la configuration initiale de max_server_memory, FreeableMemory doit être constamment surveillé pour décider d'augmenter ou de diminuer la quantité de mémoire allouée.

Pour modifier la valeur de max_server_memory, configurez-la à l'aide d'un groupe de paramètres personnalisés. La valeur de max_server_memory doit être spécifiée en Mo.

Remarque : le paramètre max_server_memory est un paramètre dynamique. Un redémarrage n'est donc pas nécessaire pour que les modifications prennent effet.

Vérifier les connexions aux bases de données

Chaque connexion à la base de données établie avec l'instance nécessite une allocation de mémoire en dehors du groupe de tampons pour les threads de travail. Ainsi, un pic de DatabaseConnections peut entraîner une baisse de la quantité de mémoire libérable.

Vérifier si les composants SSIS, SSAS ou SSRS sont utilisés sur l'instance de base de données

En utilisant le groupe d'options Amazon RDS for SQL Server, identifiez si les composants SSIS, SSAS ou SSRS sont utilisés sur l'instance de base de données. La mémoire utilisée par ces composants existe en dehors du paramètre max_server_memory. Si vous n'utilisez pas ces fonctions, supprimez-les en modifiant le groupe d'options. La suppression de ces fonctions réduit l'empreinte mémoire de l'instance.

Surveiller l'instance de base de données à l'aide de Performance Insights

À l'aide de Performance Insights, vous pouvez surveiller l'instance de base de données pour analyser les performances de la base de données. Vous pouvez utiliser le tableau de bord Performance Insights pour surveiller la charge de la base de données, les attentes, les requêtes, les hôtes, les utilisateurs, etc. La surveillance de ces éléments vous aide à identifier les goulots d'étranglement potentiels qui ralentissent l'instance.

Effectuer une maintenance régulière sur l'instance de base de données

Effectuez régulièrement la maintenance des index et maintenez les statistiques à jour. Les index très fragmentés peuvent causer une augmentation de l'activité d'E/S, ce qui entraîne une plus grande consommation de mémoire. De même, des statistiques obsolètes peuvent fausser l'estimation de la cardinalité et conduire à la sélection d'un plan de requête sous-optimal.

Remarque : effectuer la maintenance des index et des statistiques en dehors des périodes de pointe ou pendant une fenêtre de maintenance constitue une bonne pratique.

Surveiller l'espérance de vie d'une page et le taux d'accès au cache des tampons

L'espérance de vie d'une page (PLE, Page Life Expectancy) indique le nombre de secondes pendant lesquelles une page est conservée dans le groupe de tampons sans référence.

Le taux d'accès au cache des tampons (BCHR, Buffer Cache Hit Ratio) est le pourcentage de demandes de pages satisfaites par des pages de données du groupe de tampons.

La surveillance du PLE et du BCHR permet d'identifier la sollicitation de la mémoire. Pour surveiller ces métriques à l'aide de Performance Insights, procédez comme suit :

  1. Ouvrez la console Amazon RDS.
  2. Sélectionnez Performance Insights.
  3. Sélectionnez l'instance RDS for SQL Server que vous voulez surveiller.
  4. Définissez la plage de temps pour laquelle vous voulez examiner les métriques, puis sélectionnez Manage Metrics (Gérer les métriques).
  5. Sélectionnez Database Metrics (Métriques de base de données), Page Life Expectancy, Buffer Cache Hit Ratio (Espérance de vie d'une page, Taux d'accès au cache des tampons).

Pour des performances optimales, les valeurs de ces métriques doivent être aussi élevées que possible. Vous pouvez surveiller ces métriques à l'aide de Performance Insights. Vous pouvez constater que les valeurs de ces métriques sont constamment basses sur une période donnée. Si c'est le cas, ajustez les requêtes qui accèdent aux données ou augmentez la classe d'instance pour avoir plus de mémoire.

Lorsqu'il y a une sollicitation de la mémoire sur l'instance, ainsi que de faibles PLE et BCHR, l'attente PAGEIOLATCH augmente. Cela signifie que SQL Server attend qu'une page soit extraite du disque et chargée en mémoire. De même, l'attente RESOURCE_SEMAPHORE peut être remarquée lorsque les demandes de mémoire d'une requête ne peuvent être honorées en raison d'un manque de mémoire. Cela provoque une augmentation de l'utilisation de l'UC car les pages de données ne sont pas mises en cache assez longtemps en mémoire. Lorsque cela se produit, SQL Server doit accéder de manière répétée au disque pour accéder aux données, ce qui entraîne des problèmes de performance.

Identifier les requêtes qui utilisent le plus de ressources

À l'aide de Performance Insights, identifiez les requêtes qui utilisent le plus de ressources et ajustez-les pour obtenir de meilleures performances.

Sélectionner la taille d'instance correcte pour votre charge de travail

La quantité de mémoire sur une instance dépend du type d'instance. Il est important de sélectionner une classe d'instance avec des ressources adéquates afin que l'instance de base de données dispose de suffisamment de ressources pour la charge de travail. Une instance avec moins de ressources rencontre des problèmes de performance et une instance surdimensionnée gaspille des ressources.

Établir une base de référence pour l'utilisation des ressources

Établissez une base de référence pour l'utilisation des ressources de l'instance en surveillant des métriques telles que FreeableMemory, l'espérance de vie d'une page, le taux d'accès au cache des tampons, etc. S'il y a une augmentation significative du volume de données sur l'instance, augmentez la valeur max_server_memory. Assurez-vous d'augmenter la valeur max_server_memory proportionnellement à la modification du volume de données pour maintenir le même niveau de performance sur l'instance.

Remarques : vous pouvez utiliser les outils natifs de SQL Server, comme les rapports et les DMV, pour identifier les composants qui utilisent de la mémoire dans SQL Server. En utilisant SQL Server Management Studio (SSMS), vous pouvez examiner l'utilisation de la mémoire de SQL Server :

  1. Ouvrez SQL Server Management Studio (SSMS) et connectez-vous à votre instance RDS for SQL Server.
  2. Dans l'Explorateur d'objets, cliquez avec le bouton droit de la souris sur le nom du point de terminaison de l'instance RDS.
  3. Sélectionnez Reports (Rapports), Standard Reports (Rapports standard), Memory Consumption (Consommation de mémoire).

Vous pouvez également interroger la DMV sys.dm_os_memory_clerks pour identifier les composants qui utilisent le maximum de mémoire dans SQL Server.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?