Quero limpar o cache do Microsoft SQL Server em minha instância do Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server. Como posso fazer isso sem reiniciar a instância de banco de dados?
Breve descrição
Há várias maneiras de limpar o cache do SQL Server, desde uma limpeza muito granular até a limpeza completa do cache. Você pode usar as ferramentas abaixo para limpar o cache. Todas essas ferramentas estão disponíveis com o Database Console Commands (DBCC) para SQL Server:
- DBCC FREEPROCCACHE: limpa o cache removendo todo o cache do plano. Esse comando também pode remover planos específicos ou entradas de cache vinculadas a um grupo de recursos.
- DBCC FREESYSTEMCACHE: além de remover elementos do cache do plano, o DBCC FREESYSTEMCACHE pode limpar outros caches de memória.
- DBCC ALTER DATABASE SCOPED CONFIGURATION: esse comando está disponível a partir do SQL Server 2016.
Resolução
Observação: é uma prática recomendada testar cuidadosamente os comandos a seguir antes de executá-los em seu ambiente de produção. Os testes ajudam a identificar problemas que possam ocorrer durante a implementação.
Identifique os cinco principais caches e a memória usada
Execute o comando a seguir para identificar os cinco principais caches e a memória usada:
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
Remova um plano do cache (problema de detecção de parâmetros)
Execute o comando a seguir para identificar o plano inválido:
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);
Execute um dos seguintes comandos para remover o plano inválido:
DBCC FREEPROCCACHE (plan_handle);
ou
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE [plan_handle];
Remova planos para uso conforme a necessidade e preparados do cache
Se você tiver planos demais prontos para uso conforme necessário no cache, execute o seguinte comando para removê-los:
DBCC FREESYSTEMCACHE ('SQL Plans')
Limpe o cache do plano do banco de dados atual
Se você estiver executando o SQL Server 2016 ou superior, execute o seguinte comando:
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
ou
DBCC FREESYSTEMCACHE('DatabaseName')
Se você estiver usando uma versão do SQL Server anterior ao SQL 2016, execute o seguinte comando:
declare @dbid int = (select DB_ID())
DBCC FLUSHPROCINDB (@dbid);
Limpe todos os caches
DBCC FREESYSTEMCACHE('ALL')
ou
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
Observação: o comando DBCC DROPCLEANBUFFERS é usado para limpar todos os caches e o grupo de buffers. Esse comando não tem suporte no Amazon RDS para SQL Server porque exige associação com o perfil de servidor fixo de administrador do sistema.