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 em:
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 filegroups 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
max server memory (mb)flag.Recomendamos que você deixe o Cloud SQL gerenciar o valor dessa flag. Se você precisar gerenciar esse valor manualmente, use a
max_server_memory (mb)fórmula de uso descrita em Práticas recomendadas para ajudar a 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 expectancyindica 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 ele ficar abaixo de 300 de forma consistente, isso poderá indicar que a instância está enfrentando 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 Pendingespecifica 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 concessões pendentes de forma consistente, isso indica alta utilização de memória. É possível reduzir a consulta consultando as esperas do banco de dados e o ajuste de qualquer instrução que está 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'
Usar o Metrics Explorer para identificar o uso da memória
Você pode analisar o uso da memória da instância com a
database/memory/components.usage métrica no
Metrics Explorer.