Desidero cancellare la cache di Microsoft SQL Server sulla mia istanza Amazon Relational Database Service (Amazon RDS) per Microsoft SQL Server. Come posso farlo senza riavviare la mia istanza database?
Breve descrizione
Esistono diversi modi per cancellare la cache di SQL Server, da una cancellazione molto granulare a una completa. È possibile utilizzare i seguenti strumenti per cancellare la cache. Tutti questi strumenti sono disponibili con Database Console Commands (DBCC) per SQL Server:
- DBCC FREEPROCCACHE: cancella la cache rimuovendo l'intera cache del piano. Questo comando può anche rimuovere piani specifici o rimuovere le voci della cache legate a un pool di risorse.
- DBCC FREESYSTEMCACHE: oltre a rimuovere elementi dalla cache del piano, DBCC FREESYSTEMCACHE può cancellare altre cache di memoria.
- DBCC ALTER DATABASE SCOPED CONFIGURATION: questo comando è disponibile a partire da SQL Server 2016.
Risoluzione
Nota: è consigliabile testare accuratamente i seguenti comandi prima di eseguirli nell'ambiente di produzione. I test consentono di identificare i potenziali problemi che potrebbero verificarsi durante l'implementazione.
Identifica le prime cinque cache e la memoria utilizzata
Esegui il seguente comando per identificare le prime cinque cache e la memoria utilizzata:
SELECT TOP(5) name AS [Name],
SUM(pages_kb) AS [SizeKb]
FROM sys.dm_os_memory_cache_counters WITH (NOLOCK)
GROUP BY name
ORDER BY SizeKb DESC
Rimuovi un piano dalla cache (problema relativo all'analisi dei parametri)
Esegui il seguente comando per identificare il piano errato:
SELECT cp.plan_handle, cp.objtype, cp.usecounts,
DB_NAME(st.dbid)
AS [DatabaseName], st.text
FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE st.text LIKE N'%[search string]%' OPTION (RECOMPILE);
Esegui uno dei seguenti comandi per rimuovere il piano errato:
DBCC FREEPROCCACHE (plan_handle);
oppure
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE [plan_handle];
Rimuovi dalla cache i piani preparati e in base alle necessità
Se nella cache sono presenti troppi piani in base alle necessità, esegui il seguente comando per rimuoverli:
DBCC FREESYSTEMCACHE ('SQL Plans')
Cancella la cache del piano per il database corrente
Se stai eseguendo SQL Server 2016 o versione successiva, esegui il seguente comando:
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
oppure
DBCC FREESYSTEMCACHE('DatabaseName')
Se utilizzi una versione di SQL Server precedente a SQL 2016, esegui il seguente comando:
declare @dbid int = (select DB_ID())
DBCC FLUSHPROCINDB (@dbid);
Cancella tutte le cache
DBCC FREESYSTEMCACHE('ALL')
oppure
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
Nota: il comando DBCC DROPCLEANBUFFERS viene utilizzato per cancellare tutte le cache e il pool di buffer. Questo comando non è supportato in Amazon RDS per SQL Server perché richiede l'appartenenza al ruolo fisso del server sysadmin.