Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Sistema Gerenciador de Banco de Dados Microsoft SQL Server 2008 R2. São
Processador.
1. INTRODUÇÃO
nova versão, e a última, a 2008 R2, veio consolidar suas vantagens e oferecer novos
1
Especialista em Banco de Dados e Business Intelligence (rogerioces@gmail.com).
2
DBA, Mestre em informática e professor do Centro Universitário Newton Paiva
(iremar.prof@uol.com.br).
2
Um grande número de DBAs instalam o SGBD sem fazer alterações das configurações
padrões, pois estas configurações são suficientes para um grande número de situações.
Mas em alguns cenários é importante fazer ajustes de forma a tirar o máximo proveito
da capacidade do servidor. Este é o tema deste artigo, onde serão explicadas algumas
Um DBA deve avaliar se vale a pena alterar as configurações do SQL Server 2008 para
aplicações.
alternativa. Faça isto num ambiente de teste: só depois que houver a certeza da melhora
alterar esta configuração como será mostrado na seção 2.2.1. Na versão 64 bits não
(isto não é exclusivo do SQL Server, mas da plataforma 32 bits). Dos 4 GB de memória
RAM máximo que o servidor possui, 2 GB são reservados para o Windows. Com isso
ele deixa o SQL Server 2008 com somente 2 GB de RAM. Quem optar por uma edição
do SQL Server 2008 em 32 bits deve fazer alguns ajustes para conseguir liberar mais
memória a ele. Um destes ajustes é utilizar a opção /3GB ou usar as extensões de janela
de endereço (AWE) com a opção /PAE. No Windows Server 2003, pode-se alterar o
RAM. Com isso o SQL Server consegue utilizar até 3GB de memória RAM. No
Windows Server 2008 32 bits, esta mesma opção é feita de outra forma, através do
comando BCDEdit com a opção increaseuserva, usando um parâmetro opcional que vai
ajustes, utilizando a opção /PAE. A “Intel introduziu pela primeira vez as Extensões de
Endereço Físico (PAE s) de 36 bits no Pentium Pro na década de 1990. Os 4 bits extras
permitem que os aplicativos adquiram memória física acima de 4GB (até 64GB) como
forma que a opção /3Gb, no boot.ini, usando a opção /PAE. E no Windows Server 2008
servidor no SQL Server Management Studio. Para isso, deve-se de dentro do SQL
4
Server Management Studio, clicar com o botão direito em cima da sua instância, e
Mas como sempre, uma prática tem suas vantagens e desvantagens. As desvantagens
são que a memória 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
a memória acessada usando PAE/AWE; e por último, pode haver sobrecarga no espaço
Figura 01: Usando o comando sp_configure para reconfigurar o valor máximo de memória para o SQL.
Fonte: Próprio autor
Um ponto importante a ser observado é que em plataformas 32-bit com o sistema AWE
habilitado, a conta do serviço que executa o serviço do SQL Server deve ter o direito de
usar lock pages (bloquear páginas) na memória. Como conseqüência, a memória AWE
Essas são as considerações sobre boas práticas para utilizar o SQL Server 2008 em
Na plataforma 64 bits, muitos dos problemas que o SQL Server 2008 encontra em
plataforma 32 bits não ocorrem; inclusive ela é a recomendada caso o servidor possua
mais de 4 GB de memória RAM, pois não somente a instância SQL Server 2008 pode
usar mais memória como também todos os seus componentes, como o Analysis
Existe uma boa prática para SQL Server 2008 em ambientes 64 bits: definir o lock
pages (bloqueio de páginas) direto na memória. Ele tem a vantagem de impedir que o
Windows faça paginação de memória fora do SQL Server. Sem esta configuração
habilitada, certas ações, tais como cópias de arquivos grandes podem levar a um
escolhida do SQL Server 2008, seja 32 ou 64 bits. Elas são baseadas nos parâmetros de
configuração descritos na figura 02 a seguir. Para se chegar nesta figura deve-se dentro
do SQL Server Management Studio, clicar com o botão direito em cima da sua
6
Conforme pode ser visto é possível definir os valores mínimo e máximo de memória a
ser utilizado pelo SQL Server. Isto é importante porque quando o SQL Server 2008
inicia, ele adquire memória até ficar pronto para uso e vai liberando para outros
processos do sistema operacional conforme não for mais necessário. O valor mínimo é o
valor em que o SQL Server pára de liberar memória para o sistema operacional, e o
valor máximo é o valor máximo de memória que ele pode adquirir. O padrão de valor
Com estes valores definidos, tem-se mais segurança para que o SQL Server não fique
7
com pouca memória disponível nem que fique com mais memória do que o necessário,
memória máxima que o SQL Server irá consumir. Se não for definido o valor máximo
deste parâmetro, quando o banco de dados estiver sob uma carga enorme, ele irá
consumir o tanto de memória RAM que o SO liberar, podendo deixar outras aplicações
Windows Settings. Então expanda Security Settings, e depois expanda Local Policies.
diretivas. Neste painel, clique duas vezes em Lock pages in memory. Em seguida na
caixa de diálogo Local Security Policy Setting, clique em adicionar. Na caixa de diálogo
Select Users or Groups, adicione uma conta com privilégios de execução para o
Uma boa prática com relação aos valores mínimo e máximo de memória é definir estes
valores para cada instância que o servidor possuir. Se não for definido, e a primeira
banco de dados.
Por último, o parâmetro minimun memory per query, define quanto de memória
(mínimo) o servidor vai disponibilizar para cada consulta. É possível definir um valor
no intervalo de 512 bytes até 2 Gigabytes. O padrão é 1.024 kb. Aumentando o valor
levar a uma maior competição para obter os recursos da memória. Cabe ao DBA avaliar
como estão tops SQL da instância que necessitam de mais recursos de memória, para
quanto de memória disponibilizar para a instância. Normalmente o DBA quer dar tudo
que for possível, mas ele precisa verificar se existem outras aplicações que consomem
recursos do servidor. Algumas delas são o próprio Windows, os drivers para cartões e
unidades de fitas, o antivírus e o sistema de backup, entre outros. Dependendo das suas
características eles podem consumir uma grande quantidade de memória. Por isso, deve-
se levantar quanto de memória estes softwares precisam e então dividir entre ele e o que
será possível dar de memória para o banco de dados. Não existe um “valor mágico”: o
DBA deve determiná-lo de acordo com os recursos que ele possui, as aplicações que
Uma novidade da versão SQL Server 2008 R2 com relação a memória foi a
mais memória no servidor do SQL Server 2008, sem precisar reiniciá-lo. Deve-se ficar
Quando o SQL Server é iniciado ele cria um processo no sistema operacional. Mas
como ele precisa suportar centenas e até milhares de requisições, o SQL Server usa o
conceito de threads. As threads são usadas para melhor organizar as tarefas que o SQL
Server tem que fazer, e também para ganhar em desempenho. Se uma thread está
esperando algo para então fazer a sua ação, ele pode utilizar outras threads para fazer
ajustes nas configurações para que as threads possam ser mais eficientes.
Uma alteração possível é usar a opção Boost SQL Server Priority, o nível de prioridade
da thread do SQL Server. O padrão normal é sete, e esse valor garante que as threads
Boost SQL Server Priority altera o nível de prioridade para treze, o que garante que as
threads do SQL Server executarão com mais prioridades que as outras do sistema
operacional. Mas isso pode trazer diversos problemas de estabilidade. Um caso em que
esta configuração pode ser útil é num ambiente de teste de carga com melhorias no
dentro do SQL Server Management, clique com o botão direito em cima da sua
instância e selecione Properties. Então escolha a opção Processors. Ela contém o item
figura 03 abaixo.
10
Outra opção que pode ser ajustada é o pooling de threads, que define o máximo de
Maximum worker threads. O valor padrão para ela é 0, o que permite o SQL Server
512. Isto varia conforme o número de CPUs aumenta, chegando até 32 CPUs com 480
threads em 32 bits e 960 threads em sistema de 64 bits. O usuário pode alterar o valor
máximo para até 1024 em sistemas 32 bits e 2048 em sistemas 64 bits. Mas isso tem
uma conseqüência, porque quanto maior o número de threads, mais memória precisa ser
11
reservada, consumindo mais recursos, e por isso deve-se ficar atento à estabilidade do
servidor.
Pode-se também habilitar o recurso de modos de fibras (fiber mode), também conhecido
como lightweight pooling. Essa configuração vai permitir o SQL Server criar fibras em
vez de threads. A fibra é uma versão leve de uma thread que é capaz de alternar o
contexto em modo de usuário ao invés do modo kernel. Esta opção pode ser bastante
desempenho pode aumentar se esta opção estiver habilitada. Novamente, vale o aviso de
Uma característica que deve ser utilizada somente se for estritamente necessário, e em
casos bem específicos, pois a própria Microsoft diz que nas próximas versões do SQL
Server ela será removida. A prática consiste em configurar as threads para que sejam
executadas por determinada CPU. Esta opção se chama máscara de afinidade de CPU.
Isto pode ser interessante em casos que é preciso reservar recursos para uma
determinada instância, que compartilha o SQL Server com outras no servidor. Isto evita
que uma determinada instância consuma todo o servidor, deixando as outras instâncias
sem recursos. Ela pode ser ativada com a procedure de sistema sp_configure ou através
do SQL Server Management, clicando com o botão direito em cima da sua instância e
Automatically set processor affinity mask for all processors, permitindo marcá-lo ou
desmarcá-lo. Isto é possível nos servidores Windows 2000 e 2003. No Windows 2008,
ela está desabilitada e não é possível acioná-la (provavelmente porque como foi dito
funcionalidade controla o número máximo de CPUs que pode ser usado na execução 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
OLAP, pelo fato das consultas serem maiores. Com isso, dividindo as consultas em
partes menores e distribuindo-as em vários CPUs, com cada CPU executando uma
parte, é possível utilizar mais recursos para aumentar o desempenho das consultas
grandes. Por padrão, o SQL Server decide isto quando estiver compilando cada
consulta, se vai utilizar uma consulta paralela através do MAXDOP ou não, quando o
valor d MAXDOP é 0. É possível alterar o seu valor para 1, que vai desabilitar as
servidor. Um ponto a ser dito com relação a MAXDOP com valor 1 é que algumas
operações, como recriar índices se beneficia muito do paralelismo. Mas elas são
incapazes de fazê-lo se o MAXDOP está configurado com valor 0. O usuário terá que
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
série em uma única CPU. O valor padrão é 5 segundos, e estimativas de consultas que
demoram mais do que isso serão consideradas para o paralelismo. Para alguns casos,
aumentar este valor é a melhor situação para configurar o MAXDOP quando se tem
Uma novidade da versão SQL Server 2008 R2 com relação a processadores foi o
aumento no suporte de processadores lógicos, passando dos 64 da ultima versão para até
256.
3. ANALISANDO O SP_CONFIGURE
Como foi citado algumas vezes neste artigo, vamos dar uma olhada melhor no comando
configurações. O padrão dele é esconder algumas opções mais avançadas. Mas como
interessam neste artigo são os registros que configuram memória e CPU (processors).
São os registros:
14
• awe enabled
Por exemplo, vamos alterar a quantidade de memória mínima do servidor (opção min
server memory (MB)). Na figura 05 o valor dela está como 0, tanto na coluna
Figura 05: Opção min server memory (MB) está com o valor 0
Fonte: Próprio autor
Executando EXEC sp_configure 'min server memory (MB)', '400', é definido a memória
mínima disponível para a instância é 400 megabytes. O SQL server exibe a mensagem:
"Configuration option 'min server memory (MB)' changed from 0 to 400. Run the
avisa que se o comando RECONFIGURE não for executado a alteração feita não entrou
15
figura 07.
serviço do SQL Server. Para saber quais são elas consulte a tabela sys.configurations.
Nela existe o campo is_dynamic. Se o valor deste campo for igual a 0, as modificações
só entram em vigor após o reinício do serviço do SQL Server. E ainda, se o serviço for
não entrará em vigor. Por isso, é preciso executar o comando RECONFIGURE e depois
4. CONCLUSÃO
Server atendem a um grande número de situações e só devem ser alteradas caso o DBA
tenha consciência das suas vantagens e as implicações que as mesmas podem causar na
aplicação e na instância.
17
REFERÊNCIAS
MSDN, Microsoft. How to: Enable the Lock Pages in Memory Option (Windows).
Disponível em: <http://msdn.microsoft.com/en-us/library/ms190730.aspx>. Acesso em
22 abril 2011.