CACHESTORE_SQLCP Sql Plans prend> 38 Go après quelques jours.
Nous utilisons déjà l'option "Optimiser pour les charges de travail ad hoc". (Entity Framework et les rapports personnalisés créent de nombreux hocs publicitaires!)
SQL Server 2016 SE 3.00.2164.0.v1 sur AWS RDS avec mise en miroir multi-AZ
Quand je cours:
DBCC FREESYSTEMCACHE('SQL Plans');
ou
DBCC FREEPROCCACHE
ou
DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
ou
DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
Cela ne semble pas le clarifier:
SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb desc
type name pages_kb
CACHESTORE_SQLCP SQL Plans 38321048
J'exécutais avec Query Store activé, mais je l'ai désactivé pour voir si cela interférait avec quoi que ce soit, cela ne semblait pas aider, mais je l'ai laissé de côté.
Ce qui est vraiment bizarre aussi
SELECT COUNT(*) FROM sys.dm_exec_cached_plans
est 1-3 ou plus (il semble ne montrer que les requêtes en cours d'exécution), même si toute cette mémoire est réservée, avant même que j'essaie d'effacer quoi que ce soit. Qu'est-ce que je rate?
CACHESTORE_SQLCP occupe plus de 60% de toute la mémoire disponible, ce qui est préoccupant car des attentes de mémoire se produisent occasionnellement. De plus, nous avons dû tuer un DBCC CHECKDB de routine pendant le week-end qui durait 4 heures car la mémoire insuffisante empilait les attentes (il s'est terminé instantanément sans aucune erreur avec PHYSICAL_ONLY activé).
Existe-t-il un moyen de récupérer cette mémoire (autre que les redémarrages nocturnes!?)?
Mise à jour à partir des commentaires / réponses
Quand je cours
SELECT * FROM sys.fn_my_permissions(NULL,NULL)
Je reçois
entity_name subentity_name permission_name
server CONNECT SQL
server CREATE ANY DATABASE
server ALTER ANY LOGIN
server ALTER ANY LINKED SERVER
server ALTER ANY CONNECTION
server ALTER TRACE
server VIEW ANY DATABASE
server VIEW ANY DEFINITION
server VIEW SERVER STATE
server ALTER SERVER STATE
server CREATE SERVER ROLE
server ALTER ANY SERVER ROLE
Qui comprend l' ALTER SERVER STATE
autorisation requise .
La sortie de DBCC FREEPROCCACHE
est
L'exécution de DBCC est terminée. Si DBCC a imprimé des messages d'erreur, contactez votre administrateur système.
Quel est le message standard. D'autres fonctions DBCC que RDS ne prend pas en charge donnent des messages d'erreur sur les autorisations.
(Un jour plus tard et après avoir exécuté à nouveau, SQL Plans est toujours de 38 321 280 kb)
Mise à jour à partir des commentaires / réponses
SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools
les sorties:
pool_id name cache_memory_kb compile_memory_kb
1 internal 38368408 1168080
DBCC FREEPROCCACHE ('internal')
ne fait rien différemment
Mise à jour
Le journal des erreurs SQL enregistre les éléments suivants à chaque fois:
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
Mise à jour
Une mise à niveau de la version du moteur sur RDS de 13.00.2164.0.v1 à 13.00.4422.0.v1 est disponible. Bien qu'il soit configuré pour une mise à niveau automatique de la version mineure, il ne semble pas nous tenir au courant. Va redémarrer et installer ce week-end pour voir si cela aide.