Loading…

Utilização de mais de 3GB de memória no SQL Server em um ambiente 32 bits

A algum tempo precisei instalar o Sql Server 2005 Standard Edition 32 bits em um servidor com Windows 2003 Server Enterprise Edtion 32 bits que possuia mais de 4GB de memória. Gostaria de compartilhar essa experiência com vocês para que possa ajudar a outros que ainda possuem essa necessidade de instalação do SQL Server em um ambiente 32 bits.Quando se fala em utilizar mais de 4Gb de memória no SQL Server em um ambiente 32 bits já lembramos das opções AWE, /3GB e /PAE.Encontrei um White Paper da Microsoft que tirou algumas dúvidas sobre as opções AWE e /3GB. Esse White Paper pode ser baixado no Link: Advantages of a 64-bit Environment.Após a leitura do white paper, decidi habilitar o AWE dentro do SQL para disponibilizar mais mémória para Data Caching.Também habilitei a opção /3GB no boot.ini do servidor para aumentar o VAS(Virtual Address Space) de 2Gb para 3GB, disponibilizando assim, mais memória para as operações de caching query plans, sorting, indexing, joins e conexões de usuários.Para habilitar a opção AWE no SQL Server, deve-se seguir os seguintes passos:1) Start->Run->gpedit.msc2) Abre-se a janela do Group Police Object Editor3) No menu esquerdo, abra Computer Configuration->Windows Settings->Secyrity Settings->Local Policies4) Selecione User Rights Assignment folder, as policies serão mostradas no lado direito.5) Duplo clique em Lock Pages in Memory-> Add User or Group->Adicione o usuário utilizado para subir o serviço do MSSQLServer.6) Reiniciar o serviço do MSSQLServer.Caso esse procedimento não seja realizado, quando se altera a opção AWE recebemos o seguinte erro:image Agora podemos habilitar a opção AWE, seguem abaixo duas formas de executar esse procedimento:Opção 1 – Abrir o Management Studio, clicar com o Botão direito no servidor->Properties->Memory-> Habilitar a opção Use AWE to allocate memory. Pode-se observar que disponibilizei um limite máximo de aproximadamente 5 GB de memória para o SQL Server.AWE

Opção 2 – Executar o script abaixo:

sp_configure 'show advanced options',1
go
reconfigure
go
sp_configure 'awe enabled',1
go
reconfigure
go
sp_configure 'show advanced options',0
go
reconfigure

Em seguida, deve-se reiniciar o serviço do SQL Server para que as alterações passem a valer.

Executando a query abaixo, pode-se ver o quanto que o SQL Server reconheceu de memória e o quanto de memória que está sendo utilizada.

select counter_name ,cntr_value,cast((cntr_value/1024.0)/1024.0 as numeric(8,2)) as Gb
from sys.dm_os_performance_counters
where counter_name like '%server_memory%';

Segue o resultado.

image

Até esse momento, tinha verificado que o SQL Server reconheceu quase 5 GB de memória, entretanto ainda não tinha visto ele utilizando toda essa memória. Para isso, fiz uma query que ficava em loop fazendo um select em uma variável do tipo table e inserindo nela mesma. Acompanhando a query, a utilização da memória aumentou rapidamente conforme pode ser visualizada na figura abaixo.

image

Quando o SQL Server utilizou o máximo de memória que eu havia disponibilizado eu parei a execução da query. A figura abaixo demonstra toda a utilização da memória.

clip_image001

Entretanto, visualizando a utilização de memória por processo pelo task manager, o serviço do SQL só estava utilizando 100 MB de memória. Quando você utiliza a opção AWE no SQL Server o consumo de memória do processo do SQL Server não pode ser mais acompanhado pelo task manager pois o mesmo não é o real.

Para habilitar a opção /3GB, basta seguir os seguintes passos:

1 – Botão direito em Meu Computador -> Advanced -> Startup and Recovery-> Setting->Edit

2 – Adicionar /3GB no fim do Texto que se abre, como por exemplo:

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=”Windows Server 2003, Standard” /noexecute=optout /fastdetect /3GB

Já a opção /PAE, com ajuda do pessoal do fórum TechNet, descobri que quando o Windows Server 2003 R2 identifica que o servidor possui mais de 4GB de memória, ele já habilita a opção /PAE automaticamente fazendo com que o windows mesmo sendo 32 bits já utilizasse meus 8GB de memória. Logo, não precisei habilitá-la.

Sempre que você tiver disponível hardwares e softwares 64 bits, é aconselhável que você instale o sistema operacional e o SQL Server em 64 bits para obter o máximo de desempenho possível que seu hardware disponibiliza. Entretanto, ainda existem alguns casos onde temos limitações e ainda temos que instalar o SQL Server na versão 32 bits. Espero que possa ter ajudado alguém que ainda tenha essa necessidade. Fiquem a vontade para concordar, discordar e acrescentar informações sobre o assunto desse post nos comentários.

 

Gostou desse Post?

Curta, comente, compartilhe…

Assine meu canal no Youtube e curta minha página no Facebook para receber Dicas de Leituras, Vídeos e Eventos sobre SQL Server.

Até a próxima.

Fabrício Lima

MCITP – Database Administrator

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

16 thoughts on “Utilização de mais de 3GB de memória no SQL Server em um ambiente 32 bits

  1. Fabrício, tenho um sql 32bit rodando em um server 64bit ( até onde sei o AWE não é necessário ser configurado), porém o sql32 bit reconhece até 4gb de memória ! Ativei a opção do AWE e ocorreu o mesmo erro de “lock page in memory”, como fazer o sql server usar mais memória ?
    Obrigado

    1. Ricardo, me manda um e-mail ou adiciona meu msn para conversamos melhor…
      msn: [email protected]
      E-mail: [email protected]

      Seu server tem qts GB de memória?
      O Serveço do SQL Server esta usando quando exatamente?

      Essa query retorna qual resultado?
      select counter_name ,cntr_value,cast((cntr_value/1024.0)/1024.0 as numeric(8,2)) as Gbfrom sys.dm_os_performance_counterswhere counter_name like ‘%server_memory%’;

  2. Fabricio, gostaria de fazer esse ajuste para funcionar no windows server 2008 standard 32bits, onde tenho o sql server 2005 32bits instalado e tem 4GB de memória
    O sql não está utilizando toda memória, cerca de 1,5GB.
    O windows server 2008 não utiliza mais o arquivo boot.ini, e não achei em nenhum lugar para aumentar o uso dela pelo sql no windows.
    Você pode me ajudar?
    Obrigado!

    1. Fala Joel, nunca realizei essa alteração no win server 2008, mas encontrei uns links no google. O ideal seria testar em um ambiente de teste.

      http://social.technet.microsoft.com/forums/pt-BR/winsrv2008pt/thread/609404dd-1366-4fba-b385-029069f5c520

      http://www.webmundi.org/forum_posts.asp?TID=765

      Além dessa informação:
      /PAE /3GB Windows Vista / Seven / 2008Até as versões de Windows XP e 2003, era possível editar o arquivo boot.ini e colocar os parâmetros /PAE e /3GB na linha de execução do sistema operacional.

      Porem, a partir do Windows vista/2008 o boot.ini foi abolido e substituido pelo boot loader bcdedit.

      Relembrando os conceitos :

      /3gb : Libera 3gb da Ram para aplicações, e não apenas 2gb – valor default.

      /pae : Força com que sistemas operacionais de 32 bits tenham suporte a 4Gb de Ram ou mais.

      Para ativar os parâmetros PAE e 3GB, o processo é um pouco diferente.

      Para habilitar o 3gb, como admin, acesse o prompt de comando e digite :

      bcdedit /set increaseuserva 3072

      Para habilitar o pae, como admin, acesse o prompt de comando e digite :

      bcdedit /set PAE forceenable

      Faça um teste.

      Abraços.

  3. Fabricio bom dia. Tudo bem? achei seu Site em uma busca no Google e achei muito conteudo para me ajudar, pois, estou me preparando para tirar minha certificação no SQL 2008.
    Tenho uma duvida e gostaria que me ajudasse. Compramos um DELL 64 BITS para utilizar exclusivamente como servidor SQL com 16 GB de RAM, 3 HDS fazedo RAID 5.
    Tenho 3 Banco que irão rodar nesse Servidor com uma media de 60 acessos simultaneos.

    Posso deixar as configurações Default do Servidor (memoria e processador)? ou seria interessante definir um nivel minimo e maximo de memoria.?

    Obrigado e parabens pelo Blog.
    Claudinei

    1. Valeu Claudinei…

      Processador fica tudo como Default.

      Entretanto, eu sempre gosto de deixar uns 2 ou 3 GB livres de memória para o SO. Acompanho no task Manager.

      Em um servidor com 16 GB, coloco um máximo de 12 GB para o SQL Server por exemplo.

      É só uma dica que pode mudar de ambiente para ambiente de acordo com algumas variáveis.

      Abraços

  4. Olá Fabricio tudo bom?

    tenho um servidor Dell 2 win2k3 enterprise processador xeon 16g ram 1T HD raid 5 minha base de dados tem 40 gigas 150 usuários pendurados, esta uma lerdeza só, algo que eu possa fazer para melhorar o desempenho, pois sql server 2008R2 esta padraozão não foi mexido em nada e não manjo qse nada de sql server, valeu abraços.

    1. Olá Rener, tem muita coisa que pode ser feita.

      40 GB é uma base até pequena para 16 GB de memória.

      Você terá que descobrir qual é o gargalo e fazer um Tuning no ambiente. Não tem uma receita de bolo.

      Caso queira, posso fazer um trabalho de consultoria no seu ambiente.

      Obrigado.

  5. Boa noite, vi seu blog achei interessante, estou rodando sql server 2005 em um server 2003 enterprise, la nas configurações esta maximo, porem tenho uma aplicaçao rodando no servidor, e meu sql começa bem de 150 MB de memoria, vejo no gerenciador de tarefas, mas quando ele chega em 1.685 giga ele fica lento, vai devagar, nunca ultrapassa os 1,7 giga ou mais, e meu servidor tem 12 Gb de memoria fisica, o que posso fazer, gostaria que ele usasse uns 6 Gb no minimo, mas quando chega em 1,6 ele fica lento, o sql parece que atinge limite, ja nao sei mais o que fazer… ai preciso reiniciar para ele zerar e começa tudo de novo

  6. Olá Fabricio,
    Tenho um MacPro com windows 7 instalado e Sql 2012, tem 32 gb de ram. Algum tempo pedi um amigo para limitar o uso da memória para 3gb pois tinhamos somente 6gb de ram. Gostaria que otmizasse tanto o Sql e o windows para deixa-lo rodando como um servidor… se tiver interesse, entre em contato.

  7. Boa tarde, Fabrício.
    Sei que passou muito tempo desde sua primeira postagem.
    Contudo, é possível disponibilizar o método da query que ficava em loop fazendo um select em uma variável do tipo table e inserindo nela mesma?

Deixe uma resposta para Joel HeckCancelar resposta

%d blogueiros gostam disto: