Je suis un peu curieux, l'une des éditions d'entreprise de SQL 2012 avec 128 Go de RAM de base de données est de 370 Go et augmente, la quantité de mémoire utilisée par les verrous (OBJECTSTORE_LOCK_Manager) commis de mémoire affichant 7466016 Ko. Je peux également confirmer qu'en regardant le compteur de perfselect * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)'
Cependant, lorsque j'exécute une requête
select count(*) from sys.dm_tran_locks
il ne montre que 16 verrous. Alors, qu'est-ce qui utilise plus de 7 Go de verrous. Existe-t-il un moyen de le savoir?
Est-ce à dire si une fois que la mémoire pour les verrous a été allouée, SQL ne l'a pas encore désallouée? Au cours de la dernière heure, je ne vois pas de nombre de verrous supérieur à 500, mais la mémoire de verrouillage reste la même.
La mémoire maximale du serveur est de 106 Go, nous n'utilisons pas de pages de verrouillage en mémoire et je ne vois aucune pression sur la mémoire ni aucune erreur dans le journal des erreurs au cours des 12 dernières heures. Le compteur de Mo disponible affiche plus de 15 Go de mémoire disponible.
Le moniteur d'activité affiche systématiquement 0 tâches en attente, donc pas de blocage.
Considérant que le verrouillage du serveur SQL prend environ 100 octets de mémoire, 7 Go représentent beaucoup de mémoire et essaient de savoir qui l'utilise.
J'exécute un rapport de tableau de bord de serveur sur la transaction la plus élevée par nombre de verrous, il indique "actuellement aucune transaction de verrouillage n'est en cours d'exécution sur le système. Cependant, la mémoire de verrouillage s'affiche toujours comme indiqué ci-dessus. La base de données est la plus occupée pendant la nuit.