Página Inicial > Administração de Banco de Dados, Memória, Virtual PASS BR > Utilização de mais de 3GB de memória no SQL Server em um ambiente 32 bits

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.

Abraços,

Fabrício França Lima

  1. Paulo
    13, outubro, 2010 em 11:19 | #1

    Fabrício, isto significa que em ambientes com Windows 64bit e SQL 64bit não é necessário habilitar estas consigurações ?

    [Reply]

    fabriciolimadba Reply:

    Exatamente Paulo. Em um ambiente 64bit o SQL Server já reconhece mais de 3GB de memória não necessitando desse tipo de configuração.

    [Reply]

  2. Ricardo
    15, novembro, 2010 em 20:42 | #2

    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

    [Reply]

    fabriciolimadba Reply:

    Ricardo, me manda um e-mail ou adiciona meu msn para conversamos melhor…
    msn: fabricio_lima_es@hotmail.com
    E-mail: fabricioflima@gmail.com

    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%’;

    [Reply]

  3. 11, fevereiro, 2011 em 15:18 | #3

    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!

    [Reply]

    Fabricio Lima Reply:

    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.

    [Reply]

  1. 2, janeiro, 2011 em 13:57 | #1