Este documento explica como rever e otimizar uma instância do Cloud SQL para SQL Server se essa instância for identificada pelo recomendador de instâncias com aprovisionamento insuficiente como tendo um elevado consumo de memória.
Memória do SQL Server
A memória do SQL Server pode ser dividida da seguinte forma:
Caches
Estes são objetos num disco que podem ser recarregados, como páginas de bases de dados e procedimentos armazenados. Como resultado, o SQL Server pode aumentar e diminuir estes objetos com base na utilização da memória. As caches incluem pools de buffers e caches de planos.
Memória fixa
A memória fixa pode aumentar e diminuir. Só diminui quando não está em uso, por exemplo, quando o número de ligações diminui ou o número de consultas em execução diminui. É diferente das caches. Se não houver memória fixa suficiente, o SQL Server pode ficar sem memória. A memória fixa inclui a memória de ligação e as concessões de memória.
Sobrecarga do SQL Server
A sobrecarga do SQL Server inclui threads e pilhas.
OLTP na memória
O OLTP na memória inclui tabelas na memória e grupos de ficheiros na memória.
O consumo de memória pelo SQL Server é controlado através da definição de maximum server memory
e memory.memory.limitmb
. O parâmetro memory.memory.limitmb
é definido automaticamente pelo Cloud SQL.
Para saber mais sobre o memory.memory.limitmb
, consulte a documentação da Microsoft.
Opções de otimização da memória
Para determinar se uma instância precisa de mais otimização da memória, faça o seguinte:
- Verifique o valor da flag
max server memory (mb)
.Recomendamos que deixe o Cloud SQL gerir o valor desta flag. Se tiver de gerir manualmente este valor, use a
max_server_memory (mb)
fórmula de utilização descrita nas práticas recomendadas para ajudar a impedir que o SQL Server consuma toda a memória.Para mais informações, consulte o artigo Flags especiais.
- Monitorize a flag
Page life expectancy
.Page life expectancy
indica a quantidade de tempo, em segundos, que a página mais antiga permanece no conjunto de buffers. Este valor deve ser superior a 300, conforme recomendado pela Microsoft. Se estiver sempre abaixo de 300, pode ser uma indicação de que a instância está a enfrentar uma utilização elevada da memória. Execute a seguinte consulta para monitorizarPage 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 denúncia
Memory Grants Pending
.Memory Grants Pending
especifica o número total de processos à espera de uma concessão de memória do espaço de trabalho. Execute a seguinte consulta para verificarMemory Grants Pending
. Se esta consulta mostrar consistentemente concessões pendentes, significa que a utilização de memória é elevada. Pode reduzi-lo consultando as esperas da base de dados e ajustando qualquer declaração que esteja à espera de 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'
Use o Explorador de métricas para identificar a utilização de memória
Pode rever a utilização de memória da instância com a métrica database/memory/components.usage
no Explorador de métricas.