Opções de memória do servidor

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) no pool de buffers usado por uma instância do Microsoft SQL Server.

Por padrão, o SQL Server pode alterar seus requisitos de memória dinamicamente com base nos recursos do sistema disponíveis. A configuração padrão para min server memory é 0 e a configuração padrão para max server memory é 2147483647. A quantidade mínima de memória que você pode especificar para max server memory é 16 megabytes (MB).

ObservaçãoObservação

Configurar max server memor com o valor mínimo pode reduzir drasticamente o desempenho do SQL Server e até mesmo impedir sua inicialização. Se você não puder iniciar o SQL Server depois de alterar essa opção, inicie usando a opção de inicialização –f e redefina max server memory com seu valor anterior. Para obter mais informações, consulte Usando as opções de inicialização do serviço do SQL Server.

Quando o SQL Server usa a memória de forma dinâmica, ele consulta o sistema periodicamente para determinar a quantidade de memória física livre. O SQL Server usa a API de notificação de memória QueryMemoryResourceNotification para determinar quando o pool de buffer pode alocar memória e liberar memória.

Permitir que o SQL Server use memória dinamicamente é recomendado, porém, 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 e qualquer outra instância do SQL Server (e que outro sistema usa, se o computador não for totalmente dedicado ao SQL Server). Essa diferença é a quantidade máxima de memória que você pode atribuir ao SQL Server.

Configurando opções de memória manualmente

Defina min server memory e max server memory para abranger um intervalo de valores de memória. Esse método é útil quando os administradores de sistema ou de banco de dados querem configurar uma instância do SQL Server com os requisitos de memória de outros aplicativos executados no mesmo computador.

Use min server memory para garantir uma quantidade mínima de memória disponível para o pool de buffers de uma instância do SQL Server. O SQL Server não alocará imediatamente a quantidade de memória especificada em min server memory na inicialização. Porém, depois que o uso de memória alcançar esse valor devido à carga do cliente, o SQL Server não pode liberar memória do pool de buffer a menos que o valor de min server memory seja reduzido.

ObservaçãoObservação

Não há garantia de que o SQL Server aloque a quantidade de memória especificada em min server memory. Se a carga no servidor nunca exigir a alocação da quantidade de memória especificada em min server memory, o SQL Server será executado com menos memória.

Use max server memory para impedir que o pool de buffer do SQL Server use mais do que a quantidade de memória especificada, deixando a memória restante disponível para iniciar outros aplicativos rapidamente. O SQL Server não aloca imediatamente a memória especificada em max server memory na inicialização. O uso de memória aumenta conforme necessário pelo SQL Server até atingir o valor especificado em memória máxima do servidor. O SQL Server não pode exceder esse uso de memória a não ser que o valor de memória máxima do servidor seja aumentado.

Antes de reduzir o valor max server memory, use o Monitor de Desempenho para examinar o objeto de desempenho SQLServer:Buffer Administrador sob carga e observe os valores atuais dos contadores Páginas roubadas e Páginas reservadas. Esses contadores informam a memória como o número páginas 8K. max server memory deve ser definido acima da soma desses dois valores para evitar erros de falta de memória. Um valor aproximado da menor configuração razoável de max server memory (em MB) é ([Páginas roubadas] + [Páginas reservadas])/ 100. Para reduzir max server memory, talvez seja necessário reiniciar o SQL Server para liberar a memória. Para obter informações sobre como definir opções de memória, consulte Como definir uma quantidade fixa de memória (SQL Server Management Studio).

Maximizar a taxa de transferência de dados para aplicativos de rede

Para otimizar o uso de memória do sistema para o SQL Server, limite a quantidade de memória que é usada pelo sistema para cache de arquivo. Para limitar o cache do sistema de arquivos, verifique se a opção Maximizar taxa de transferência de dados para compartilhamento de arquivos não está selecionada. É possível especificar o menor cache do sistema de arquivos selecionando Minimizar a memória usada ou Equilíbrio.

Para verificar a configuração atual em seu sistema operacional

  1. Clique em Iniciar, em seguida, em Painel de Controle, clique duas vezes em Conexões de Rede e duas vezes em Conexão de Área Local.

  2. Na guia Geral clique em Propriedades, selecione Redes Microsoft de Compartilhamento de Arquivos e Impressoras, e clique em Propriedades.

  3. Se Maximizar Transferência de Dado para Aplicações em Rede, for selecionada, escolha qualquer outra opção, clique em OK e feche o restante das caixas de diálogo.

Memória AWE no Windows Server 2003

No Windows Server 2003, SQL Server pode ser usada a memória AWE (Address Windowing Extensions) para assistência adicional no balanceamento de carga de seus próprios requisitos de memória com os do sistema operacional. Esse balanceamento entre o SQL Server e o sistema operacional está sujeito às restrições das opções min server memory e max server memory. Se o hardware de servidor oferecer suporte a Inclusão de Memória a Quente, memória física adicional poderá ser adicionada ao servidor conforme necessário sem exigir uma reinicialização. Para obter mais informações sobre a opção de configuração awe enabled, consulte Opção awe enabled. Para obter mais informações, consulte Inclusão de Memória a Quente.

ObservaçãoObservação

A memória AWE dinâmica tem suporte em servidores com menos memória física do que o limite de memória virtual configurado.

De modo ideal, aloque tanta memória quanto possível ao SQL Server sem fazer com que o sistema troque páginas com o disco. O limite varia dependendo de seu sistema. Por exemplo, em um sistema de 32 gigabytes (GB) dedicado exclusivamente ao SQL Server, 30 a 31 GB pode ser um limite máximo apropriado para o SQL Server; em um sistema de 64 GB, 60 a 62 GB pode ser um limite apropriado.

ObservaçãoObservação

Conforme você aumenta a quantidade de memória do SQL Server, assegura que haja espaço em disco suficiente para expandir o arquivo de suporte de memória virtual (Pagefile.sys) do sistema operacional para acomodar a memória adicional. Para obter mais informações sobre o arquivo de suporte da memória virtual, consulte a documentação do Windows.

Use as estatísticas do Windows System Monitor para ajudar a ajustar o valor da memória se necessário. Altere este valor somente quando você adicionar ou remover memória ou quando alterar como o sistema é usado.

Gerenciador de Memória Virtual

Os sistemas operacionais de 32 bits fornece acesso a 4 GB de espaço de endereço virtual. 2 GB de memória virtual são privados por processo e disponibilizados para o uso de aplicativos. 2 GB são reservados para uso do sistema operacional. Todas as edições do sistema operacional incluem uma chave que pode fornecer aplicativos com acesso a até 3 GB de memória virtual, limitando o sistema operacional a 1 GB. Para obter mais informações sobre como usar a configuração de memória da chave, consulte a documentação do Windows sobre o ajuste de 4 GB (4GT). Quando o SQL Server de 32 bits é executado em um sistema operacional de 64 bits, seu espaço de endereço virtual disponível para usuário é o total de 4 GB.

ObservaçãoObservação

O PAE é habilitado automaticamente somente quando o servidor usa dispositivos de inclusão de memória a quente. Nesse caso, você não precisa usar a opção /PAE em um sistema configurado para usar dispositivos de inclusão de memória a quente. Em todos os demais casos, você deverá usar a opção /PAE no arquivo Boot.ini para se beneficiar da memória de mais de 4 GB.

O espaço de endereço de 4 GB é mapeado para a memória física disponível pelo VMM (Gerenciador de Memória Virtual) do Windows. A memória física acessível pelo recurso AWE, portanto, depende do sistema operacional em uso. Para obter mais informações sobre a quantidade de memória física com suporte por sistemas operacionais diferentes, consulte "Limites de memória de versões do Windows" na documentação do Windows.

Os sistemas de endereço virtual permitem o excesso de uso da memória física para que a proporção de memória virtual para física possa exceder 1:1. Como resultado, programas maiores podem ser executados em computadores com várias configurações de memória física. No entanto, usar significativamente mais memória virtual do que a média combinada de conjuntos de trabalho de todos os processos pode provocar desempenho inadequado.

As opções memória mínima do servidor e memória máxima do servidor são opções avançadas. Se você estiver usando o procedimento armazenado no sistema sp_configure para alterar essas configurações, só será possível alterá-las quando show advanced options estiver definida como 1. Essas configurações entram em vigor imediatamente sem a reinicialização do servidor.

Executando várias instâncias do SQL Server

Quando você estiver executando várias instâncias do Mecanismo de Banco de Dados, há três métodos que você pode usar para gerenciar a memória:

  • Use max server memory para controlar o uso de memória. 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. É recomendável que cada instância de memória seja proporcional à sua carga de trabalho ou tamanho de banco de dados esperado. 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. 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.

  • Use min server memory para controlar o uso de memória. 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. Novamente, você pode definir esses mínimos proporcionalmente à carga esperada para a instância. 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. 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 Server tenha pelo menos uma quantidade razoável de memória. 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, especialmente se for necessário gravar páginas modificadas de volta na memória para fazer isso. Você também pode precisar aumentar o tamanho de seu arquivo de paginação significativamente.

  • Não fazer nada (não recomendado). As primeiras instâncias apresentadas com uma carga de trabalho tenderão a alocar toda a memória. Instâncias inativas ou instâncias iniciadas posteriormente poderão acabar com apenas uma quantidade mínima de memória disponível. O SQL Server não tenta equilibrar o uso de memória em instâncias. Entretanto, todas as instâncias responderão aos sinais de notificação de memória do Windows para ajustar o tamanho de seus pools de buffers. O Windows não equilibra a memória entre aplicativos com a API de notificação de memória. Ele simplesmente fornece um feedback global da disponibilidade da memória no sistema.

Você pode alterar essas configurações sem reinicializar as instâncias, assim você pode facilmente tentar encontrar as melhores configurações para seu padrão de uso.

Exemplos

O exemplo a seguir define a opção max server memory como 4 GB:

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