As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Limite a memória máxima do servidor para evitar pressão na memória
Para fins de desempenho, o SQL Server não libera a memória que já tenha alocada. Quando o SQL Server é iniciado, ele usa lentamente a memória especificada na opção min_server_memory e continua a crescer até atingir o valor especificado na opção max_server_memory. (Para obter mais informações sobre essas configurações, consulte as Opções de configuração da memória do servidor
A memória do SQL Server tem dois componentes: o buffer pool e o non-buffer pool (também chamado de memória a sair ou MTL). O valor da opção max_server_memory determina o tamanho do buffer pool do SQL Server, que consiste em cache de buffer, cache de procedimento, cache de planos, estruturas de buff e outros caches.
A partir do SQL Server 2012, min_server_memory e max_server_memory respondem por todas as alocações de memória para todos os caches, incluindo SQLGENERAL
, SQLBUFFERPOOL
, SQLQUERYCOMPILE
, SQLQUERYPLAN
, SQLQUERYEXEC
, SQLOPTIMIZER
e SQLCLR
. Para obter uma lista completa dos gerenciadores de memória no max_server_memory, consulte sys.dm_os_memory_clerks
Para verificar o valor atual da max_server_memory, use o comando:
$ sp_configure 'max_server_memory'
Recomendamos que você limite a max_server_memory a um valor que não cause pressão na memória em todo o sistema. Não há uma fórmula universal que se aplique a todos os ambientes, mas fornecemos algumas diretrizes nesta seção. max_server_memory é uma opção dinâmica e, portanto, pode ser alterada no tempo de execução.
Como ponto de partida, você pode determinar a max_server_memory da seguinte forma:
max_server_memory =
total_RAM
– (memory_for_the_OS
+MTL
)
onde:
-
A memória do sistema operacional é de 1 a 4 GB.
-
A MTL (memória para sair) inclui o tamanho da pilha, que é de 2 MB em máquinas de 64 bits por thread de trabalho e pode ser calculada da seguinte forma:
MTL = stack_size * max_worker_threads
Você também pode usar:
max_server_memory =
total_RAM
– (1 GB for the OS +memory_basis_amount_of_RAM_on_the_server
)
onde a quantidade básica de memória RAM é determinada da seguinte forma:
-
Se a RAM no servidor estiver entre 4 GB e 16 GB, deixe 1 GB a cada 4 GB de RAM. Por exemplo, para um servidor com 16 GB, deixe 4 GB.
-
Se a RAM no servidor for superior a 16 GB, deixe 1 GB a cada 4 GB de RAM até 16 GB, e 1 GB por 8 GB de RAM acima de 16 GB.
Por exemplo, se um servidor tiver 256 GB de RAM, o cálculo será:
-
1 GB para o sistema operacional
-
Até 16 GB de RAM: 16/4 = 4 GB
-
RAM restante acima de 16 GB: (256-16)/8 = 30
-
Total de RAM a ser deixado: 1 + 4 + 30 = 35 GB
-
max_server_memory: 256 - 35 = 221 GB
Após a configuração inicial, monitore a memória que você pode liberar durante um período normal de workload para determinar se você precisa aumentar ou diminuir a memória alocada para o SQL Server.
nota
O Windows sinaliza a notificação de poucos recursos de memória aos 96 MB, então você quer um buffer, mas pode definir que os Mbytes disponíveis estejam acima de 1 GB em servidores maiores com 256 GB ou mais de RAM.
Para obter informações adicionais, consulte o Guia de Arquitetura de Gerenciamento de Memória