Como limpo o cache do buffer, ou outros caches, sem reinicializar minha instância do RDS para SQL Server?

3 minuto de leitura
0

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.