Opções de configuração do Server MemoryServer Memory Configuration Options

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Use as duas opções de memória de servidor, memória mínima do servidor e memória máxima do servidor, para reconfigurar a quantidade de memória (em megabytes) que é gerenciada pelo Gerenciador de Memória do SQL Server para um processo do SQL Server usado por uma instância do SQL ServerSQL Server.Use the two server memory options, min server memory and max server memory, to reconfigure the amount of memory (in megabytes) that is managed by the SQL Server Memory Manager for a SQL Server process used by an instance of SQL ServerSQL Server.

A configuração padrão de min server memory é 0 e a configuração padrão de max server memory é 2.147.483.647 MB (megabytes).The default setting for min server memory is 0, and the default setting for max server memory is 2,147,483,647 megabytes (MB). Por padrão, o SQL ServerSQL Server pode alterar seus requisitos de memória dinamicamente com base nos recursos do sistema disponíveis.By default, SQL ServerSQL Server can change its memory requirements dynamically based on available system resources. Para obter mais informações, consulte Gerenciamento de memória dinâmica.For more information, see dynamic memory management.

A quantidade mínima de memória permitida para a memória máxima do servidor é de 128 MB.The minimum memory amount allowable for max server memory is 128 MB.

Importante

Configurar o valor de max server memory como muito alto pode fazer com que uma única instância do SQL ServerSQL Server tenha que competir por memória com outras instâncias do SQL ServerSQL Server hospedadas no mesmo host.Setting max server memory value too high can cause a single instance of SQL ServerSQL Server might have to compete for memory with other SQL ServerSQL Server instances hosted on the same host. No entanto, configurar este valor como muito baixo pode ocasionar uma pressão de memória significativa e problemas de desempenho.However, setting this value too low could cause significant memory pressure and performance problems. Configurar a opção max server memory com o valor mínimo pode até mesmo impedir que o SQL ServerSQL Server seja iniciado.Setting max server memory to the minimum value can even prevent SQL ServerSQL Server from starting. Se você não puder iniciar o SQL ServerSQL Server após alterar essa opção, inicie-o usando a opção de inicialização -f e redefina a memória máxima do servidor para seu valor anterior.If you cannot start SQL ServerSQL Server after changing this option, start it using the -f startup option and reset max server memory to its previous value. Para obter mais informações, consulte Opções de inicialização do serviço Mecanismo de Banco de Dados.For more information, see Database Engine Service Startup Options.

O SQL ServerSQL Server pode usar a memória de modo dinâmico. No entanto, você pode definir as opções de memória manualmente e restringir a quantidade de memória que o SQL ServerSQL Server pode acessar.SQL ServerSQL Server can use memory dynamically; however, you can set the memory options manually and restrict the amount of memory that SQL ServerSQL Server can access. Antes de definir a quantidade de memória para o SQL ServerSQL Server, determine a configuração de memória apropriada ao subtrair, da memória física total, a memória necessária para o sistema operacional, as alocações de memória não controladas pela configuração max_server_memory e quaisquer outras instâncias do SQL ServerSQL Server (e outros usos do sistema, caso o computador não esteja totalmente dedicado ao SQL ServerSQL Server).Before you set the amount of memory for SQL ServerSQL Server, determine the appropriate memory setting by subtracting, from the total physical memory, the memory required for the OS, memory allocations not controlled by the max_server_memory setting, and any other instances of SQL ServerSQL Server (and other system uses, if the computer is not wholly dedicated to SQL ServerSQL Server). Essa diferença é a quantidade máxima de memória que você pode atribuir à instância SQL ServerSQL Server atual.This difference is the maximum amount of memory you can assign to the current SQL ServerSQL Server instance.

Configurando as opções de memória manualmenteSetting the memory options manually

As opções min server memory e max server memory do servidor podem ser definidas para abrangerem um intervalo de valores de memória.The server options min server memory and max server memory can be set to span a range of memory values. Esse método é útil para os administradores de banco de dados ou de sistemas configurarem uma instância do SQL ServerSQL Server em conjunto com os requisitos de memória de outros aplicativos ou de outras instâncias do SQL ServerSQL Server executadas no mesmo host.This method is useful for system or database administrators to configure an instance of SQL ServerSQL Server in conjunction with the memory requirements of other applications, or other instances of SQL ServerSQL Server that run on the same host.

Observação

As opções memória mínima do servidor e memória máxima do servidor são opções avançadas.The min server memory and max server memory options are advanced options. Se você estiver usando o procedimento armazenado no sistema sp_configure para alterar essas configurações, será possível alterá-las apenas quando show advanced options estiver definida como 1.If you are using the sp_configure system stored procedure to change these settings, you can change them only when show advanced options is set to 1. Essas configurações entram em vigor imediatamente sem a reinicialização do servidor.These settings take effect immediately without a server restart.

Use min_server_memory para garantir uma quantidade mínima de memória disponível para o Gerenciador de Memória do SQL ServerSQL Server em uma instância do SQL ServerSQL Server.Use min_server_memory to guarantee a minimum amount of memory available to the SQL ServerSQL Server Memory Manager for an instance of SQL ServerSQL Server. SQL ServerSQL Server não alocará imediatamente a quantidade de memória especificada em memória mínima do servidor na inicialização.will not immediately allocate the amount of memory specified in min server memory on startup. Porém, depois que o uso de memória atingir esse valor devido à carga do cliente, o SQL ServerSQL Server não poderá liberar memória livre a menos que o valor de memória mínima do servidor seja reduzido.However, after memory usage has reached this value due to client load, SQL ServerSQL Server cannot free memory unless the value of min server memory is reduced. Por exemplo, quando várias instâncias do SQL ServerSQL Server puderem existir simultaneamente no mesmo host, defina o parâmetro min_server_memory em vez do max_server_memory com a finalidade de reservar memória para uma instância.For example, when several instances of SQL ServerSQL Server can exist concurrently in the same host, set the min_server_memory parameter instead of max_server_memory for the purpose of reserving memory for an instance. Além disso, a configuração de um valor de min_server_memory é essencial em um ambiente virtualizado para garantir que a pressão de memória do host subjacente não tente desalocar a memória do pool de buffers em uma VM (máquina virtual) do SQL ServerSQL Server convidada além do que for necessário para se obter um desempenho aceitável.Also, setting a min_server_memory value is essential in a virtualized environment to ensure memory pressure from the underlying host does not attempt to deallocate memory from the buffer pool on a guest SQL ServerSQL Server virtual machine (VM) beyond what is needed for acceptable performance.

Observação

Não há nenhuma garantia de que o SQL ServerSQL Server aloque a quantidade de memória especificada em min server memory.SQL ServerSQL Server is not guaranteed to allocate the amount of memory specified in min server memory. Se a carga do servidor nunca exigir a alocação da quantidade de memória especificada em memória mínima do servidor, o SQL ServerSQL Server será executado com menos memória.If the load on the server never requires allocating the amount of memory specified in min server memory, SQL ServerSQL Server will run with less memory.

Utilize max_server_memory para garantir que o sistema operacional não experimente uma pressão de memória prejudicial.Use max_server_memory to guarantee the OS does not experience detrimental memory pressure. Para definir a configuração max server memory, monitore o consumo geral do processo do SQL ServerSQL Server para determinar os requisitos de memória.To set max server memory configuration, monitor overall consumption of the SQL ServerSQL Server process in order to determine memory requirements. Para ser mais preciso com esses cálculos para uma única instância:To be more accurate with these calculations for a single instance:

  • Da memória total do SO, reserve de 1 GB a 4 GB para o sistema operacional em si.From the total OS memory, reserve 1GB-4GB to the OS itself.
  • Em seguida, subtraia o equivalente a possíveis alocações de memória do SQL ServerSQL Server fora do controle memória máxima do servidor, que é composto pelo tamanho da pilha1 *máx. de threads de trabalho calculado 2 .Then subtract the equivalent of potential SQL ServerSQL Server memory allocations outside the max server memory control, which is comprised of stack size 1 * calculated max worker threads 2. O que sobrar deve ser a configuração max_server_memory para a instalação de uma instância única.What remains should be the max_server_memory setting for a single instance setup.

1 Consulte o Guia de arquitetura de gerenciamento de memória para obter informações sobre os tamanhos de pilha de thread por arquitetura.1 Refer to the Memory Management Architecture guide for information on thread stack sizes per architecture.

2 Consulte a página da documentação sobre como Configurar a opção max worker threads de configuração de servidor para obter informações sobre os threads de trabalho padrão calculados para um determinado número de CPUs de afinidade no host atual.2 Refer to the documentation page on how to Configure the max worker threads Server Configuration Option, for information on the calculated default worker threads for a given number of affinitized CPUs in the current host.

Como configurar as opções de memória usando o SQL Server Management StudioSQL Server Management StudioHow to configure memory options using SQL Server Management StudioSQL Server Management Studio

Use as duas opções de memória de servidor, min server memory e max server memory, para reconfigurar a quantidade de memória (em megabytes) gerenciada pelo Gerenciador de Memória do SQL ServerSQL Server para uma instância do SQL ServerSQL Server.Use the two server memory options, min server memory and max server memory, to reconfigure the amount of memory (in megabytes) managed by the SQL ServerSQL Server Memory Manager for an instance of SQL ServerSQL Server. Por padrão, o SQL ServerSQL Server pode alterar seus requisitos de memória dinamicamente com base nos recursos do sistema disponíveis.By default, SQL ServerSQL Server can change its memory requirements dynamically based on available system resources.

Para definir uma quantidade fixa de memória:To set a fixed amount of memory:

  1. No Pesquisador de Objetos, clique com o botão direito do mouse em um servidor e selecione Propriedades.In Object Explorer, right-click a server and select Properties.

  2. Clique no nó Memória .Click the Memory node.

  3. Em Opções de Memória do Servidor, insira a mesma quantidade desejada para Memória mínima do servidor e Memória máxima do servidor.Under Server Memory Options, enter the same amount that you want for Minimum server memory and Maximum server memory.

    Use as configurações padrão para permitir que o SQL ServerSQL Server altere seus requisitos de memória de forma dinâmica com base nos recursos disponíveis do sistema.Use the default settings to allow SQL ServerSQL Server to change its memory requirements dynamically based on available system resources. É recomendável definir uma opção max server memory, conforme detalhado acima.It is recommended to set a max server memory as detailed above.

LPIM (Bloquear Páginas na Memória)Lock Pages in Memory (LPIM)

Essa política do Windows determina quais contas podem usar um processo para manter dados na memória física, impedindo o sistema de paginar os dados para a memória virtual em disco.This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk. O bloqueio de páginas na memória pode manter a resposta do servidor quando ocorre paginação de memória no disco.Locking pages in memory may keep the server responsive when paging memory to disk occurs. A opção Bloquear Páginas na Memória será definida para ON nas instâncias do SQL ServerSQL Server Standard Edition e superior quando a conta com privilégios para executar o sqlservr.exe tiver recebido o direito de usuário LPIM (Bloquear Páginas na Memória) do Windows.The Lock Pages in Memory option is set to ON in instances of SQL ServerSQL Server Standard edition and higher when the account with privileges to run sqlservr.exe has been granted the Windows Lock Pages in Memory (LPIM) user right.

Para desabilitar a opção Bloquear Páginas na Memória do SQL ServerSQL Server, remova o direito de usuário Bloquear Páginas na Memória da conta com privilégios para executar a conta de inicialização do sqlservr.exe (a conta de inicialização do SQL ServerSQL Server).To disable the Lock Pages In Memory option for SQL ServerSQL Server, remove the Lock Pages in Memory user right for the account with privileges to run sqlservr.exe (the SQL ServerSQL Server startup account) startup account.

A configuração dessa opção não afeta o SQL ServerSQL Server gerenciamento de memória dinâmica, permitindo que você expanda ou reduza mediante a solicitação de outros administradores de memória.Setting this option does not affect SQL ServerSQL Server dynamic memory management, allowing it to expand or shrink at the request of other memory clerks. Ao usar o direito de usuário Bloquear Páginas na Memória, é recomendável definir um limite superior para a opção max server memory, conforme detalhado acima.When using the Lock Pages in Memory user right it is recommended to set an upper limit for max server memory as detailed above.

Importante

Essa opção só deverá ser configurada quando necessário, ou seja, se houver sinais de que o processo sqlservr está sendo paginado. Neste caso, o erro 17890 será reportado no log de erros, que se assemelha 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: ##%.Setting this option should only be used when necessary, namely if there are signs that sqlservr process is being paged out. In this case, error 17890 will be reported in the Errorlog, resembling the below example: 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: ##%. A partir do SQL Server 2012 (11.x)SQL Server 2012 (11.x), o sinalizador de rastreamento 845 não é necessário para que a Standard Edition use páginas bloqueadas.Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), trace flag 845 is not needed for Standard Edition to use Locked Pages.

Habilitar a opção Bloquear Páginas na MemóriaTo enable Lock Pages in Memory

Para habilitar a opção Bloquear Páginas na Memória:To enable the lock pages in memory option:

  1. No menu Iniciar , clique em Executar.On the Start menu, click Run. Na caixa Abrir , digite gpedit.msc.In the Open box, type gpedit.msc.

    A caixa de diálogo Política de Grupo é aberta.The Group Policy dialog box opens.

  2. No console Política de Grupo , expanda Configuração do Computadore então expanda Configurações do Windows.On the Group Policy console, expand Computer Configuration, and then expand Windows Settings.

  3. Expanda Configurações de Segurançae então expanda Políticas Locais.Expand Security Settings, and then expand Local Policies.

  4. Selecione a pasta Atribuição de direitos de usuários .Select the User Rights Assignment folder.

    As políticas serão exibidas no painel de detalhes.The policies will be displayed in the details pane.

  5. No painel, clique duas vezes em Bloquear páginas na memória.In the pane, double-click Lock pages in memory.

  6. Na caixa de diálogo Configuração da Política de Segurança Local, adicione a conta com privilégios para executar o sqlservr.exe (a conta de inicialização SQL ServerSQL Server).In the Local Security Policy Setting dialog box, add the account with privileges to run sqlservr.exe (the SQL ServerSQL Server startup account).

Executando várias instâncias do SQL ServerSQL ServerRunning multiple instances of SQL ServerSQL Server

Quando você estiver executando várias instâncias do Mecanismo de Banco de DadosDatabase Engine, há três métodos que você pode usar para gerenciar a memória:When you are running multiple instances of the Mecanismo de Banco de DadosDatabase Engine, there are three approaches you can use to manage memory:

  • Utilize a opção max server memory para controlar o uso de memória, conforme detalhado acima.Use max server memory to control memory usage, as detailed above. Defina configurações máximas para cada instância, tomando cuidado para que a permissão total não seja maior que a memória física total de sua máquina.Establish maximum settings for each instance, being careful that the total allowance is not more than the total physical memory on your machine. É recomendável que cada instância de memória seja proporcional à sua carga de trabalho ou tamanho de banco de dados esperado.You might want to give each instance memory proportional to its expected workload or database size. Esse método tem a vantagem de que, quando novos processos ou instância forem iniciados, a memória livre estará disponível para eles imediatamente.This approach has the advantage that when new processes or instances start up, free memory will be available to them immediately. A desvantagem é que se você não estiver executando todas as instâncias, nenhuma das instâncias sendo executadas poderá utilizar a memória livre restante.The drawback is that if you are not running all of the instances, none of the running instances will be able to utilize the remaining free memory.

  • Utilize a opção min server memory para controlar o uso de memória, conforme detalhado acima.Use min server memory to control memory usage, as detailed above. Defina as configurações mínimas de cada instância, de forma que a soma desses mínimos seja entre 1 a 2 GB menor do que a memória física total de sua máquina.Establish minimum settings for each instance, so that the sum of these minimums is 1-2 GB less than the total physical memory on your machine. Novamente, você pode definir esses mínimos proporcionalmente à carga esperada para a instância.Again, you may establish these minimums proportionately to the expected load of that instance. Esse método tem a vantagem de que, se nem todas as instâncias estiverem sendo executadas ao mesmo tempo, as que estiverem sendo executadas poderão usar a memória livre restante.This approach has the advantage that if not all instances are running at the same time, the ones that are running can use the remaining free memory. Esse método também é útil quando há outro processo de uso intensivo da memória no computador, de forma que será assegurado que SQL ServerSQL Server tenha pelo menos uma quantidade razoável de memória.This approach is also useful when there is another memory-intensive process on the computer, since it would insure that SQL ServerSQL Server would at least get a reasonable amount of memory. A desvantagem é que quando uma nova instância (ou qualquer outro processo) for iniciada, pode levar algum tempo para que as instâncias liberem memória, principalmente se for necessário gravar páginas modificadas de volta nos respectivos bancos de dados para fazer isso.The drawback is that when a new instance (or any other process) starts, it may take some time for the running instances to release memory, especially if they must write modified pages back to their databases to do so.

  • Não fazer nada (não recomendado).Do nothing (not recommended). As primeiras instâncias apresentadas com uma carga de trabalho tenderão a alocar toda a memória.The first instances presented with a workload will tend to allocate all of memory. Instâncias inativas ou instâncias iniciadas posteriormente poderão acabar com apenas uma quantidade mínima de memória disponível.Idle instances, or instances started later, may end up running with only a minimal amount of memory available. SQL ServerSQL Server não tenta equilibrar o uso de memória em instâncias.makes no attempt to balance memory usage across instances. No entanto, todas as instâncias responderão aos sinais de Notificação de Memória do Windows para ajustar o tamanho de sua superfície de memória.All instances will, however, respond to Windows Memory Notification signals to adjust the size of their memory footprint. O Windows não balanceia a memória entre aplicativos com a API de Notificação de Memória.Windows does not balance memory across applications with the Memory Notification API. Ele simplesmente fornece um feedback global da disponibilidade da memória no sistema.It merely provides global feedback as to the availability of memory on the system.

É possível alterar essas configurações sem reinicializar as instâncias, para que você possa testar facilmente para encontrar as melhores configurações para seu padrão de uso.You can change these settings without restarting the instances, so you can easily experiment to find the best settings for your usage pattern.

Fornecendo a quantidade máxima de memória para o SQL ServerProviding the maximum amount of memory to SQL Server

A memória pode ser configurada até o limite de espaço do endereço virtual do processo em todas as edições do SQL ServerSQL Server.Memory can be configured up to the process virtual address space limit in all SQL ServerSQL Server editions. Para obter mais informações, consulte Limites de memória para as versões do Windows e do Windows Server.For more information, see Memory Limits for Windows and Windows Server Releases.

ExemplosExamples

Exemplo A. Defina a opção de memória máxima do servidor como 4 GB.Example A. Set the max server memory option to 4 GB.

O exemplo a seguir define a opção max server memory como 4 GB.The following example sets the max server memory option to 4 GB. Observe que, embora sp_configure especifique o nome da opção como max server memory (MB), o exemplo demonstra a omissão do (MB).Note that although sp_configure specifies the name of the option as max server memory (MB), the example demonstrates omitting the (MB).

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO

Isso produzirá uma instrução semelhante a:This will output a statement similar to:

Opção de configuração “memória máxima do servidor (MB)” alterada de 2147483647 para 4096.Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Execute a instrução RECONFIGURE para instalar.Run the RECONFIGURE statement to install.

Exemplo B. Determinando a Alocação de Memória AtualExample B. Determining Current Memory Allocation

A instrução a seguir retorna informações sobre a memória alocada atualmente.The following query returns information about currently allocated memory.

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;  

Exemplo C. Determinando o valor para “memória máxima do servidor (MB)”Example C. Determining value for 'max server memory (MB)'

A consulta a seguir retorna informações sobre o valor configurado atualmente e o valor em uso pelo SQL Server.The following query returns information about the currently configured value and the value in use by SQL Server. Essa consulta retornará resultados independentemente se “mostrar opções avançadas” for verdadeiro.This query will return results regardless of whether 'show advanced options' is true.

SELECT c.value, c.value_in_use
FROM sys.configurations c WHERE c.[name] = 'max server memory (MB)'

Consulte TambémSee Also

Guia de arquitetura de gerenciamento de memória Memory Management Architecture Guide
Monitorar e ajustar o desempenho Monitor and Tune for Performance
RECONFIGURE (Transact-SQL) RECONFIGURE (Transact-SQL)
Opções de configuração do servidor (SQL Server) Server Configuration Options (SQL Server)
sp_configure (Transact-SQL) sp_configure (Transact-SQL)
Opções de inicialização do serviço Mecanismo de Banco de Dados Database Engine Service Startup Options
Edições e recursos com suporte do SQL Server 2016 Editions and supported features of SQL Server 2016
Edições e recursos com suporte do SQL Server 2017 Editions and supported features of SQL Server 2017
Edições e recursos compatíveis do SQL Server 2017 no Linux Editions and supported features of SQL Server 2017 on Linux
Limites de memória para as versões do Windows e do Windows ServerMemory Limits for Windows and Windows Server Releases