Né DBCC FREEPROCCACHE né DBCC FREESYSTEMCACHE ('Piani SQL') fanno nulla per liberare la memoria CACHESTORE_SQLCP


13

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

Grafico del consumo di memoria Grafico del consumo di memoria

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 STATEautorizzazione 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.

Risposte:


5

Ho eseguito l'aggiornamento a 13.00.4422.0.v1 (SQL Server 2016 SP1) e riavviato.

Finora, sono in grado di cancellare la memoria del piano SQL usando il DBCC FREESYSTEMCACHE('SQL Plans');comando!

Il tempo dirà per vedere se utilizza la memoria un po 'più saggia ora, ma almeno ora ho un modo per resettarlo se diventa di nuovo troppo gonfio.


1
Tuttavia suggerirei di non cancellare frequentemente SQLCP e andare avanti e scoprire la causa principale
Shanky

Entity Framework e una funzionalità di reporting personalizzata che consente a quasi tutti gli utenti di eseguire quasi tutte le query, in un certo senso, crea molte query ad hoc. Se ci fosse un modo per eliminare quelli o addirittura dire loro di non essere mai memorizzati nella cache, potrebbe essere d'aiuto. Finora, la cache del piano è rimasta a circa 5,8 GB dall'installazione di SP1.
Nome del suono professionale

Hai attivato Optimize for Ad-Hoc Workload. Rispetto al 38G se ora ci vogliono 5 GI crediamo che questo non sarebbe qualcosa di cui preoccuparsi considerando il carico di lavoro
Shanky

Sì, è impostato Ottimizza per carico di lavoro ad hoc (come indicato sopra nella domanda)
Nome del suono professionale

1
Abbiamo riscontrato questo stesso problema su 13.0.4001.0. Ho dovuto rimbalzare SQL per cancellare la cache proc. Non veniva compilato nulla, ma la cache di proc era "bloccata" e non si cancellava, qualunque cosa avessimo provato. Non l'ho più visto accadere da quando è stato rimbalzato SQL, ma mi chiedo se c'è qualche tipo di perdita di memoria o bug.
GoodwinSQL,

3

Requisiti

Per poter funzionare DBCC FREEPROCCACHEo il DBCC FREESYSTEMCACHEtuo account richiede l'autorizzazione ALTER SERVER STATE.

Riferimenti

Governatore delle risorse

AWS RDS consente le impostazioni del regolatore delle risorse? Se sì, la sintassi è:

DBCC FREEPROCCACHE ('<pool_name>'). 

Scopri se hai piscine con:

SELECT * FROM sys.dm_resource_governor_resource_pools

Verifica delle autorizzazioni

Eseguire il comando seguente per determinare se si dispone di queste autorizzazioni:

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

Limitazioni / Restrizioni

Esistono alcune restrizioni sulle autorizzazioni concesse agli amministratori delle istanze RDS AWS come documentato nell'articolo Microsoft SQL Server su Amazon RDS nel capitolo Sicurezza di Microsoft SQL Server

Ecco una panoramica:

I seguenti ruoli a livello di server non sono attualmente disponibili in Amazon RDS:

  • bulkadmin
  • dbcreator
  • diskadmin
  • securityadmin
  • ServerAdmin
  • sysadmin

Le seguenti autorizzazioni a livello di server non sono disponibili nelle istanze di SQL Server DB:

  • AMMINISTRATORE DI OPERAZIONI IN MATERIA
  • ALTER QUALSIASI CREDENZIALE
  • MODIFICARE QUALUNQUE NOTIFICA DI EVENTI
  • MODIFICARE QUALSIASI SESSIONE DI EVENTO
  • ALTER QUALSIASI AUDIT SERVER
  • ALTER RESOURCES
  • ALTER SETTINGS (È possibile utilizzare le API del gruppo di parametri DB per modificare i parametri. Per ulteriori informazioni, consultare Utilizzo dei gruppi di parametri DB.
  • SERVER AUTENTICO
  • control_server
  • CREA NOTIFICA EVENTO DDL
  • CREA ENDPOINT
  • CREA NOTIFICA EVENTO TRACCIA
  • ASSEMBLEA DI ACCESSO ESTERNO
  • SPEGNIMENTO (È possibile utilizzare invece l'opzione di riavvio RDS)
  • MONTAGGIO NON SICURO
  • ALTER ANY DISPONIBILITÀ GROUP (solo SQL Server 2012)
  • CREA QUALSIASI GRUPPO DISPONIBILITÀ (solo SQL Server 2012)

Queste restrizioni / limitazioni potrebbero essere cambiate da quando il documento è stato pubblicato.

Altre risorse

Brent Ozar ha scritto un articolo " SQL Server RDS " in cui ha notato che ...

Molti comandi DBCC non funzionano affatto DBCC DBINFOe DBCC LOGINFOsono stati esplicitamente negati. Tuttavia, ho scoperto che avrei potuto correre tutte DBCC FREEPROCCACHEle volte che volevo.

Tieni presente che queste limitazioni possono cambiare nel tempo - nuove funzionalità vengono aggiunte su base regolare.

Supporto Amazon

Se il tuo account dispone delle autorizzazioni necessarie e non riesci a liberare la cache, potresti voler aprire un ticket di supporto con Amazon.


Domanda aggiornata con maggiori dettagli basati su questo. Grazie per la tua risposta ponderata e dettagliata. Riscontro problemi di autorizzazioni con altre cose in RDS, ma questo dovrebbe essere supportato. Contatterò il supporto Amazon più tardi oggi se non ottengo molta attività qui. Sembrava più un problema di SQL Server che un problema RDS e non so quanto il loro supporto sia ben informato o specifico rispetto a questa bella comunità!
Nome del suono professionale

1
Apprezzo il tuo feedback. Immagino che potresti voler aprire un ticket con Amazon o Microsoft visto che nulla sembra funzionare. E poi di nuovo, potrebbe essere un bug o una funzionalità (limitazione dovuta a ....).
John aka hot2use,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.