CACHESTORE_SQLCP I piani Sql occupano> 38 GB dopo alcuni giorni.
Stiamo già eseguendo l'opzione "Ottimizza per carichi di lavoro ad hoc" attivata. (Entity Framework e report personalizzati creano molti annunci pubblicitari!)
SQL Server 2016 SE 3.00.2164.0.v1 su AWS RDS con mirroring multi-AZ
Quando 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;
Non sembra chiarirlo:
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
Stavo funzionando con Query Store abilitato, ma l'ho disabilitato per vedere se ciò interferiva con qualcosa, non sembrava aiutare, ma l'ho lasciato fuori.
Ciò che è davvero strano è anche
SELECT COUNT(*) FROM sys.dm_exec_cached_plans
è circa 1-3 (sembra mostrare solo tutte le query attualmente in esecuzione), anche se tutta quella memoria è riservata, anche prima di tentare di cancellare qualsiasi cosa. Cosa mi sto perdendo?
CACHESTORE_SQLCP sta occupando oltre il 60% di tutta la memoria disponibile, il che è un problema perché ci sono attese di memoria che si verificano occasionalmente. Inoltre, nel fine settimana abbiamo dovuto eliminare un DBCC CHECKDB di routine della durata di 4 ore perché memoria insufficiente stava accumulando le attese (è stata completata all'istante senza errori con PHYSICAL_ONLY attivo).
C'è un modo per recuperare questo ricordo (oltre ai riavvii notturni !?)?
Aggiornamento da commenti / risposte
Quando corro
SELECT * FROM sys.fn_my_permissions(NULL,NULL)
ottengo
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
Che include l' ALTER SERVER STATE
autorizzazione richiesta .
L'output di DBCC FREEPROCCACHE
è
Esecuzione DBCC completata. Se DBCC ha stampato messaggi di errore, contattare l'amministratore di sistema.
Qual è il messaggio standard. Altre funzioni DBCC che RDS non supporta forniscono messaggi di errore sulle autorizzazioni.
(Il giorno dopo e dopo averlo nuovamente eseguito, i piani SQL sono ancora 38.321.280 kb)
Aggiornamento da commenti / risposte
SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools
uscite:
pool_id name cache_memory_kb compile_memory_kb
1 internal 38368408 1168080
DBCC FREEPROCCACHE ('internal')
non fa nulla di diverso
Aggiornare
Registro errori SQL registra ogni volta quanto segue:
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.
Aggiornare
È disponibile un aggiornamento della versione del motore su RDS da 13.00.2164.0.v1 a 13.00.4422.0.v1. Sebbene sia impostato per l'aggiornamento automatico della versione minore, non sembra che ci tenga aggiornati all'ultimo. Si riavvierà e lo installerà questo fine settimana per vedere se aiuta.