[SQL Server] Perfmon : audit de la mémoire

Ce billet dresse un aperçu analytique de quelques compteurs utiles pour l’audit de la mémoire.

Compteur Description
  Memory\Available Mbytes Indique la disponibilité de la mémoire, en Mo, sur le serveur. Une valeur moyenne égale à 200 mériterait une certaine attention, et une valeur moyenne inférieure ou égale à 100 indique que le serveur commence à être affamé de mémoire.
  Memory\Page Reads/sec Indique le nombre de lectures par seconde, indépendamment du nombre de pages traitées par chaque opération. Une valeur moyenne supérieure à 5 indique des problèmes de pagination.

Memory\Page Input/Sec
Indique le taux auquel les pages sont lues du disque pour résoudre les références mémoire aux pages qui n’étaient pas dans la mémoire au moment de la référence. Si la valeur moyenne dépasse régulièrement 15, il y a des problèmes de performances au niveau de la mémoire.
Memory\Pages/sec Nombre de pages lues à partir du disque ou écrites sur le disque pour résoudre les références mémoire aux pages qui n’étaient pas dans la mémoire au moment de la référence. Il s’agit de la somme des pages en entrée/sec et des pages en sortie/sec. Ce compteur inclut le trafic de pagination de la part du cache système afin d’accéder aux données de fichier pour les applications. En règle générale, ce compteur n’est utile que combiné avec d’autres compteurs. Ainsi, si sa valeur moyenne multipliée avec la valeur moyenne de PhysicalDisk\Avg. Disk sec/Transfer donne un résultat supérieur à 0,1, il y a un goulot d’étranglement.
Page File\%Usage Pourcentage d’utilisation du fichier de pagination. Une valeur constamment trop élevée (>=70%) indique généralement une surconsommation de la mémoire virtuelle de l’OS.
Page File\% Peak Pourcentage de pics d’utilisation du fichier de pagination. Un pourcentage perpétuellement très élevé indique un manque criant de mémoire disponible (une corrélation peut être faite avec Memory\Available MBytes).
Process\Private Bytes Indique l’ensemble de la mémoire (en octets) qui est actuellement en cours de validation. Il peut être utilisé en corrélation avec Memory\Available Mbytes afin de connaître son niveau d’incidence.
Process\Working Set Indique l’ensemble de la mémoire actuellement traitée. C’est cet indicateur qui est principalement utilisé par le Task Manager. Une valeur moyenne constamment inférieure au Max Server Memory de MSSQL indique que le moteur a assez de mémoire. Si elle est constamment inférieure à Min Server Memory, le moteur SQL a trop de mémoire qui lui est allouée.
SQL Server : Buffer Manager\Target Pages Indique le nombre de pages de mémoire tampon (buffer cache)
« idéal ».
A mettre en corrélation avec Stolen Pages (voir ci-dessous).
SQL Server : Buffer Manager\Stolen Pages Indique le nombre de pages de mémoire tampon (buffer cache)
ayant été « volées » du buffer pool pour des besoins divers (i.e., traitement de procédures,…).
Une forte valeur peut indiquer un problème de performances au niveau de la mémoire interne de l’instance MSSQL. Pour déterminer si, dans le cas de notre base-exemple, on se retrouve dans un tel cas de figure, il suffit de comparer la valeur de Stolen avec celle de Target (qui correspond au nombre de pages idéal de mémoire tampon), et vérifier si elle ne dépasse pas 75% de la valeur de Target.
SQL Server : Buffer Manager\Page Life Expectancy Nombre de secondes au cours desquelles une page restera dans le buffer pool. Une valeur inférieure à 300 secondes indique généralement un manque de mémoire suffisante, un nettoyage du buffer pool ou un manque d’indexes. Et cela est problématique dans la mesure, où à ce moment-là, n’importe quelle page ne pourra être gardée en mémoire que 5 minutes, ce qui est peu.
SQL Server : Buffer Manager\Buffer Cache Hit Ratio Rapport entre le nombre de pages lues en RAM et le nombre de pages lues sur le disque. Une valeur constamment inférieure à 90% indique un manque de RAM suffisante pour MSSQL. Il faut idéalement que la valeur du BCHR soit proche de 100%.
SQL Server : Buffer Manager\Target Server Memory (KB) Peut servir d’indicateur de la
taille « idéale » que doit avoir l’ensemble de la mémoire allouée au buffer pool. A mettre en corrélation avec Total Server Memory (voir ci-dessous).
SQL Server : Buffer Manager\Total Server Memory (KB) Indicateur de la mémoire totale utilisée par le buffer pool en KB.
Si le Total Server Memory est trop largement supérieur au Target Server Memory cela indiquera un manque potentiel de capacité de croissance adéquate du buffer pool (pression de la mémoire interne), tandis que si le Target Server Memory est inférieur au Total Server Memory, le buffer pool sera considéré comme trop surdimensionné, ce qui pourrait provoquer une pression de la mémoire externe.
Idéalement, il faudrait que le Total Server Memory ait une valeur sensiblement proche de celle du Target Server Memory (sans pour autant la dépasser), voire égale.

SQLServer: SQL Statistics: Batch Requests/Sec

Indique le nombre de batches (reçus par SQL Server) par seconde. Plus la valeur est élevée, plus il y a de requêtes en exécution. Ce compteur est à mettre en corrélation avec Compilations/sec (voir ci-dessous), par exemple.
SQLServer: SQL Statistics – Compilations/sec Indique le nombre de compilations (mise-en-cache du plan d’exécution d’une requête) par seconde.
Sa valeur doit être comparée avec celle de Batch Requests/sec pour savoir si les compilations sont en train de nuire aux performances. Pour cela, il suffit de diviser la valeur de Batch Requests/sec par Compilations/sec afin d’avoir un ratio du nombre de batches exécutés par compilation. L’idéal serait d’avoir une compilation tous les 10 Batch Requests.
SQLServer: SQL Statistics – Re-Compilations/sec Indique le nombre de recompilations (remise-en-cache du plan d’exécution d’une requête) par seconde. Une valeur trop constamment élevée peut être synonyme de mauvaise utilisation du cache par au moins une requête inoptimisée, d’un sous-dimensionnement du cache des procédures/fonctions (OBJ_CACHESTORE) ou des requêtes ad-hoc (SQL_CACHESTORE),… L’idéal serait d’avoir une valeur fréquemment inférieure à 10% de celle de Compilations/sec.

Pour comprendre comment SQL Server gère sa mémoire, vous pouvez aller ici.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s