none
SQL Server 2016 SP2 : problème de taille de cache RRS feed

  • Question

  • Bonjour

    Je viens de migrer une instance SQL Server 2008 vers 2016 SP2. Les bases sont dans un groupe de disponibilité synchrone.

    La mémoire alloué à SQL Server : 480Go pour un serveur possédant : 507Go.

    Pourtant nous avons des symptômes de contention mémoire :

    > Nombre de plan d'exécution faible (nombre de plan entre : 10 et 210, pour un volume de 3Mo à 21Mo), pourtant nous avons eut un nombre important de plan, il y a quelques jours la taille du cache : CACHESTORE_SQLCP : 4.3Go, au profit de MEMORYCLERK_SQLQERESERVATIONS passant de 1,3Go à 95Go. De plus, 1h après le cache MEMORYCLERK_SQLQERESERVATIONS est retombé à 800Mo). La mémoire récupéré est réalloué en partie à MEMORYCLERCK_SQLBUFFERPOOL. 

    > les DMV suivantes sont quasiment vide : 

    • sys.dm_exec_trigger_stats (5lignes)
    • sys.dm_exec_procedure_stats (1lignes)
    • sys.dm_exec_query_stats (0lignes)

    Nous n'avons aucune action de DBCC FREEPROCACHE, aucune base en auto_close, pas de bascule de groupe de disponibilité

    Si vous avez des pistes je suis preneur.

    lundi 4 juin 2018 14:59

Toutes les réponses

  • Salut Greg

    Pas de resource_semaphore ?

    Vu que tu es en enterprise, essaie de changer les settings du ResGov pour par exemple limiter à 10% la mémoire au lieu de 25%.

    Autre point, bcp de colonnes en VARCHAR ou NVARCHAR dans la/les tables en question ?

    Christophe


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    mardi 12 juin 2018 19:04
  • Non aucun ressource_semaphore au niveau session ou dans les statistiques globales. 

    Après analyse plus poussé via la DMV : sys.dm_os_memory_cache_clock_hands 

    Type :CACHESTORE_PHDR / Round count : 49708 (Avg : 5,96)  / Removed_ all_rounds_ count : 1521293 (Avg by min.: 182,52)

    Type : CACHESTORE_SQLCP / Round count : 49708 (Avg : 5,96) / Removed_ all_rounds_ count : 1521293 (Avg by min.: 149,99)

    Type : CACHESTORE_OBJCP / Round count : 49708 (Avg : 5,96) / Removed_ all_rounds_ count : 1521293 (Avg by min.: 23.98)

    Pas de pressions mémoire remontée constamment, dans la DMV : sys.dm_os_ring_buffers (avec ring_buffer_type = 'RING_BUFFER_RESOURCE_MONITOR'). La dernière pression mémoire apparaît plusieurs jours avant. 

    Mon analyse est : tant qu'aucun gros traitement ne passe, le cache plan grossit mais lors du 1er gros traitement s'allouant beaucoup de mémoire au travers des caches : 

    • SQLServer:Memory Manager\Granted Workspace Memory (KB)
    • SQLServer:Memory Manager\Stolen Server Memory (KB) 

    La taille du plan cache n'arrive plus à grossir.

    Sur une semaine la taille du cache de plan d'exécution (SQLServer:Memory Manager\SQL Cache Memory (KB)") n'a pas dépassé 10Ko, hors avec le compteurs : "SQLServer :Plan cache\Cache Pages (_Total)" à comme valeur moyenne : 2 847 soit : 182 776Ko et une valeur maximum à 67 425 soit : 539 400Ko, J'imagine que cette différence est que les plans d'exécutions sont stockés "temporairement" dans le cache stolen.

    mercredi 13 juin 2018 08:32
  • Bon, ben je verrais demain ...

    Christophe


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    dimanche 15 juillet 2018 14:27