Eu tenho 200 GB de banco de dados no meu servidor de produção.
Requisitos do sistema: Amazon EC2 r4.2xlarge (8 vCPU, 61 GB de memória)
Eu verifico, planejo contar com consulta:
SELECT objtype AS [CacheType]
, count_big(*) AS [Total Plans]
, sum(cast(size_in_bytes as decimal(18,2)))/1024/1024 AS [Total MBs]
, avg(usecounts) AS [Avg Use Count]
, sum(cast((CASE WHEN usecounts = 1 THEN size_in_bytes ELSE 0 END) as decimal(18,2)))/1024/1024 AS [Total MBs - USE Count 1]
, sum(CASE WHEN usecounts = 1 THEN 1 ELSE 0 END) AS [Total Plans - USE Count 1]
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY [Total MBs - USE Count 1] DESC
A contagem de planos está aumentando ao longo do tempo, vi um total de 3 mil planos. 10-15 minutos depois, verifico a contagem do plano.
Total da contagem do plano 200-600
Resultado:
Por que isso está acontecendo?
Eu não estou correndo DBCC FREEPROCCACHE
.
O fechamento automático é falso. Fechei o paralisismo e a replicação por uma pressão de memória. PLE 7600, mas os valores também caem de tempos em tempos.
Não verifiquei quanto espaço era usado pelos planos quando eram 3K. Mas, eu verifico agora vi plano de 900-1K e 250-300 mb. Em seguida, é lavado.
Normalmente, o tempo de espera da consulta é inferior a 1 segundo. Média de 200ms. 3 principais tipos de espera CXPACKET
, CLR_AUTO_EVENT
, SOS_SCHEDULER_YIELD
.
Eu sei sobre os limites de pressão do cache (os planos podem ser despejados devido à pressão da memória), mas é normal fazer isso com frequência? Lavado por 2-3 minutos.
Microsoft SQL Server 2016 (SP1).
A memória máxima do SQL Server foi definida como padrão. Mudei a memória máxima para 90% (56240MB, memória total 61GB).
Acho que o problema está resolvido.