Ni DBCC FREEPROCCACHE ni DBCC FREESYSTEMCACHE ('Planes SQL') hacen nada para liberar la memoria CACHESTORE_SQLCP

13

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?)

Gráfico de consumo de memoria Tabla de consumo de memoria

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 STATEpermiso requerido .

La salida de DBCC FREEPROCCACHEes

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.

Nombre de sonido profesional
fuente

Respuestas:

5

Actualicé a 13.00.4422.0.v1 (SQL Server 2016 SP1) y reinicié.

¡Hasta ahora, puedo borrar la memoria del Plan SQL usando el DBCC FREESYSTEMCACHE('SQL Plans');comando!

El tiempo dirá para ver si usa la memoria un poco más sabio ahora, pero al menos ahora tengo una manera de restablecerlo si se vuelve a hinchar demasiado.

Nombre de sonido profesional
fuente
1
Aún así yo sugeriría que no SQLCP frecuencia clara y seguir adelante y encontrar la causa raíz
Shanky
Entity Framework y una función de informes personalizados que permite que casi cualquier usuario ejecute casi cualquier consulta, de alguna manera, crea muchas consultas ad hoc. Si hubiera una manera de purgarlos, o incluso decirles que nunca se almacenen en caché, podría ayudar. Hasta ahora, la caché del plan ha rondado los 5.8 GB desde la instalación del SP1.
Nombre de sonido profesional
¿Has habilitado Optimize for Ad-Hoc Workload? En comparación con 38G si ahora está tomando 5 GI, creo que esto no sería algo de qué preocuparse teniendo en cuenta la carga de trabajo
Shanky
Sí, se ha configurado Optimizar para carga de trabajo ad-hoc (como se dice en la pregunta anterior)
Nombre de sonido profesional
1
Vimos este mismo problema en 13.0.4001.0. Tuve que rebotar SQL para borrar el caché de proceso. No se estaba compilando nada, pero el caché de proceso estaba "atascado" y no se borraba sin importar lo que intentáramos. No lo he vuelto a ver desde el rebote de SQL, pero me pregunto si hay algún tipo de pérdida de memoria o error.
GoodwinSQL
3

Requisitos

Para ejecutarse DBCC FREEPROCCACHEo DBCC FREESYSTEMCACHEsu cuenta requiere el permiso ALTER SERVER STATE.

Referencias

Gobernador de recursos

¿AWS RDS permite la configuración del regulador de recursos? En caso afirmativo, la sintaxis es:

DBCC FREEPROCCACHE ('<pool_name>'). 

Averigüe si tiene piscinas con:

SELECT * FROM sys.dm_resource_governor_resource_pools

Verificación de permisos

Ejecute el siguiente comando para determinar si tiene estos permisos:

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

Limitaciones / Restricciones

Existen algunas restricciones en los permisos otorgados a los administradores de instancias de AWS RDS como se documenta en el artículo Microsoft SQL Server en Amazon RDS en el capítulo Seguridad de Microsoft SQL Server

Aquí un resumen:

Las siguientes funciones de nivel de servidor no están disponibles actualmente en Amazon RDS:

  • bulkadmin
  • dbcreator
  • diskadmin
  • securityadmin
  • serveradmin
  • sysadmin

Los siguientes permisos de nivel de servidor no están disponibles en las instancias de SQL Server DB:

  • ADMINISTRADOR OPERACIONES A GRANEL
  • ALTERAR CUALQUIER CREDENCIAL
  • ALTERAR CUALQUIER NOTIFICACIÓN DE EVENTO
  • ALTERAR CUALQUIER SESIÓN DE EVENTOS
  • ALTERAR CUALQUIER AUDITORÍA DEL SERVIDOR
  • ALTERAR RECURSOS
  • ALTERAR CONFIGURACIÓN (Puede usar las API de grupo de parámetros de base de datos para modificar parámetros. Para obtener más información, consulte Trabajar con grupos de parámetros de base de datos.
  • SERVIDOR AUTENTICADO
  • CONTROL_SERVER
  • CREAR NOTIFICACIÓN DE EVENTO DDL
  • CREAR ENDPOINT
  • CREAR NOTIFICACIÓN DE EVENTOS DE TRAZO
  • MONTAJE DE ACCESO EXTERNO
  • APAGADO (en su lugar, puede usar la opción de reinicio RDS)
  • ASAMBLEA INSEGURA
  • ALTERAR CUALQUIER GRUPO DE DISPONIBILIDAD (solo SQL Server 2012)
  • CREAR CUALQUIER GRUPO DE DISPONIBILIDAD (solo SQL Server 2012)

Estas restricciones / limitaciones pueden haber cambiado desde que se publicó el documento.

Otros recursos

Brent Ozar escribió un artículo " SQL Server RDS " donde señaló que ...

Muchos comandos DBCC no funcionan en absoluto, DBCC DBINFOy DBCC LOGINFOfueron denegados explícitamente. Sin embargo, descubrí que podía correr DBCC FREEPROCCACHEtantas veces como quisiera.

Tenga en cuenta que estas limitaciones pueden cambiar con el tiempo : regularmente se agregan nuevas funciones.

Soporte de Amazon

Si su cuenta tiene los permisos requeridos y no puede liberar caché, puede abrir un ticket de soporte con Amazon.

John aka hot2use
fuente
Pregunta actualizada con más detalles basados ​​en esto. Gracias por su atenta y detallada respuesta. Me encuentro con problemas de permisos con otras cosas en RDS, pero esto debería ser compatible. Me pondré en contacto con el Soporte de Amazon más tarde hoy si no obtengo mucha actividad aquí. ¡Parecía más un problema de SQL Server que un problema de RDS, y no sé cuán informado o específico será su soporte en comparación con esta excelente comunidad!
Nombre de sonido profesional
1
Agradezco tus comentarios. Supongo que es posible que desee abrir un ticket con Amazon o Microsoft ya que nada parece funcionar. Y, de nuevo, podría ser un error o una característica (limitación debido a ...).
John aka hot2use