CACHESTORE_SQLCP Planes SQL ocupa> 38 GB después de unos días.
Ya estamos ejecutando la opción "optimizar para cargas de trabajo ad hoc" en. (¡Entity Framework e informes personalizados crean muchos ad hoc!)
SQL Server 2016 SE 3.00.2164.0.v1 en AWS RDS con reflejo multi-AZ
Cuando corro:
DBCC FREESYSTEMCACHE('SQL Plans');
o
DBCC FREEPROCCACHE
o
DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
o
DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
No parece aclararlo:
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
Estaba ejecutando con Query Store habilitado, pero lo deshabilité para ver si eso estaba interfiriendo con algo, no parecía ayudar, pero lo dejé.
Lo que es realmente extraño también es
SELECT COUNT(*) FROM sys.dm_exec_cached_plans
es 1-3 más o menos (parece que solo muestra las consultas que se ejecutan actualmente), a pesar de que toda esa memoria está reservada, incluso antes de intentar borrar algo. ¿Qué me estoy perdiendo?
CACHESTORE_SQLCP está ocupando más del 60% de toda la memoria disponible, lo cual es preocupante porque ocasionalmente hay esperas de memoria. Además, tuvimos que matar un DBCC CHECKDB de rutina durante el fin de semana que duró 4 horas porque la memoria insuficiente estaba acumulando esperas (se completó instantáneamente sin errores con PHYSICAL_ONLY activado).
¿Hay alguna forma de recuperar esta memoria (aparte de reinicios nocturnos?)
Actualización de comentarios / respuestas
Cuando corro
SELECT * FROM sys.fn_my_permissions(NULL,NULL)
yo obtengo
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
Que incluye el ALTER SERVER STATE
permiso requerido .
La salida de DBCC FREEPROCCACHE
es
Ejecución DBCC completada. Si DBCC imprimió mensajes de error, comuníquese con el administrador del sistema.
Cuál es el mensaje estándar. Otras funciones DBCC que RDS no admite dan mensajes de error sobre permisos.
(Un día después y después de ejecutarlo nuevamente, los Planes SQL siguen siendo 38,321,280 kb)
Actualización de comentarios / respuestas
SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools
salidas:
pool_id name cache_memory_kb compile_memory_kb
1 internal 38368408 1168080
DBCC FREEPROCCACHE ('internal')
no hace nada diferente
Actualizar
El registro de errores de SQL registra lo siguiente cada vez:
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.
Actualizar
Hay una actualización de la versión del motor en RDS de 13.00.2164.0.v1 a 13.00.4422.0.v1 disponible. Aunque está configurado para la actualización automática de la versión menor, no parece habernos mantenido actualizados con la última versión. Se reiniciará e instalará este fin de semana para ver si ayuda.