J'ai rencontré un problème étrange dans lequel SQL Server 2016 Édition Standard 64 bits semble s'être limité à exactement la moitié de la mémoire totale allouée (64 Go sur 128 Go).
La sortie de @@VERSION
est:
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64) 22 déc. 2017 11:25:00 Droits d'auteur (c) Microsoft Corporation Édition Standard (64 bits) sur Windows Server 2012 R2 Datacenter 6.3 ( Build 9600:) (Hypervisor)
La sortie de sys.dm_os_process_memory
est:
Quand je demande sys.dm_os_performance_counters
, je vois que le Target Server Memory (KB)
est à 131072000
et Total Server Memory (KB)
est à peu près la moitié de cela à 65308016
. Dans la plupart des scénarios, je comprendrais qu'il s'agit d'un comportement normal, car SQL Server n'a pas encore déterminé sa nécessité d'allouer de la mémoire supplémentaire pour lui-même.
Cependant, il est bloqué à ~ 64 Go depuis plus de 2 mois. Au cours de cette période, nous avons effectué un nombre considérable d'opérations gourmandes en mémoire sur certaines des bases de données et avons ajouté près de 40 bases de données supplémentaires à l'instance. Nous disposons de 292 bases de données au total, chacune avec des fichiers de données préalloués à 4 Go avec un taux de croissance automatique de 256 Mo et des fichiers journaux de 2 Go avec un taux de croissance automatique de 128 Mo. J'effectue une sauvegarde complète une fois par nuit à minuit et commence les sauvegardes du journal des transactions du lundi au vendredi de 6h à 20h toutes les 15 minutes. Le débit global de ces bases de données est relativement faible, mais je suis sceptique face à un problème, étant donné que SQL Server ne s'est pas glissé vers le marché.Target Server Memory
naturellement via de nouveaux ajouts à la base de données, des exécutions de requêtes normales, ainsi que des pipelines ETL gourmands en mémoire qui ont été exécutés.
L'instance SQL Server elle-même est installée sur un serveur Windows Server 2012R2 virtualisé (VMware) avec 12 UC, 144 Go de mémoire (128 Go sur SQL Server, 16 Go réservés pour Windows) et 4 disques virtuels au total installés sur un vSAN avec 15 000 disques SAS. . Windows se trouve naturellement sur un disque C: de 64 Go avec un fichier d'échange de 32 Go. Les fichiers de données reposent sur un disque D: disque 2 To, les fichiers journaux sur un disque L: disque 2 To et tempdb sur un disque T: disque de 256 Go avec des fichiers de 8 x 16 Go sans croissance automatique.
J'ai vérifié qu'il n'y avait aucune autre instance de SQL Server en cours d'exécution sur le serveur MSSQLSERVER
.
Ce serveur est entièrement dédié à l'instance SQL Server uniquement. Par conséquent, aucune autre application ni aucun autre service ne peut utiliser de la mémoire et risque de consommer de la mémoire.
J'utilise RedGate SQL Monitor pour l'analyse, et voici un historique des 18 derniers jours de Total Server Memory
. Comme vous pouvez le constater, l'utilisation de la mémoire est restée totalement stagnante, à l'exception d'une simple hausse d'environ 300 Mo au début d'avril.
Quelle pourrait en être la cause? Que puis-je examiner de plus près afin de déterminer pourquoi SQL Server ne veut pas utiliser les 64 Go supplémentaires de mémoire allouée?
La sortie de l'exécution sp_Blitz
:
sp_Blitz @OutputType = 'markdown', @CheckServerInfo = 1;
Priorité 50: Performance :
Planificateurs d'UC en mode hors connexion - Certains cœurs d'UC ne sont pas accessibles à SQL Server en raison de problèmes de masquage d'affinité ou de licence.
Nœuds de mémoire hors connexion - En raison de problèmes de masquage d'affinité ou de licence, une partie de la mémoire peut ne pas être disponible.
Priorité 50: Fiabilité :
- Remote DAC Disabled - L’accès à distance à la connexion Dedicated Admin Connection (DAC) n’est pas activé. Le DAC peut faciliter le dépannage à distance lorsque SQL Server ne répond pas.
Priorité 100: Performance :
Plusieurs plans pour une requête - 300 plans sont présents pour une seule requête dans le cache de plan - ce qui signifie que nous avons probablement des problèmes de paramétrage.
Déclencheurs de serveur activés
Le déclencheur de serveur [RG_SQLLighthouse_DDLTrigger] est activé. Assurez-vous de bien comprendre ce que fait cet élément déclencheur: moins il y a de travail, mieux c'est.
Le déclencheur de serveur [SSMSRemoteBlock] est activé. Assurez-vous de bien comprendre ce que fait cet élément déclencheur: moins il y a de travail, mieux c'est.
Priorité 150: Performance :
Requêtes forçant des indications de jointure - 1480 instances de suggestion de jointure ont été enregistrées depuis le redémarrage. Cela signifie que les requêtes dirigent l'optimiseur SQL Server, et si elles ne savent pas ce qu'elles font, cela peut causer plus de tort que de mal. Cela peut également expliquer pourquoi les efforts de réglage DBA ne fonctionnent pas.
Requêtes indiquant des ordres de commande forcés - 2 153 instances de conseil des ordres ont été enregistrées depuis le redémarrage. Cela signifie que les requêtes dirigent l'optimiseur SQL Server, et si elles ne savent pas ce qu'elles font, cela peut causer plus de tort que de mal. Cela peut également expliquer pourquoi les efforts de réglage DBA ne fonctionnent pas.
Priorité 170: Configuration du fichier :
Base de données système sur lecteur C
master - La base de données master contient un fichier sur le lecteur C. Le fait de placer les bases de données système sur le lecteur C présente le risque de planter le serveur s’il manque d’espace.
model - La base de données model contient un fichier sur le lecteur C. Le fait de placer les bases de données système sur le lecteur C présente le risque de planter le serveur s’il manque d’espace.
msdb - La base de données msdb contient un fichier sur le lecteur C. Le fait de placer les bases de données système sur le lecteur C présente le risque de planter le serveur s’il manque d’espace.
Priorité 200: Information :
Travaux d'agent démarrant simultanément - Plusieurs travaux d'agent SQL Server sont configurés pour démarrer simultanément. Pour des listes de programme détaillées, voir la requête dans l'URL.
Tables du maître de la base de données principale - La table CommandLog de la base de données principale a été créée par les utilisateurs le 30 juil. 2017 17h22. Les tables de la base de données master peuvent ne pas être restaurées en cas de sinistre.
TraceFlag On
L'indicateur de trace 1118 est activé globalement.
L'indicateur de trace 1222 est activé globalement.
L'indicateur de trace 2371 est activé globalement.
Priorité 200: Configuration du serveur autre que celle par défaut :
Agent XPs - Cette option sp_configure a été modifiée. Sa valeur par défaut est 0 et il a été défini sur 1.
backup checksum default - Cette option sp_configure a été modifiée. Sa valeur par défaut est 0 et il a été défini sur 1.
backup compression default - Cette option sp_configure a été modifiée. Sa valeur par défaut est 0 et il a été défini sur 1.
seuil de coût pour le parallélisme - Cette option sp_configure a été modifiée. Sa valeur par défaut est 5 et il a été défini sur 48.
max degree of parallelism - Cette option sp_configure a été modifiée. Sa valeur par défaut est 0 et il a été défini sur 12.
max server memory (MB) - Cette option sp_configure a été modifiée. Sa valeur par défaut est 2147483647 et il a été défini sur 128000.
optimiser pour les charges de travail ad hoc - Cette option sp_configure a été modifiée. Sa valeur par défaut est 0 et il a été défini sur 1.
show advanced options - Cette option sp_configure a été modifiée. Sa valeur par défaut est 0 et il a été défini sur 1.
xp_cmdshell - Cette option sp_configure a été modifiée. Sa valeur par défaut est 0 et il a été défini sur 1.
Priorité 200: Fiabilité :
Procédures stockées étendues en maître
master - La procédure stockée étendue [sqbdata] se trouve dans la base de données master. Le CLR est peut-être utilisé et la base de données master doit maintenant faire partie de votre planification de sauvegarde / restauration.
master - La procédure stockée étendue [sqbdir] se trouve dans la base de données master. Le CLR est peut-être utilisé et la base de données master doit maintenant faire partie de votre planification de sauvegarde / restauration.
master - La procédure stockée étendue [sqbmemory] se trouve dans la base de données master. Le CLR est peut-être utilisé et la base de données master doit maintenant faire partie de votre planification de sauvegarde / restauration.
master - La procédure stockée étendue [sqbstatus] se trouve dans la base de données master. Le CLR est peut-être utilisé et la base de données master doit maintenant faire partie de votre planification de sauvegarde / restauration.
master - La procédure stockée étendue [sqbtest] se trouve dans la base de données master. Le CLR est peut-être utilisé et la base de données master doit maintenant faire partie de votre planification de sauvegarde / restauration.
master - La procédure stockée étendue [sqbtestcancel] se trouve dans la base de données master. Le CLR est peut-être utilisé et la base de données master doit maintenant faire partie de votre planification de sauvegarde / restauration.
master - La procédure stockée étendue [sqbteststatus] se trouve dans la base de données master. Le CLR est peut-être utilisé et la base de données master doit maintenant faire partie de votre planification de sauvegarde / restauration.
master - La procédure stockée étendue [sqbutility] se trouve dans la base de données master. Le CLR est peut-être utilisé et la base de données master doit maintenant faire partie de votre planification de sauvegarde / restauration.
master - La procédure stockée étendue [sqlbackup] se trouve dans la base de données master. Le CLR est peut-être utilisé et la base de données master doit maintenant faire partie de votre planification de sauvegarde / restauration.
Priorité 210: Configuration de la base de données autre que celle par défaut :
Isolement instantané lu validé activé - Ce paramètre de base de données n'est pas le paramètre par défaut.
RedGate
RedGateMonitor
Isolement d'instantané activé - Ce paramètre de base de données n'est pas le paramètre par défaut.
RedGate
RedGateMonitor
Priorité 240: Statistiques d'attente :
- 1 - SOS_SCHEDULER_YIELD - 1770,8 heures d’attente, temps d’attente moyen par heure, 100,0% d’attente du signal, 1419212079 tâches en attente, temps d’attente moyen de 4,5 ms.
Priorité 250: Information :
- SQL Server s'exécute sous un compte de service NT. J'exécute sous le nom Service NT \ MSSQLSERVER. Je souhaite avoir un compte de service Active Directory à la place.
Priorité 250: Informations sur le serveur :
Contenu de la trace par défaut - La trace par défaut contient 36 heures de données entre le 14 avril 2018 23h21 et le 16 avril 2018 11h13. Les fichiers de trace par défaut se trouvent dans: C: \ Program Files \ Microsoft SQL Server \ MSSQL13.MSSQLSERVER \ MSSQL \ Log
Drive C Space - 196816.00MB gratuit sur lecteur C
Drive D Space - 894823.00Mo libre sur le lecteur E
Drive L Space - 1361367.00Mo libre sur le lecteur F
Drive T Space - 114441.00Mo libre sur le lecteur G
Matériel - Processeurs logiques: 12. Mémoire physique: 144 Go.
Matériel - NUMA Config
Node: 0 Etat: ONLINE Ordonnanceurs en ligne: 4 Ordonnanceurs hors ligne: 2 Groupe de processeurs: 0 Noeud de mémoire: 0 Mémoire VAS réservée GB: 186
Node: 1 State: OFFLINE Planificateurs en ligne: 0 Planificateurs en mode hors connexion: 6 Groupe de processeurs: 0 Noeud de mémoire: 0 Mémoire VAS réservée GB: 186
Initialisation instantanée du fichier activée - Le compte de service dispose de l'autorisation Effectuer des tâches de maintenance en volume.
Plan d'alimentation - Votre serveur dispose de processeurs à 2,60 GHz et est en mode d'alimentation équilibrée - Euh ... vous voulez que vos processeurs fonctionnent à plein régime, n'est-ce pas?
Dernier redémarrage du serveur - 9 mars 2018 07:27
Nom du serveur - [expurgé]
Prestations de service
Service: SQL Server (MSSQLSERVER) s'exécute sous le compte de service NT Service \ MSSQLSERVER. Dernière heure de démarrage: 9 mars 2018 07:27. Type de démarrage: Automatique, en cours d'exécution.
Service: l'agent SQL Server (MSSQLSERVER) s'exécute sous le compte de service LocalSystem. Dernière heure de démarrage: non indiquée .. Type de démarrage: Automatique, en cours d'exécution.
Dernier redémarrage de SQL Server - 9 mars 2018 06h27
Service SQL Server - Version: 13.0.4466.4. Niveau de patch: SP1. Mise à jour cumulative: CU7. Edition: Standard Edition (64 bits). Groupes de disponibilité activés: 0. Statut du gestionnaire de groupes de disponibilité: 2
Serveur virtuel - Type: (HYPERVISOR)
Windows Version - Vous utilisez une version assez moderne de Windows: Server 2012R2, version 6.3
Priorité 254: Rundate :
- Journal de bord du capitaine: stardate quelque chose et quelque chose ...
select @@version
et select * from sys.dm_os_process_memory
dans la question. Avez-vous essayé de regarder dans la valeur Total Server Memory (KB)
de Perfmon Counter?
Total Server Memory (KB)
a été fourni par sys.dm_os_performance_counters
.