Mémoire SQL Server
Il s'agit de la mémoire SQL Server. Lorsque le serveur manque de mémoire, nous vous recommandons d'ajouter de la mémoire supplémentaire au matériel pour résoudre les problèmes d'utilisation du processeur.
Mais avant de procéder à la mise à niveau de la mémoire, dans le cadre du dépannage, comment vérifier / calculer la mémoire SQL actuellement consommée sur l'instance.
Par exemple:
NOM DU SERVEUR: XXXXXXXXXXXXX
Mémoire physique installée (RAM): 64,0 Go
Mémoire SQL Server actuellement allouée: 58982 Mo -> 58,982 Go
Dans ce cas, nous n'avons qu'une seule instance (MSSQLSERVER) sur le serveur et 80% de mémoire a été allouée à l'instance selon la norme. Et 20% sont alloués à Application & OS.
Lorsque nous vérifions sur le moniteur de ressources, il apparaîtra rempli à 80% car nous avons défini la mémoire SQL Server sur cela.
Mais cela ne signifie pas que 80% de SQL est complètement utilisé, car SQL conservera de l'espace dans la mémoire tampon du backend. Lorsque j'ai surfé, j'ai obtenu la formule ci-dessous pour calculer la mémoire SQL consommée sur l'instance, mais ces paramètres ont été supprimés depuis longtemps sur l'outil de surveillance des performances.
Existe-t-il un moyen de vérifier, actuellement, combien le SQL a utilisé sur 80% (OR) sur quelles métriques nous pouvons procéder à la mise à niveau de la mémoire.
FORMULE POUR CALCULER LA MÉMOIRE SQL: (Les paramètres ci-dessous ont été supprimés de l'Analyseur de performances)
*Database Usage(GB) = (Totalpages-Freepages-Stolenpages)8/1024=MB/1024=GB
Réponses
comment vérifier / calculer la mémoire SQL actuellement consommée sur l'instance.
C'est assez simple à faire. Vous avez DMV sys.dm_os_process_memory qui vous donnera les informations. Cela vous donnera physical memory usedettotal memory used (RAM+Page file)
select (physical_memory_in_use_kb/1024) as Phy_Mem_used_MB, (virtual_address_space_committed_kb/1024) as Total_mem_Used_MB
from sys.dm_os_process_memory
Mais cela ne signifie pas que 80% de SQL est complètement utilisé, car SQL conservera de l'espace dans la mémoire tampon du backend
Une fois que SQL Server atteint la valeur de mémoire maximale du serveur, il conservera cette mémoire à moins qu'une notification de mémoire insuffisante ne lui demande de libérer de la mémoire. Alors oui, il se peut qu'il ne l'utilise pas tout, mais il le tiendra quand même. C'est ce qu'on appelle la mise en cache car cela permet d'éviter les erreurs de page matérielles.
Existe-t-il un moyen de vérifier, actuellement, combien le SQL a utilisé sur 80% (OR) sur quelles métriques nous pouvons procéder à la mise à niveau de la mémoire.
Comme je l'ai dit une fois utilisé, il affichera toute la mémoire utilisée même s'il n'a pas besoin de ces pages dans le traitement des requêtes. Quand une nouvelle demande arrive, ces pages seront déplacées pour créer de l'espace pour de nouvelles pages.
Comment définissez-vous «utilisé»? Une page qui a été lue dans le cache il y a une seconde, serait-elle comptée comme utilisée? Il y'a une minute? Une heure? Une semaine?
Le fait est qu'il n'y a pas de choses telles que «utilisées». Le serveur SQL garde les pages (et autres) en mémoire. Lorsqu'il y a une pression de mémoire (interne ou externe), un mécanisme traditionnel de vieillissement du cache (essentiellement) est utilisé pour supprimer les éléments les moins récemment utilisés. Il y a bien plus de détails sur la gestion de la mémoire (cache) bien sûr, mais en principe, elle est gérée comme n'importe quel mécanisme de mise en cache.
Ainsi, des concepts comme «utilisé» ou configuration optimale n'existent tout simplement pas. Vous pouvez voir s'il y a beaucoup de mémoire qui n'est pas du tout utilisée par le serveur SQL, bien sûr. Mais lorsque le serveur SQL a alloué de la mémoire, il y restera à moins qu'il y ait une pression de mémoire. Qui sait, peut-être que quelqu'un aura besoin de cette page la seconde suivante?
Vous pouvez réduire la mémoire maximale du serveur et voir quand vos performances commencent à nuire, par exemple.
Utilisez la MemoryManagerInfoprocédure stockée, qui peut être trouvée ici:
https://github.com/aleksey-vitsko/Database-Administrator-Tools
Il fournit une bonne ventilation de la façon dont SQL Server utilise actuellement la mémoire:
voir l'exemple sur cette image ci-dessous - c'est ce que mon serveur consomme actuellement:
En gros, Total Server Memory= Database Cache Memory+ Free Memory+ Stolen Server Memory(la mémoire du serveur volé comprend le cache de plan, les verrous, etc.)