Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Cache tampon :qu'est-ce que c'est et quel est son impact sur les performances de la base de données ?

Dans SQL Server, le cache de tampon est la mémoire qui vous permet d'interroger rapidement les données fréquemment consultées. Lorsque des données sont écrites ou lues à partir d'une base de données SQL Server, le gestionnaire de tampons les copie dans le cache de tampons (c'est-à-dire le pool de tampons). Lorsqu'il est plein, les pages de données plus anciennes ou moins fréquemment utilisées sont déplacées vers le disque dur.

Pourquoi dois-je surveiller le cache des tampons ?

L'utilisation de la mémoire peut avoir un impact significatif sur les performances. Lorsque la mémoire est insuffisante, les pages de données sont fréquemment purgées du cache de tampon. Cela ralentit les requêtes car SQL Server doit accéder au disque pour trouver la page de données, la restaurer dans le cache tampon, puis lire la page avant de pouvoir renvoyer les résultats de la requête.

Il existe de nombreuses raisons pour lesquelles les requêtes commencent à s'exécuter lentement. Mais si vous voulez exclure les problèmes de mémoire, regardez ce qui se passe à l'intérieur du cache de tampon. Un coup d'œil à l'intérieur permettra d'identifier la base de données, la table ou l'index qui accapare la mémoire et exerce une pression sur la mémoire tampon.

Pour voir quelle base de données consomme le plus de mémoire, utilisez la requête :

SELECT
CASE database_id
WHEN 32767 THEN 'ResourceDb'
ELSE db_name(database_id)
END AS database_name, COUNT(1)/128 AS megabytes_in_cache
FROM sys.dm_os_buffer_descriptors
GROUP BY DB_NAME(database_id) ,database_id
ORDER BY megabytes_in_cache DESC;

Pour identifier la table ou l'index qui consomme le plus de mémoire, exécutez cette requête dans la base de données que vous souhaitez inspecter :

SELECT COUNT(1)/128 AS megabytes_in_cache
,name ,index_id
FROM sys.dm_os_buffer_descriptors AS bd
INNER JOIN
(
SELECT object_name(object_id) AS name
,index_id ,allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.hobt_id
AND (au.type = 1 OR au.type = 3)
UNION ALL
SELECT object_name(object_id) AS name
,index_id, allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.partition_id
AND au.type = 2
) AS obj
ON bd.allocation_unit_id = obj.allocation_unit_id
WHERE database_id = DB_ID()
GROUP BY name, index_id
ORDER BY megabytes_in_cache DESC;

Gérer la mémoire avec des métriques

Bien qu'il soit utile de vérifier ponctuellement les bases de données et les index pour une utilisation excessive de la mémoire, le suivi des métriques du cache de tampon est vraiment le meilleur moyen d'identifier et de résoudre les problèmes de performances causés par la pression interne sur la mémoire.

Voici les cinq principales mesures à surveiller pour améliorer les problèmes de performances liés à la mémoire :

1. Taux d'accès au cache tampon

  • Cette métrique montre comment SQL Server utilise le cache de tampon
  • Le taux d'accès identifie le pourcentage de requêtes de pages qui ont été complétées par des pages de données du cache tampon par rapport à toutes les requêtes de pages de données
  • Les pages introuvables dans le cache tampon sont lues à partir du disque, ce qui est beaucoup plus lent
  • Le ratio de cache tampon idéal est de 100 (c'est-à-dire que SQL Server lit toutes les pages du cache tampon et aucune du disque)
  • La valeur de cache de tampon recommandée est supérieure à 90

2. Espérance de vie des pages (PLE)

  • L'espérance de vie de la page mesure la durée (en secondes) pendant laquelle une page de données reste dans le cache de la mémoire tampon
  • Plus le PLE est long, meilleures sont les chances que SQL Server lise les pages du cache tampon et n'ait pas à accéder au disque
  • S'il n'y a pas assez de mémoire, les pages de données sont vidées du cache tampon plus souvent pour libérer de l'espace pour de nouvelles pages
  • Historiquement, lorsque les systèmes disposaient de beaucoup moins de mémoire qu'aujourd'hui, une valeur PLE "normale" était de 300 secondes
  • Aujourd'hui, une formule est utilisée pour déterminer le "bon" PLE :Page Life Expectancy =300 secondes pour chaque tranche de 4 Go de RAM sur votre serveur
  • Le PLE doit rester stable s'il est suivi dans le temps
  • Des diminutions rapides et fréquentes indiquent des problèmes de mémoire
  • Une baisse de plus de 50 % doit faire l'objet d'une enquête immédiate

3. Lectures de pages/s (niveau serveur)

  • Cette métrique indique le nombre de lectures physiques (c'est-à-dire de lectures à partir du disque) effectuées en une seconde dans toutes les bases de données d'une instance
  • Les lectures physiques sont coûteuses et lentes
  • Réduire les lectures physiques en utilisant un cache de données plus important, des index intelligents et des requêtes plus efficaces, ou en modifiant la conception de la base de données
  • La valeur recommandée est inférieure à 90
  • Une valeur supérieure à 90 indique une mémoire insuffisante et des problèmes d'indexation

4. Écritures de page/s

  • Cette statistique indique le nombre de fois que des pages ont été écrites sur le disque au niveau du serveur en une seconde
  • La valeur recommandée est inférieure à 90

5. Entrée de pages/s et sortie de pages/s (compteurs de mémoire)

  • Pages input/sec est le nombre de pages importées du disque chaque seconde
  • Le nombre de pages produites/s est le nombre de pages écrites sur le disque chaque seconde pour faire de la place dans le cache de tampon
  • Pages/sec est la somme des pages entrées/sec et des pages sorties/sec
  • Si la valeur de pages/seconde est systématiquement supérieure à 50, une enquête supplémentaire est nécessaire

Un cache de tampon sain est un élément important pour optimiser la vitesse des requêtes SQL Server. Bien que les problèmes de mémoire ne soient que l'un des nombreux facteurs susceptibles de ralentir les réponses aux requêtes, ils sont assez faciles à identifier et à résoudre. Le suivi de ces cinq métriques clés peut vous aider à conserver plus longtemps les pages de données dans le pool de mémoire tampon afin que SQL Server n'ait pas à perdre de temps à rechercher sur le disque avant de renvoyer les résultats de la requête.