Este documento explica como revisar e otimizar uma instância do Cloud SQL para SQL Server se ela for identificada pelo recomendador de instância subprovisionada como tendo alto consumo de memória.
Memória do SQL Server
A memória do SQL Server pode ser dividida no seguinte:
Caches
São objetos em um disco que podem ser recarregados, como páginas de banco de dados e procedimentos armazenados. Como resultado, o SQL Server pode aumentar ou diminuir esses objetos com base na utilização da memória. Caches incluem pools de buffers e caches de plano.
Memória fixa
A memória fixa pode aumentar e diminuir. Ela só diminui 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. É diferente de caches. Se não houver memória fixa suficiente, o SQL Server pode ficar sem memória. A memória fixa inclui memória de conexão e 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 arquivos na memória.
O consumo de memória pelo SQL Server é controlado pela configuração 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 .
Você deve definir o limite max server memory
para um valor adequado. No SQL Server, se o max server memory
não for definido, as páginas do banco de dados podem consumir a maior parte da memória, chegando a até 100%. Isso às vezes pode ser enganoso.
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:
Defina o valor de
max server memory
. A recomendação geral é definir amax server memory
em cerca de 80% para evitar que o SQL Server consuma toda a memória disponível. Para instâncias com grandes quantidades de memória, 80% pode ser um valor muito baixo e pode levar ao desperdício de memória.Monitorar
Page life expectancy
Page life expectancy
indica o tempo, em segundos, que a página mais antiga permanece no buffer pool. Esse valor deve ser superior a 300, conforme recomendado pela Microsoft. Se ficar consistentemente abaixo de 300, pode ser um indício de que a instância está enfrentando alta utilização de memória. Execute a seguinte consulta 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
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 consistentemente concessões pendentes, isso indica alta utilização de memória. Você pode reduzir esse número consultando as esperas do banco de dados e ajustando qualquer instrução que esteja aguardando 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'