Você está na página 1de 17

1

BOAS PRTICAS DE CONFIGURAO DE MEMRIA E PROCESSADOR


NO SGBD MICROSOFT SQL SERVER 2008 R2

ROGRIO CESAR M. DA CONCEIO1


IREMAR NUNES DE LIMA 2

Resumo: Este artigo analisa os detalhes de configurao de memria e processador no


Sistema Gerenciador de Banco de Dados Microsoft SQL Server 2008 R2. So
identificadas as boas prticas para um DBA aplicar na configurao de memria e
processador para uma instncia SQL Server 2008 R2.
Palavras-chave: Banco de Dados, Microsoft SQL Server, Configurao, Memria,
Processador.

1. INTRODUO
O Microsoft SQL Server um dos SGBDs (Sistema Gerenciador de Banco de Dados)
mais conhecidos e importantes do mercado atualmente. Ele vem melhorando a cada
nova verso, e a ltima, a 2008 R2, veio consolidar suas vantagens e oferecer novos
recursos aos DBAs (Database Adminstrators).

Especialista em Banco de Dados e Business Intelligence (rogerioces@gmail.com).


DBA, Mestre em informtica e professor do Centro Universitrio Newton Paiva
(iremar.prof@uol.com.br).

2
Um grande nmero de DBAs instalam o SGBD sem fazer alteraes das configuraes
padres, pois estas configuraes so suficientes para um grande nmero de situaes.
Mas em alguns cenrios importante fazer ajustes de forma a tirar o mximo proveito
da capacidade do servidor. Este o tema deste artigo, onde sero explicadas algumas
boas prticas em termos de configurao de memria e CPU, com a anlise das
vantagens e desvantagens de cada uma.
2. CONFIGURAO DE MEMRIA E PROCESSADOR NO SQL Server
2.1 Por que os DBAs devem avaliar a necessidade de se fazer alteraes na
configurao padro do SQL Server 2008 ?
Um DBA deve avaliar se vale a pena alterar as configuraes do SQL Server 2008 para
melhoria de desempenho da aplicao. Podem-se evitar determinados tipos de
contenes e incidentes no Banco de Dados relacionados a particularidades das
aplicaes.
Um ponto importante a ser considerado: sempre antes de implementar uma mudana,
utilize um change log (lista de mudanas). Faa as anotaes de como eram as
configuraes antes e como ficaram aps as modificaes. Verifique o impacto das
modificaes, e se a mudana trouxer uma piora na qualidade, desfaa e procure outra
alternativa. Faa isto num ambiente de teste: s depois que houver a certeza da melhora
obtida aplica-se em produo.
2.2 Boas prticas para gerenciamento de memria
Na verso 32 bits, a memria disponvel ao SQL Server limitada a 2 GB. possvel
alterar esta configurao como ser mostrado na seo 2.2.1. Na verso 64 bits no
existe esta limitao.

3
2.2.1. SQL Server 2008 em plataformas 32 bits
Sistemas em 32 bits tem como limitao aceitar um mximo de 4 GB de memria RAM
(isto no exclusivo do SQL Server, mas da plataforma 32 bits). Dos 4 GB de memria
RAM mximo que o servidor possui, 2 GB so reservados para o Windows. Com isso
ele deixa o SQL Server 2008 com somente 2 GB de RAM. Quem optar por uma edio
do SQL Server 2008 em 32 bits deve fazer alguns ajustes para conseguir liberar mais
memria a ele. Um destes ajustes utilizar a opo /3GB ou usar as extenses de janela
de endereo (AWE) com a opo /PAE. No Windows Server 2003, pode-se alterar o
arquivo boot.ini e utilizar a opo /3GB, deixando o Windows com 1 GB de memria
RAM. Com isso o SQL Server consegue utilizar at 3GB de memria RAM. No
Windows Server 2008 32 bits, esta mesma opo feita de outra forma, atravs do
comando BCDEdit com a opo increaseuserva, usando um parmetro opcional que vai
determinar o tamanho do espao do usurio disponvel, como 3GB.
Se o servidor de 32 bits possuir mais de 4 GB de memria RAM, possvel fazer outros
ajustes, utilizando a opo /PAE. A Intel introduziu pela primeira vez as Extenses de
Endereo Fsico (PAE s) de 36 bits no Pentium Pro na dcada de 1990. Os 4 bits extras
permitem que os aplicativos adquiram memria fsica acima de 4GB (at 64GB) como
memria no paginada mapeados dinamicamente no espao de endereo de 32 bits.
(College, 2010, traduo do autor). Como se observa, possvel utilizar mais de 4 GB
de RAM em plataformas de 32 bits. Ela acionada no Windows Server 2003 da mesma
forma que a opo /3Gb, no boot.ini, usando a opo /PAE. E no Windows Server 2008
com o comando BCDEdit e opo /PAE. Ativando o /PAE, possvel configurar o
AWE permitindo aumentar o acesso memria. Uma forma de habilitar o AWE
usando o comando sp_configure (figura 01) ou atravs da janela Propriedades do
servidor no SQL Server Management Studio. Para isso, deve-se de dentro do SQL

4
Server Management Studio, clicar com o boto direito em cima da sua instncia, e
selecionar Properties. Em seguida, clicar no item Memory.
Mas como sempre, uma prtica tem suas vantagens e desvantagens. As desvantagens
so que a memria acima de 4GB acessada usando PAE /AWE s pode ser usada pelo
data cache do SQL Server. O cache de procedimento (procedure cache), utilizado para
os planos compilao de consulta, no capaz de tirar proveito dessa memria; os
componentes do Analysis Services e do Integration Services no so capazes de utilizar
a memria acessada usando PAE/AWE; e por ltimo, pode haver sobrecarga no espao
de memria mapeado pelo AWE em sistemas 32 bits.

Figura 01: Usando o comando sp_configure para reconfigurar o valor mximo de memria para o SQL.
Fonte: Prprio autor

Um ponto importante a ser observado que em plataformas 32-bit com o sistema AWE
habilitado, a conta do servio que executa o servio do SQL Server deve ter o direito de
usar lock pages (bloquear pginas) na memria. Como conseqncia, a memria AWE
no paginada para disco pelo sistema operacional.
Essas so as consideraes sobre boas prticas para utilizar o SQL Server 2008 em
plataformas de 32 bits. Em plataformas de 64 bits, estas limitaes no ocorrem, como
ser visto seguir.

5
2.2.2. SQL Server 2008 em plataformas 64 bits
Na plataforma 64 bits, muitos dos problemas que o SQL Server 2008 encontra em
plataforma 32 bits no ocorrem; inclusive ela a recomendada caso o servidor possua
mais de 4 GB de memria RAM, pois no somente a instncia SQL Server 2008 pode
usar mais memria como tambm todos os seus componentes, como o Analysis
Services e Integration Services sem precisar fazer alteraes.
Existe uma boa prtica para SQL Server 2008 em ambientes 64 bits: definir o lock
pages (bloqueio de pginas) direto na memria. Ele tem a vantagem de impedir que o
Windows faa paginao de memria fora do SQL Server. Sem esta configurao
habilitada, certas aes, tais como cpias de arquivos grandes podem levar a um
aumento de paginao no Windows. Isso pode levar uma reduo significativa no
desempenho do SQL Server.
2.2.3. Boas prticas de configurao de memria em plataformas de 32 ou 64 bits
As boas prticas descritas a seguir podem ser aplicadas indiferentes da plataforma
escolhida do SQL Server 2008, seja 32 ou 64 bits. Elas so baseadas nos parmetros de
configurao descritos na figura 02 a seguir. Para se chegar nesta figura deve-se dentro
do SQL Server Management Studio, clicar com o boto direito em cima da sua

6
instncia,

selecionar

Properties.

Em

seguida,

clicar

no

item

Memory.

Figura 02: Opes de configurao da memria do SQL Server 2008


Fonte: Prprio autor

Conforme pode ser visto possvel definir os valores mnimo e mximo de memria a
ser utilizado pelo SQL Server. Isto importante porque quando o SQL Server 2008
inicia, ele adquire memria at ficar pronto para uso e vai liberando para outros
processos do sistema operacional conforme no for mais necessrio. O valor mnimo o
valor em que o SQL Server pra de liberar memria para o sistema operacional, e o
valor mximo o valor mximo de memria que ele pode adquirir. O padro de valor
mnimo de memria 0 e o mximo 2.147.483.647 bytes. Devem-se fazer os ajustes
de acordo com as caractersticas da aplicao e outros recursos instalados no servidor.
Com estes valores definidos, tem-se mais segurana para que o SQL Server no fique

7
com pouca memria disponvel nem que fique com mais memria do que o necessrio,
prejudicando as outras aplicaes no servidor que necessitem de mais memria.
O parmetro denominado lock pages, j citado anteriormente, define o valor de
memria mxima que o SQL Server ir consumir. Se no for definido o valor mximo
deste parmetro, quando o banco de dados estiver sob uma carga enorme, ele ir
consumir o tanto de memria RAM que o SO liberar, podendo deixar outras aplicaes
do servidor sem memria disponvel inclusive deixando o prprio servidor instvel.
Para acion-lo, preciso clicar em iniciar, executar e digitar gpedit.msc. Na caixa de
dilogo Group Policy, expanda Computer Configuration, e em seguida expanda
Windows Settings. Ento expanda Security Settings, e depois expanda Local Policies.
Selecione a pasta User Rights Assignment. No Painel de detalhes so exibidas as
diretivas. Neste painel, clique duas vezes em Lock pages in memory. Em seguida na
caixa de dilogo Local Security Policy Setting, clique em adicionar. Na caixa de dilogo
Select Users or Groups, adicione uma conta com privilgios de execuo para o
sqlservr.exe. Um ponto importante: em sistemas 32 bits, configurar este privilgio sem
usar o AWE pode prejudicar significativamente o desempenho do sistema.
Uma boa prtica com relao aos valores mnimo e mximo de memria definir estes
valores para cada instncia que o servidor possuir. Se no for definido, e a primeira
instncia solicitar mais memria, ela poder prejudicar o funcionamento e desempenho
das outras instncias.
Outro parmetro mostrado na figura 02 refere-se ao index creation memory. Ele
controla a quantidade de memria alocada para ordenaes na criao de ndices. Esta
opo auto-configurvel, mas pode-se defini-la manualmente para ganho no tempo de

8
execuo, caso tenha um cenrio de criao massiva de ndices em tabelas grandes do
banco de dados.
Por ltimo, o parmetro minimun memory per query, define quanto de memria
(mnimo) o servidor vai disponibilizar para cada consulta. possvel definir um valor
no intervalo de 512 bytes at 2 Gigabytes. O padro 1.024 kb. Aumentando o valor
poder melhorar o desempenho de algumas consultas. Mas, em contrapartida poder
levar a uma maior competio para obter os recursos da memria. Cabe ao DBA avaliar
como esto tops SQL da instncia que necessitam de mais recursos de memria, para
ajustar um valor que ajude no desempenho.
Uma ltima recomendao com relao ao gerenciamento de memria no SQL Server
quanto de memria disponibilizar para a instncia. Normalmente o DBA quer dar tudo
que for possvel, mas ele precisa verificar se existem outras aplicaes que consomem
recursos do servidor. Algumas delas so o prprio Windows, os drivers para cartes e
unidades de fitas, o antivrus e o sistema de backup, entre outros. Dependendo das suas
caractersticas eles podem consumir uma grande quantidade de memria. Por isso, devese levantar quanto de memria estes softwares precisam e ento dividir entre ele e o que
ser possvel dar de memria para o banco de dados. No existe um valor mgico: o
DBA deve determin-lo de acordo com os recursos que ele possui, as aplicaes que
utiliza e o trabalho que o banco de dados far.
Uma novidade da verso SQL Server 2008 R2 com relao a memria foi a
possibilidade de incluso de memria a quente no servidor. Ela possibilita incluir
mais memria no servidor do SQL Server 2008, sem precisar reinici-lo. Deve-se ficar
atento ao fato de que necessrio um hardware especial fornecido pelo fabricante.
2.3 Boas prticas para gerenciar a CPU

9
Quando o SQL Server iniciado ele cria um processo no sistema operacional. Mas
como ele precisa suportar centenas e at milhares de requisies, o SQL Server usa o
conceito de threads. As threads so usadas para melhor organizar as tarefas que o SQL
Server tem que fazer, e tambm para ganhar em desempenho. Se uma thread est
esperando algo para ento fazer a sua ao, ele pode utilizar outras threads para fazer
outras tarefas e assim garantir o desempenho da aplicao. E possvel fazer alguns
ajustes nas configuraes para que as threads possam ser mais eficientes.
Uma alterao possvel usar a opo Boost SQL Server Priority, o nvel de prioridade
da thread do SQL Server. O padro normal sete, e esse valor garante que as threads
so atribudas e executadas sem causar problemas de estabilidade no servidor. A opo
Boost SQL Server Priority altera o nvel de prioridade para treze, o que garante que as
threads do SQL Server executaro com mais prioridades que as outras do sistema
operacional. Mas isso pode trazer diversos problemas de estabilidade. Um caso em que
esta configurao pode ser til num ambiente de teste de carga com melhorias no
desempenho. Em geral a configurao padro recomendada. Para se chegar at ela,
dentro do SQL Server Management, clique com o boto direito em cima da sua
instncia e selecione Properties. Ento escolha a opo Processors. Ela contm o item
Boost SQL Server priority, permitindo marc-lo ou desmarc-lo, conforme mostrado na
figura 03 abaixo.

10

Figura 03: Opes de configurao da CPU do SQL Server 2008


Fonte: Prprio autor

Outra opo que pode ser ajustada o pooling de threads, que define o mximo de
threads trabalhando simultaneamente. Esta funcionalidade gerencia as threads conforme
a necessidade da instncia. Esta opo fica dentro do item processors, de nome:
Maximum worker threads. O valor padro para ela 0, o que permite o SQL Server
definir o pool de threads automaticamente conforme o nmero de CPUs e se o sistema
de 32 ou 64 bits. O valor em um ambiente de 1 a 4 CPUs, em 32 bits 256; em 64 bits,
512. Isto varia conforme o nmero de CPUs aumenta, chegando at 32 CPUs com 480
threads em 32 bits e 960 threads em sistema de 64 bits. O usurio pode alterar o valor
mximo para at 1024 em sistemas 32 bits e 2048 em sistemas 64 bits. Mas isso tem
uma conseqncia, porque quanto maior o nmero de threads, mais memria precisa ser

11
reservada, consumindo mais recursos, e por isso deve-se ficar atento estabilidade do
servidor.
Pode-se tambm habilitar o recurso de modos de fibras (fiber mode), tambm conhecido
como lightweight pooling. Essa configurao vai permitir o SQL Server criar fibras em
vez de threads. A fibra uma verso leve de uma thread que capaz de alternar o
contexto em modo de usurio ao invs do modo kernel. Esta opo pode ser bastante
interessante em servidores com um grande nmero de CPUs perto de sua capacidade: o
desempenho pode aumentar se esta opo estiver habilitada. Novamente, vale o aviso de
fazer vrios testes no ambiente com relao estabilidade.
Uma caracterstica que deve ser utilizada somente se for estritamente necessrio, e em
casos bem especficos, pois a prpria Microsoft diz que nas prximas verses do SQL
Server ela ser removida. A prtica consiste em configurar as threads para que sejam
executadas por determinada CPU. Esta opo se chama mscara de afinidade de CPU.
Isto pode ser interessante em casos que preciso reservar recursos para uma
determinada instncia, que compartilha o SQL Server com outras no servidor. Isto evita
que uma determinada instncia consuma todo o servidor, deixando as outras instncias
sem recursos. Ela pode ser ativada com a procedure de sistema sp_configure ou atravs
do SQL Server Management, clicando com o boto direito em cima da sua instncia e
selecionando Properties. Ento escolha a opo Processors. Ela contm o item
Automatically set processor affinity mask for all processors, permitindo marc-lo ou
desmarc-lo. Isto possvel nos servidores Windows 2000 e 2003. No Windows 2008,
ela est desabilitada e no possvel acion-la (provavelmente porque como foi dito
anteriormente, as prximas verses do SQL Server no iro mais contempl-las).

12
Outra configurao possvel alterar o grau mximo de paralelismo (MAXDOP). Esta
funcionalidade controla o nmero mximo de CPUs que pode ser usado na execuo de
uma nica tarefa. Isto tem as suas vantagens, como por exemplo, uma grande consulta
pode ser dividida em partes diferentes, com cada parte executando threads em CPUs
separadas (paralelismo de consultas). Uma outra vantagem seu uso em sistemas
OLAP, pelo fato das consultas serem maiores. Com isso, dividindo as consultas em
partes menores e distribuindo-as em vrios CPUs, com cada CPU executando uma
parte, possvel utilizar mais recursos para aumentar o desempenho das consultas
grandes. Por padro, o SQL Server decide isto quando estiver compilando cada
consulta, se vai utilizar uma consulta paralela atravs do MAXDOP ou no, quando o
valor d MAXDOP 0. possvel alterar o seu valor para 1, que vai desabilitar as
consultas paralelas, ou a um nmero que seja at o nmero de CPUs disponveis no
servidor. Um ponto a ser dito com relao a MAXDOP com valor 1 que algumas
operaes, como recriar ndices se beneficia muito do paralelismo. Mas elas so
incapazes de faz-lo se o MAXDOP est configurado com valor 0. O usurio ter que
analisar as situaes para definir o melhor valor de MAXDOP. O mximo grau de
paralelismo pode ser definido atravs do comando sp_configure ou atravs do SQL
Server Management Studio.
Pode-se definir o custo limite para paralelismo, deixando o MAXDOP no padro ou
num valor maior que 1. O SQL Server vai calcular o custo limite para o paralelismo.
Isto representa o tempo (em estimativa) que a consulta precisa para ser executada em
srie em uma nica CPU. O valor padro 5 segundos, e estimativas de consultas que
demoram mais do que isso sero consideradas para o paralelismo. Para alguns casos,
aumentar este valor a melhor situao para configurar o MAXDOP quando se tem
muitas consultas paralelas indesejadas.

13
Uma novidade da verso SQL Server 2008 R2 com relao a processadores foi o
aumento no suporte de processadores lgicos, passando dos 64 da ultima verso para at
256.
3. ANALISANDO O SP_CONFIGURE
Como foi citado algumas vezes neste artigo, vamos dar uma olhada melhor no comando
sp_configure. Ele um comando onde o usurio pode executar modificaes na sua
instncia, configurando memria, servidor, as consultas e outros ajustes. Rodando o
comando sp_configure sem parmetros, o SQL Server exibir apenas algumas
configuraes. O padro dele esconder algumas opes mais avanadas. Mas como
mostrado na figura 04 abaixo pode-se visualizar todas as configuraes.

Figura 04: Executando sp_configure para exibir todas as opes de configurao


Fonte: Prprio autor

Existem 65 registros que possibilitam fazer diversas modificaes na instncia. As que


interessam neste artigo so os registros que configuram memria e CPU (processors).
So os registros:

14

awe enabled

max degree of parallelism

max server memory (MB)

max worker threads

min memory per query (KB)

min server memory (MB)

Por exemplo, vamos alterar a quantidade de memria mnima do servidor (opo min
server memory (MB)). Na figura 05 o valor dela est como 0, tanto na coluna
config_value quanto na run value.

Figura 05: Opo min server memory (MB) est com o valor 0
Fonte: Prprio autor

Executando EXEC sp_configure 'min server memory (MB)', '400', definido a memria
mnima disponvel para a instncia 400 megabytes. O SQL server exibe a mensagem:
"Configuration option 'min server memory (MB)' changed from 0 to 400. Run the
RECONFIGURE statement to install." Repare que mesmo que se tenha executado o
comando sp_configure fazendo a definio da nova quantidade mnima de memria, ele
avisa que se o comando RECONFIGURE no for executado a alterao feita no entrou

15
em vigor. Apenas a coluna config_value contm o valor 400, a coluna run_value
continua com o valor 0. A figura 06 mostra exatamente esta diferena.

Figura 06: Valor da coluna run_value


Fonte: Prprio autor

Aps executar o comando RECONFIGURE, a modificao entra em vigor. Veja a


figura 07.

Figura 07: Comando RECONFIGURE


Fonte: Prprio autor

16
Um ponto importante que nem todas as modificaes entram em funcionamento aps
ser executado o comando RECONFIGURE. Para algumas, necessrio reiniciar o
servio do SQL Server. Para saber quais so elas consulte a tabela sys.configurations.
Nela existe o campo is_dynamic. Se o valor deste campo for igual a 0, as modificaes
s entram em vigor aps o reincio do servio do SQL Server. E ainda, se o servio for
reiniciado antes de ter executado o comando RECONFIGURE, a modificao tambm
no entrar em vigor. Por isso, preciso executar o comando RECONFIGURE e depois
reiniciar o SQL Server para determinadas configuraes.
4. CONCLUSO
As configuraes de memria e processador devem ser usadas conforme a necessidade
do usurio, e devem-se verificar as suas conseqncias. Os ajustes padro do SQL
Server atendem a um grande nmero de situaes e s devem ser alteradas caso o DBA
tenha conscincia das suas vantagens e as implicaes que as mesmas podem causar na
aplicao e na instncia.

17
REFERNCIAS
COLLEDGE, Rod. SQL Server 2008 Administration in Action. United States of
America: Manning Publications Co., 2010. 466 p.
MSDN, Microsoft. Sp_configure (Transact-SQL). Disponvel em:
<http://msdn.microsoft.com/pt-br/library/ms188787.aspx>. Acesso em: 19 abril 2011.
MSDN, Microsoft. Opo index create memory. Disponvel em:
<http://msdn.microsoft.com/pt-br/library/ms175123.aspx>. Acesso em 19 abril 2011.
MSDN, Microsoft. Opo max worker threads. Disponvel em:
<http://msdn.microsoft.com/pt-br/library/ms187024.aspx>. Acesso em 19 abril 2011.
MSDN, Microsoft. Opo de mscara de afinidade. Disponvel em:
<http://msdn.microsoft.com/pt-br/library/ms187104.aspx>. Acesso em 19 abril 2011.
MENDES. Silas. Configurar instncia SQL via script. Disponvel em:
<http://silasmendes.com/dba/tag/sp_configure>. Acesso em 22 abril 2011.
MSDN, Microsoft. Incluso de Memria a Quente. Disponvel em:
<http://msdn.microsoft.com/pt-br/library/ms175490%28v=SQL.100%29.aspx>. Acesso
em 22 abril 2011.
MSDN, Microsoft. How to: Enable the Lock Pages in Memory Option (Windows).
Disponvel em: <http://msdn.microsoft.com/en-us/library/ms190730.aspx>. Acesso em
22 abril 2011.