Neste documento, explicamos como analisar e otimizar uma instância do Cloud SQL para SQL Server quando é identificada pelo recomendador de instâncias subprovisionadas como tendo alto consumo de memória.
Memória do SQL Server
A memória do SQL Server pode ser dividida da seguinte forma:
Caches
Esses são objetos em um disco que podem ser recarregados, como páginas de bancos de dados e procedimentos armazenados. Como resultado, o SQL Server pode aumentar e diminuir esses objetos com base na utilização da memória. Os caches incluem pools de buffer e planos de cache.
Memória fixa
A memória fixa pode aumentar e diminuir. Só é reduzida quando não está em uso. Por exemplo, quando o número de conexões cai ou o número de consultas em execução diminui. Ela é diferente dos caches. Se não houver memória fixa suficiente, o SQL Server poderá ficar sem memória. A memória fixa inclui memória de conexão e concessões de memória.
Overhead do SQL Server
O overhead do SQL Server inclui linhas de execução e pilhas.
OLTP na memória
O OLTP na memória inclui tabelas e grupos de arquivos na memória.
O consumo de memória pelo SQL Server é controlado pela configuração de maximum server memory
e memory.memory.limitmb
. O parâmetro memory.memory.limitmb
é definido automaticamente pelo Cloud SQL.
Para saber mais sobre memory.memory.limitmb
, consulte a documentação da Microsoft.
Opções de otimização de memória
Para determinar se uma instância precisa de mais ajuste de memória, faça o seguinte:
- Verifique o valor da flag
max server memory (mb)
.Recomendamos que você deixe o Cloud SQL gerenciar o valor dessa flag. Se você precisar gerenciar esse valor manualmente, use a fórmula de uso de
max_server_memory (mb)
descrita em Práticas recomendadas para evitar que o SQL Server consuma toda a memória.Para mais informações, consulte Flags especiais.
- Monitore a flag
Page life expectancy
.Page life expectancy
indica o tempo, em segundos, que a página mais antiga permanece no pool de buffers. Esse valor precisa ser maior que 300, conforme recomendado pela Microsoft. Se ela ficar abaixo de 300 de modo consistente, isso pode indicar que a instância está enfrentando uma alta utilização de memória. Execute a consulta a seguir para monitorarPage life expectancy
.SELECT [object_name], [counter_name], [cntr_value] FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Manager%' AND [counter_name] = 'Page life expectancy'
- Verifique a flag
Memory Grants Pending
.Memory Grants Pending
especifica o número total de processos aguardando uma concessão de memória do espaço de trabalho. Execute a consulta a seguir para verificarMemory Grants Pending
. Se essa consulta mostrar de forma consistente concessões pendentes, ela indica alta utilização da memória. É possível reduzir a consulta consultando as esperas do banco de dados e o ajuste de qualquer instrução que esteja aguardando na memória.SELECT @@SERVERNAME AS [Server Name], RTRIM([object_name]) AS [Object Name], cntr_value AS [Memory Grants Pending] FROM sys.dm_os_performance_counters WITH(NOLOCK) WHERE [object_name] LIKE N'%Memory Manager%' -- Handles named instances AND counter_name = N'Memory Grants Pending'