Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
A utilização de memória para o Mecanismo de Banco de Dados do SQL Server é limitada por um par de definições de configuração, min server memory (MB) e max server memory (MB). Com o tempo e em circunstâncias normais, o SQL Server tentará reivindicar memória até o limite definido pela memória máxima do servidor (MB).
Observação
Columnstore indexes: visão geral e In-Memory visão geral OLTP e cenários de uso Os objetos têm seus próprios funcionários de memória, o que facilita o monitoramento do uso do pool de buffers. Para obter mais informações, consulte sys.dm_os_memory_clerks.
Em versões mais antigas do SQL Server, a utilização da memória era praticamente ilimitada, indicando ao SQL Server que toda a memória do sistema estava disponível para uso. É recomendado em todas as versões do SQL Server configurar um limite superior para a utilização da memória do SQL Server configurando a memória máxima do servidor (MB).
- Desde o SQL Server 2019 (15.x), a Instalação do SQL em servidores Windows fornece uma recomendação para a memória máxima do servidor (MB) para uma instância autônoma do SQL Server com base em uma porcentagem de memória do sistema disponível no momento da instalação.
- A qualquer momento, você pode reconfigurar os limites de memória (em megabytes) para um processo do SQL Server usado por uma instância do SQL Server por meio das opções de configuração min server memory (MB) e max server memory (MB).
Observação
Este guia refere-se à instância do SQL Server no Windows. Para obter informações sobre a configuração de memória no Linux, consulte Práticas recomendadas de desempenho e diretrizes de configuração para o SQL Server no Linux e a configuração memory.memorylimitmb.
Recomendações
As configurações padrão e os valores mínimos permitidos para essas opções são:
Opção | Predefinido | Mínimo admissível | Recomendado |
---|---|---|---|
min de memória do servidor (MB) | 0 | 0 | 0 |
max memória do servidor (MB) | 2.147.483.647 megabytes (MB) | 128 MB | 75% de memória disponível do sistema não consumida por outros processos, incluindo outras instâncias. Para obter recomendações mais detalhadas, consulte max server memory. |
Dentro desses limites, o SQL Server pode alterar seus requisitos de memória dinamicamente com base nos recursos disponíveis do sistema. Para obter mais informações, consulte Gerenciamento dinâmico de memória.
- Definir o valor máximo de memória do servidor (MB) muito alto pode fazer com que uma única instância do SQL Server compita por memória com outras instâncias do SQL Server hospedadas no mesmo host.
- No entanto, definir max server memory (MB) muito baixo é uma oportunidade de desempenho perdida e pode causar pressão de memória e problemas de desempenho na instância do SQL Server.
- Definir max server memory (MB) para o valor mínimo pode até mesmo impedir que o SQL Server seja iniciado. Se não for possível iniciar o SQL Server depois de alterar essa opção, inicie-o usando a opção de inicialização e redefina max
-f
server memory (MB) para seu valor anterior. Para obter mais informações, consulte opções de inicialização do Serviço Mecanismo de Banco de Dados. - Não é recomendável definir max server memory (MB) e min server memory (MB) para ser o mesmo valor ou próximo dos mesmos valores.
Observação
A opção max server memory limita apenas o tamanho do buffer pool do SQL Server. A opção max server memory não limita uma área de memória não reservada restante que o SQL Server deixa para alocações de outros componentes, como procedimentos armazenados estendidos, objetos COM, DLLs não compartilhadas e EXEs.
O SQL Server pode usar a memória dinamicamente. No entanto, você pode definir as opções de memória manualmente e restringir a quantidade de memória que o SQL Server pode acessar. Antes de definir a quantidade de memória para o SQL Server, determine a configuração de memória apropriada subtraindo, da memória física total, a memória necessária para o sistema operacional (SO), alocações de memória não controladas pela configuração de memória máxima do servidor (MB) e quaisquer outras instâncias do SQL Server (e outros usos do sistema, se o servidor estiver hospedando outros aplicativos que consomem memória, incluindo outras instâncias do SQL Server). Essa diferença é a quantidade máxima de memória que você pode atribuir à instância atual do SQL Server.
A memória pode ser configurada até o limite de espaço de endereço virtual do processo em todas as edições do SQL Server. Para obter mais informações, consulte Limites de memória para versões do Windows e do Windows Server.
Memória mínima do servidor
Use min server memory (MB) para garantir uma quantidade mínima de memória disponível para o SQL Server Memory Manager.
O SQL Server não alocará imediatamente a quantidade de memória especificada em min server memory (MB) na inicialização. No entanto, depois que o uso de memória atingir esse valor devido à carga do cliente, o SQL Server não poderá liberar memória, a menos que o valor de min server memory (MB) seja reduzido. Por exemplo, quando várias instâncias do SQL Server são instaladas simultaneamente no mesmo servidor, considere definir o parâmetro min server memory (MB) para reservar memória para uma instância.
Definir um valor mínimo de memória do servidor (MB) é essencial em um ambiente virtualizado para garantir que a pressão de memória do host subjacente não tente desalocar memória do pool de buffers em uma máquina virtual (VM) convidada além do necessário para um desempenho aceitável. Idealmente, as instâncias do SQL Server em uma máquina virtual não precisam competir com os processos de desalocação proativa de memória do host virtual.
Não é garantido que o SQL Server aloque a quantidade de memória especificada em min server memory (MB). Se a carga no servidor nunca exigir a alocação da quantidade de memória especificada em min server memory (MB), o SQL Server usará menos memória.
Memória máxima do servidor
Use a memória máxima do servidor (MB) para garantir que o sistema operacional e outros aplicativos não sofram pressão de memória prejudicial proveniente do SQL Server.
- Antes de definir a configuração de memória máxima do servidor (MB), monitore o consumo geral de memória do servidor que hospeda a instância do SQL Server, durante a operação normal, para determinar a disponibilidade e os requisitos de memória. Para uma configuração inicial ou quando não houver oportunidade de coletar o uso da memória de processo do SQL Server ao longo do tempo, use a seguinte abordagem de práticas recomendadas generalizadas para configurar max server memory (MB) para uma única instância:
- Da memória total do sistema operacional, subtraia o equivalente a possíveis alocações de memória de thread do SQL Server que estão fora do controlo de memória máxima do servidor (MB). Esse equivalente é obtido multiplicando o tamanho da pilha1 pelo número de threads de trabalho máximo calculados2.
- Em seguida, subtraia 25% para outras alocações de memória fora do controle de memória máxima do servidor (MB), como buffers de backup, DLLs de procedimento armazenado estendido, objetos criados usando procedimentos de automação (
sp_OA
chamadas) e alocações de provedores de servidor vinculados. Esta é uma aproximação genérica e a quilometragem pode variar. - O que resta deve ser a configuração de memória máxima do servidor (MB) para uma configuração de instância única.
1 Consulte o Guia de Arquitetura de Gestão de Memória para obter informações sobre tamanhos de pilhas de threads por arquitetura.
2 Para obter mais informações sobre os threads de trabalho padrão calculados para um determinado número de CPUs afinizadas no host atual, consulte Configuração do servidor: max worker threads.
Definir opções manualmente
As opções do servidor min server memory (MB) e max server memory (MB) podem ser definidas para abranger um intervalo de valores de memória. Esse método é útil para administradores de sistema ou banco de dados configurarem uma instância do SQL Server com os requisitos de memória de outros aplicativos ou outras instâncias do SQL Server que são executadas no mesmo host.
Utilize o Transact-SQL
As opções min server memory (MB) e max server memory (MB) são opções avançadas. Ao usar o procedimento armazenado do sp_configure
sistema para alterar essas configurações, você pode alterá-las somente quando mostrar opções avançadas estiver definido como 1. Essas configurações entram em vigor imediatamente sem uma reinicialização do servidor. Para obter mais informações, consulte sp_configure.
O exemplo a seguir define a opção max server memory (MB) como 12.288 MB ou 12 GB. Embora sp_configure
especifique o nome da opção como max server memory (MB)
, você pode omitir o (MB)
.
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'max server memory', 12288;
GO
RECONFIGURE;
GO
A consulta a seguir retorna informações sobre os valores configurados atualmente e o valor atualmente em uso. Esta consulta devolve resultados independentemente de a sp_configure
opção 'mostrar opções avançadas' estar ativada.
SELECT [name],
[value],
[value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)'
OR [name] = 'min server memory (MB)';
Utilize SQL Server Management Studio
Use min server memory (MB) e max server memory (MB) para reconfigurar a quantidade de memória (em megabytes) gerenciada pelo SQL Server Memory Manager para uma instância do SQL Server.
No Pesquisador de Objetos, clique com o botão direito do mouse em um servidor e selecione Propriedades.
Selecione a página Memória da janela Propriedades do servidor . Os valores atuais de Memória mínima do servidor e Memória máxima do servidor são exibidos.
Em Opções de memória do servidor, insira os números desejados para Memória mínima do servidor e Memória máxima do servidor. Para obter recomendações, consulte min server memory (MB) e max server memory (MB) neste artigo.
A captura de tela a seguir demonstra todas as três etapas:
Bloquear páginas na memória (LPIM)
As aplicações baseadas no Windows podem utilizar as APIs das Extensões de Janelas de Endereços (AWE) do Windows para atribuir e mapear a memória física para o espaço de endereço do processo. A política LPIM do Windows determina quais contas podem aceder à API para que os dados se mantenham na memória física, impedindo que o sistema transfira os dados para a memória virtual no disco. A memória alocada usando AWE é bloqueada até que o aplicativo explicitamente a libere ou saia. O uso das APIs AWE para gerenciamento de memória no SQL Server de 64 bits também é frequentemente chamado de páginas bloqueadas. Bloquear páginas na memória pode manter a responsividade do servidor durante a paginação da memória para o disco. A opção Bloquear páginas na memória é habilitada em instâncias do SQL Server edição Standard e superior quando a conta com privilégios para execução sqlservr.exe
recebe o direito de usuário do Windows Bloquear páginas na memória (LPIM).
Para desabilitar a opção Bloquear páginas na memória para o SQL Server, remova o direito de usuário Bloquear páginas na memória da conta com privilégios para executar sqlservr.exe
(a conta de inicialização do SQL Server).
O uso do LPIM não afeta o gerenciamento de memória dinâmica do SQL Server, permitindo que ele se expanda ou diminua a pedido de outros funcionários de memória. Ao usar o direito de usuário Bloquear páginas na memória, é altamente recomendável definir um limite superior para a memória máxima do servidor (MB). Para obter mais informações, consulte max server memory (MB).
O LPIM deve ser utilizado quando houver sinais de que o sqlservr
processo está a ser paginado. Nesse caso, o erro 17890 será relatado no log de erros, semelhante ao exemplo abaixo:
A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.
Usar LPIM com uma configuração de memória máxima do servidor (MB) configurada incorretamente que não leva em conta outros consumidores de memória no sistema pode causar instabilidade, dependendo da quantidade de memória exigida por outros processos ou dos requisitos de memória do SQL Server fora do escopo da memória máxima do servidor (MB). Para obter mais informações, consulte max server memory. Se o privilégio Bloquear páginas na memória (LPIM) for concedido (em sistemas de 32 bits ou 64 bits), é altamente recomendável definir max server memory (MB) para um valor específico, em vez de deixar o padrão de 2.147.483.647 megabytes (MB).
Observação
A partir do SQL Server 2012 (11.x), o Sinalizador de Rastreamento 845 não é necessário para que o Standard Edition use páginas bloqueadas.
Ativar Bloquear páginas na memória
Depois de considerar as informações anteriores, para habilitar a opção Bloquear páginas na memória concedendo o privilégio à conta de serviço para a instância do SQL Server, consulte Habilitar a opção Bloquear páginas na memória (Windows).
Para determinar a conta de serviço para a instância do SQL Server, consulte o SQL Server Configuration Manager ou interroga o service_account
de sys.dm_server_services
. Para obter mais informações, consulte sys.dm_server_services.
Ver estado de Bloqueio de páginas na memória
Para determinar se o privilégio Bloquear páginas na memória é concedido à conta de serviço para a instância do SQL Server, use a consulta a seguir. Esta consulta tem suporte no SQL Server 2016 (13.x) SP1 e posterior.
SELECT sql_memory_model_desc FROM sys.dm_os_sys_info;
Os valores de sql_memory_model_desc
a seguir indicam o estado do LPIM:
-
CONVENTIONAL
. O privilégio de bloquear páginas na memória não é concedido. -
LOCK_PAGES
. O privilégio de bloqueio de páginas na memória é concedido. -
LARGE_PAGES
. O privilégio de bloquear páginas na memória é concedido no modo Empresarial com o Sinalizador de Rastreamento 834 habilitado. Esta é uma configuração avançada e não recomendada para a maioria dos ambientes. Para obter mais informações e advertências importantes, consulte Sinalizador de rastreamento 834.
Use os seguintes métodos para determinar se a instância do SQL Server está usando páginas bloqueadas:
A saída da seguinte consulta Transact-SQL indica valores diferentes de zero para
locked_page_allocations_kb
:SELECT osn.node_id, osn.memory_node_id, osn.node_state_desc, omn.locked_page_allocations_kb FROM sys.dm_os_memory_nodes AS omn INNER JOIN sys.dm_os_nodes AS osn ON (omn.memory_node_id = osn.memory_node_id) WHERE osn.node_state_desc <> 'ONLINE DAC';
O log de erros atual do SQL Server relata a mensagem
Using locked pages in the memory manager
durante a inicialização do servidor.A seção Gestor de Memória da saída DBCC MEMORYSTATUS mostra um valor diferente de zero para o item
AWE Allocated
.
Várias instâncias do SQL Server
Quando você está executando várias instâncias do Mecanismo de Banco de Dados, há diferentes abordagens que podem ser usadas para gerenciar a memória:
Use max server memory (MB) em cada instância para controlar o uso de memória, conforme detalhado anteriormente. Estabeleça configurações máximas para cada instância, tomando cuidado para que a franquia total não seja maior do que a memória física total em sua máquina. Talvez você queira dar a cada instância memória proporcional à carga de trabalho esperada ou ao tamanho do banco de dados. Essa abordagem tem a vantagem de que, quando novos processos ou instâncias forem iniciados, a memória livre estará disponível para eles imediatamente. A desvantagem é que, se você não estiver executando todas as instâncias, nenhuma delas poderá utilizar a memória livre restante.
Use min server memory (MB) em cada instância para gerir o uso de memória, conforme detalhado anteriormente. Estabeleça configurações mínimas para cada instância, de modo que a soma desses mínimos seja 1 a 2 GB menor do que a memória física total da sua máquina. Novamente, você pode estabelecer esses mínimos proporcionalmente à carga esperada dessa instância. Essa abordagem tem a vantagem de que, se nem todas as instâncias estiverem sendo executadas ao mesmo tempo, as que estiverem em execução poderão usar a memória livre restante. Essa abordagem também é útil quando há outro processo que consome muita memória no computador, pois garantiria que o SQL Server obtivesse pelo menos uma quantidade razoável de memória. A desvantagem é que, quando uma nova instância (ou qualquer outro processo) é iniciada, pode levar algum tempo para que as instâncias em execução liberem memória, especialmente se precisarem gravar páginas modificadas de volta em seus bancos de dados para fazer isso.
Use max server memory (MB) e min server memory (MB) em cada instância para controlar o uso de memória, observando e ajustando a utilização máxima e a proteção mínima de memória de cada instância dentro de uma ampla gama de níveis potenciais de utilização de memória.
Não faça nada (não recomendado). As primeiras instâncias apresentadas com uma carga de trabalho tendem a alocar toda a memória. Instâncias ociosas, ou instâncias iniciadas posteriormente, podem acabar sendo executadas com apenas uma quantidade mínima de memória disponível. O SQL Server não faz nenhuma tentativa de equilibrar o uso de memória entre instâncias. No entanto, todas as instâncias responderão aos sinais de Notificação de Memória do Windows para ajustar o tamanho do espaço de memória. O Windows não equilibra a memória entre aplicativos com a API de Notificação de Memória. Ele apenas fornece feedback global quanto à disponibilidade de memória no sistema.
Você pode alterar essas configurações sem reiniciar as instâncias, para que possa experimentar facilmente para encontrar as melhores configurações para seu padrão de uso.
Exemplos
Um. Defina a opção de memória máxima do servidor para 4 GB
O exemplo a seguir define a opção max server memory (MB) como 4096 MB ou 4 GB. Embora sp_configure
especifique o nome da opção como max server memory (MB)
, você pode omitir o (MB)
.
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO
Isso produzirá uma instrução semelhante a O novo limite de memória entra em vigor imediatamente após a Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Run the RECONFIGURE statement to install.
execução do RECONFIGURE
. Para obter mais informações, consulte sp_configure.
B. Determinar a alocação de memória atual
A consulta a seguir devolve informações sobre a memória alocada no momento.
SELECT physical_memory_in_use_kb / 1024 AS sql_physical_memory_in_use_MB,
large_page_allocations_kb / 1024 AS sql_large_page_allocations_MB,
locked_page_allocations_kb / 1024 AS sql_locked_page_allocations_MB,
virtual_address_space_reserved_kb / 1024 AS sql_VAS_reserved_MB,
virtual_address_space_committed_kb / 1024 AS sql_VAS_committed_MB,
virtual_address_space_available_kb / 1024 AS sql_VAS_available_MB,
page_fault_count AS sql_page_fault_count,
memory_utilization_percentage AS sql_memory_utilization_percentage,
process_physical_memory_low AS sql_process_physical_memory_low,
process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;
C. Ver o valor de max server memory (MB)
A consulta a seguir retorna informações sobre o valor configurado atualmente e o valor em uso. Esta consulta devolve resultados independentemente de a sp_configure
opção 'mostrar opções avançadas' estar ativada.
SELECT [value], [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)';
Conteúdo relacionado
- Guia de arquitetura de gerenciamento de memória
- Monitore e ajuste para otimizar o desempenho
- RECONFIGURAR (Transact-SQL)
- Opções de configuração do Server
- sp_configure (Transact-SQL)
- opções de inicialização do Serviço do Mecanismo de Banco de Dados
- Limites de memória para versões do Windows e do Windows Server