Você está na página 1de 13

ESTRATGIAS DE OTIMIZAO NO SGBD MICROSOFT SQL SERVER 2008 R2

RAMON FELIPE MOREIRA DIAS DE SOUZA 1


IREMAR NUNES DE LIMA 2

Resumo: Este artigo identifica e discute diversas estratgias que podem ser utilizadas para
melhorar o desempenho de sistemas de banco de dados no SGBD Microsoft SQL Server
2008R2.

Palavras-chave: Banco de Dados, Otimizao, SQL Server 2008 R2.

1.0 INTRODUO
Hoje existem profissionais da rea de Tecnologia da Informao (TI) cada vez mais
interessados na rea de otimizao dos sistemas de informao e, em particular, na melhoria
do desempenho dos Sistemas de Gerenciamento de Banco de Dados (SGBD).
So inmeras as tcnicas de otimizao disponveis, sendo necessrio que os profissionais de
TI como analistas, projetistas e desenvolvedores de sistemas conheam estas tcnicas para
1

Especialista em Banco de Dados e Business Inteligence (ramonfelipes@gmail.com).

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

no gerar projetos de sistemas de banco de dados ineficientes ou que consomem recursos


significativos no servidor de banco de dados desnecessariamente.
Em particular, gerenciar grandes volumes de dados no SGBD a tarefa fundamental do DBA
(Database Administrator). Garantir a eficincia do banco de dados evita gargalos na
aplicao, melhora a qualidade de acesso aos dados e reduz custos com hardware.
Segundo Date (2004), o Sistema Gerenciador de Banco de Dados o software que manipula
todos os acessos ao Banco de Dados, e na maioria dos casos, esses SGBDs so instalados,
configurados e utilizados com seus valores padres. Temos que levar em considerao o
hardware que estamos utilizando, requisitos de negcio da aplicao e parmetros no servidor
de banco de dados. O ajuste dos parmetros de configurao necessrio para podermos
extrair o melhor desempenho do SGBD. O conhecimento detalhado de ferramentas e mdulos
do SGBD muito importante, pois uma degradao acentuada de desempenho em funo de
ausncia de monitoramento pelo DBA pode inviabilizar a execuo de operaes vitais do
negcio da corporao.
O DBA, atravs do monitoramento do SGBD, capaz de analisar e melhorar o desempenho
das transaes mais freqentes no banco, ajustar parmetros de configurao e identificar
contenes crticas no banco de dados. necessrio conhecer as diferentes tcnicas de
otimizao, objeto de estudo deste artigo.

2.0 ESTRATGIAS DE OTIMIZAO


A seguir ser identificado e em seguida explicado sucintamente, as diferentes estratgias de
otimizao de um sistema de banco de dados baseado no SQL Server 2008 R2. Muitas das

estratgias apontadas se aplicam a diferentes SGBDs e outras somente ao SQL Server. No


objetivo deste artigo aprofundar no detalhamento e aplicao da estratgia.

ndices: Indexar corretamente as colunas das tabelas de um banco de dados a principal


forma de melhorar o desempenho de um banco de dados. Em geral, somente esta estratgia
resolver a maioria dos gargalos encontrados num sistema de banco de dados. A
recomendao sempre indexar todas as primarys keys e foreigns keys das tabelas. No SQL
Server, as primarys keys das tabelas j so indexadas automaticamente, mas as foreigns keys
no. As colunas mais acessadas e usadas nas clusulas where das consultas mais freqentes
tambm so candidatas naturais indexao.

Fill Factor - Na criao de um ndice avaliar o parmetro fill factor. Este parmetro
determina qual a porcentagem de uma pgina de dados deve ser preenchido com o ndice e
quanto deve ser mantido vazio, reservado para incluses e alteraes. Por exemplo, se
utilizarmos fill factor igual a 80%, ento o SQL ir apenas preencher 80% de cada pagina
com os ndices. Tabelas estticas e tabelas dinmicas devem ter valores ajustados para este
parmetro.

ndices Filtrados - ndices filtrados um novo recurso do SQL 2008 e seu objetivo filtrar
os dados que sero indexados na clusula where. Isto permite a indexao parcial de uma
tabela grande. Em cenrios de busca parcial e freqente de dados numa tabela recomendado.

Reconstruo dos ndices ndices podem ficar fragmentados. Crie um job peridico
(semanal, por exemplo) para desfragmentao (rebuild) dos ndices em horrio de menor
utilizao do sistema. Existem diversas formas para identificar a freqncia com que ocorre a
fragmentao: avalie e defina a melhor forma de resolver o problema.

Atualizao de estatsticas Manter as estatsticas das tabelas e ndices atualizados uma


estratgia que ajuda o otimizador do banco de dados a decidir o melhor plano de execuo
para uma determinada query. Em geral, os bancos de dados como o SQL Server 2008 R2, tem
configurado internamente um parmetro que faz isto de forma automtica (auto update
statistics), porm existem cenrios em que esta opo insuficiente e at mesmo pode ser um
fator de degradao do banco de dados. Recomenda-se que se crie um job (dirio, por
exemplo) para atualizao de estatsticas em horrio de menor utilizao do sistema. Em
particular, sempre depois de processos de expurgo ou de carga de dados aconselhvel
atualizar as estatsticas das tabelas envolvidas.

Tipos de dados Uma das principais tarefas de um DBA identificar os tipos de dados
correto para cada campo de uma tabela. importante o DBA conhecer todos os tipos de
dados disponveis e us-los corretamente nas colunas das tabelas. Projetando bem o seu banco
de dados, garantir uma boa performance, escabilidade e integridade da informao
armazenada. No SQL2008, por exemplo, varchar um tipo de dado onde se especifica o
tamanho mximo do campo e a alocao feita de forma dinmica, ou seja, os bytes s so
efetivamente utilizados medida que os caracteres so inseridos. J no tipo char, todos os
bytes do tamanho do campo so alocados independentes do tamanho da palavra que
inserida. Por exemplo, se voc define um campo varchar(100), mas insere uma palavra de 10

caracteres, somente os 10 sero alocados no banco. Se for um char(100), sempre sero


alocados 100 caracteres para o campo a cada registro inserido, independente do tamanho da
palavra. Sendo assim, usar varchar mais econmico em termos de alocao de espao
comparado ao tipo char. Isso o motivo do tipo varchar ser largamente utilizado em relao
ao char, principalmente para campos de tamanhos maiores. Isso implica tambm no
desempenho do banco de dados, j que ao carregar para a memria os registros do tipo
varchar, o volume de dados trabalhado normalmente bem menor do que seria se o campo
fosse char.

Constraints As constraints so utilizadas para assegurar integridade dos dados no banco de


dados. Se implementarmos uma integridade declarativa, utilizamos constraints e rules para
garantir a integridade. Podemos implementar constraints em uma tabela na sua criao ou
ento posteriormente, utilizando o comando de alter table. O objetivo do uso de constraints
garantir a integridade do banco de dados, e obviamente essa garantia tem um custo que
impacta no desempenho do sistema. Por outro lado, um banco de dados ntegro alivia o
desempenho do servidor de aplicao ou dos clientes, j que a aplicao no precisa realizar
diversas validaes que j so garantidas pelo banco de dados. recomendado a utilizao de
constraints, j que a integridade um dos requisitos bsicos de um banco de dados, porm o
custo de performance na utilizao de constraints pode no ser irrelevante. Deve-se avaliar
rigosamente o benefcio no desempenho ao se desabilitar uma constraint no banco de dados.
Normalizao Em sistema OLTP (Online Transaction Processing) recomendado a
normalizao das tabelas do banco de dados, mas em sistemas OLAP (On-Line Analytical
Processing) no. O processo de normalizao e desnormalizao bem projetado e controlado

podem ajudar na melhoria do desempenho do banco de dados. Analise as caractersticas da


aplicao e avalie o processo de normalizao e desnormalizao.
Instrues SQL - Quando possvel, crie instrues SQL idnticas, pois no momento da
execuo da instruo, o banco compila a mesma e a preserva em memria. Na prxima
execuo, no vai precisar compilar e definir o plano de execuo novamente. Uma tima
tcnica para fazer isso utilizar variveis nas suas instrues ao invs de colocar valores fixos
nas consultas. Sempre avalie tambm o plano de execuo da query procurando identificar
formas de reescrita otimizada do cdigo SQL e novos ndices nas tabelas envolvidas nas
querys.

Storage O SQL Server possui trs estruturas bsicas de armazenamento: Dados, ndices e
log transaction. Separ-los em storages (discos) independentes uma boa estratgia uma vez
que o SQL Server poder realizar em paralelo o processo de I/O no banco de dados quando
estiver manipulando as diferentes estruturas.

Arquitetura RAID - Defina a arquitetura RAID (conjunto redundante de discos


independentes) da storage usada para armazenar os datafiles do banco de dados. O RAID
utiliza controladoras de disco e arrays de discos para minimizar a perda de dados, em caso de
falhas da mdia, alm de fornecer melhoria de desempenho nas operaes de leitura e escrita.

TEMPDB Existe um banco de dados no SQL Server chamado TEMPDB que muito usado
pelo sistema em alguns casos como em processos de ordenao. Existem diversos cenrios de

conteno cuja causa raiz a no configurao adequada ao negcio deste banco de dados. O
melhor tamanho inicial do TEMPDB deve ser avaliado. O tamanho default 8MB e toda vez
que houver uma forte utilizao do TEMPDB, ele ir gastar tempo para alocar mais espao no
sistema operacional a fim de gravar os dados temporrios das transaes. Avalie tambm a
quantidade de datafiles para este banco de dados: a Microsoft recomenda um datafile no
TEMPDB para cada processador que existe no servidor.

Auto crescimento Assim como o TEMPDB, todos os bancos de dados do SQL Server tm
alguns parmetros de configurao. Um deles a configurao do tamanho inicial e de quanto
ele ir crescer. Ajuste corretamente estes valores para no gerar conteno no banco de dados.
Os arquivos de logs dos bancos de dados tambm devem ter estes parmetros ajustados
corretamente.

Rotinas de manuteno: Um bom DBA deve programar diversas rotinas importantes num
banco de dados como backups full, backups diferenciais, backups de logs, desfragmentao
de ndices, atualizao de estatsticas, shrink, jobs de carga e expurgo de dados, etc. Estas
tarefas consomem diferentes e significativos recursos no banco de dados. Devem ser
programadas de forma a no interferirem uma nas outras e no dia a dia do uso do banco de
dados.

Modelos de recovery - Existem trs modelos de recovery (recuperao) no SQL Server: Full,
Blk-Logged e Simple. Cada modelo de recuperao deve ser aplicado a uma necessidade

diferente de negcio e afeta o desempenho do banco de dados. Portanto, avalie configurar


corretamente o modelo de recovery de cada banco de dados da instncia SQL Server.

TOP SQLs - Procure identificar as TOP SQLs (queries consomem significativos recursos
de I/O, Memria e CPU.). Elas podem ser encontradas atravs de consultas nas dynamics
views da instncia para posterior melhorias.

Particionamento de tabelas O particionamento de tabelas permite dividir os dados em


vrias tabelas. Em tabelas grandes que possuem milhes de registros pode ser uma estratgia
eficiente de otimizao. Entender o processo e definir corretamente os critrios de
particionamento de tabelas e ndices um processo eficiente para melhorias de desempenho
no banco de dados.

Views indexadas - Views indexadas armazenam os dados em um ndice cluster. As consultas


nestas views so executadas mais rapidamente. A criao de views indexadas, tambm
chamadas de views materializadas, agiliza as consultas que envolvem vrias tabelas com
grandes quantidades de registros.

Grouping Sets Os Grouping Sets so uma extenso da clausula GROUP BY, que permitem
que os usurios definam mltiplos agrupamentos na mesma consulta. Os Grouping Sets
produzem um nico conjunto de resultados que equivalente a uma UNION ALL de linhas

agrupadas de forma diferente, tornando a consulta de agregao e relatrios mais fceis e


rpidos.

SET NOCOUNT ON - Utilize o comando SET NOCOUNT ON antes dos comandos dentro
das procedures. Esta configurao faz com que o servidor no mostre o nmero de registro
afetado pelos scripts. Isso pode evitar o trfego de rede extra afetando a performance,
principalmente se a procedure chamada com frequncia.

Auditoria de Logs - Sempre defina o nvel de auditoria de logins mais adequado ao cenrio
de negcio. Um sugesto alterar o valor default para Failed Longins Only. Isto reduz
drasticamente a necessidade gravao de dados na log da instncia

Recovery Interval - Alterar o parmetro do servidor Recovery Interval pode ser uma opo
boa em alguns cenrios. Se o seu SQL Server muito ativo, recebendo uma carga enorme de
transaes recomendado fazer o ajuste no parmetro.

Network Packet Size - Ajustar o tamanho padro de pacotes Network Packet Size enviados
na rede um ajuste fino de otimizao no banco de dados. O tamanho padro de 4096 bytes
para cada pacote. Esta configurao pode ser alterada para um valor maior, quando a
aplicao trafega com freqncia dados com um grande nmero de bytes, como, por exemplo,
imagens e longos trechos de texto. Aumentando o nmero de bytes, temos menos pacotes
trafegando e assim o trfego na rede acelerado.

10

Processador - Se tiver mais de uma instncia num servidor, considere fazer os ajustes de
processador (CPU) que cada instncia pode usar. Isto ir evitar que uma instncia afete todas
as demais em cenrios de uso intensivo de processador.

Priority Boost - Priority Boost um parmetro que define a prioridade dos processos SQL no
servidor. Por padro o valor inicial 0, mas se alterado para 1, os processos oriundos do
SQL tero maior prioridade de execuo sobre outros processos no servidor. Avalie a
necessidade de fazer o ajuste deste parmetro.

Max Degree Of Parallelism - Max Degree Of Parallelism um parmetro para definir o grau
de paralelismo das queries SQL. O default 0 e significa que o paralelismo est ativado e
pode usar as CPUs existentes no servidor. Se alterado para 1 o paralelismo desativado
para todas as CPUs. Avalie a necessidade de fazer o ajuste deste parmetro.

Parmetros de memria Existem alguns parmetros para ajustes de memria para uma
instncia SQL Server. Avalie a necessidade de se fazer o ajuste dos seguintes parmetros:

Max Server Memory: Limite superior de memria da instncia.

Min Server Memory: Limite inferior de memria da instncia.

Max worker threads: Limite superior de threads.

11

Index Create Memory: Total de memria usado em operaes de criao de ndices.

Min Memory per Query: Especifica a quantidade mnima de memria que ser alocada
para execuo de cada query.

Monitorao: Monitorar o SGBD uma tima estratgia para identificar o problema antes do
mesmo ocorrer (pr-atividade). Existem diversas ferramentas no SQL Server para
monitorao do desempenho do BD como SQL profiler, performance Studio, performance
monitor, tuning advisor, activity monitor e Dynamic Management Views (DMV). Use-as
periodicamente procurando pelas queries SQL que mais consomem recursos de I/O, Memria
e CPU.

Monitore locks: Particularmente, locks (bloqueios) gerados por queries SQL podem causar
contenes significativas no banco de dados. Monitore, atravs do utilitrio perfmom, por
exemplo, o indicador Locks: Avarage Wait Time (ms). Este indicador mostra quanto tempo
em milissegundos um processo esta aguardando para obter lock no SQL Server. O valor ideal
para este contador 0. Se este valor estiver muito alto, utilize ferramentas como o Profile
para identificar quais processos esto mantendo locks por um perodo longo de tempo.

Plano de Capacidade - Uma das responsabilidades de um DBA elaborar periodicamente o


Plano de Capacidade (Capacity Plan) do servidor de banco de dados. Este documento deve
mostrar a evoluo de consumo dos principais recursos no servidor de banco de dados como,
espao de armazenamento, utilizao de CPU, consumo de memria, taxa de I/O, banda de

12

rede e outros indicadores tcnicos que possam impactar no desempenho do banco de dados.
Com este documento pode-se acompanhar a evoluo histrica dos indicadores no servidor e
tomar aes pr-ativas que reduzam os riscos de perda de desempenho na aplicao.

3.0 CONCLUSO
Um DBA detm a responsabilidade tcnica central pelos dados da organizao. Ele deve
saber quais recursos pode ser utilizado para melhorar o desempenho das consultas de um
sistema, a segurana das informaes armazenadas, recuperao os dados perdidos em uma
data especifica, entre outros problemas no dia-a-dia.
Com as tcnicas apresentadas possvel automatizar essas obrigaes e retirar o mximo de
eficincia e eficcia. Uma administrao ruim de um SGBD pode causar vrias
conseqncias. Uma m administrao comea na fase de projeto do banco de dados. Uma
modelagem conceitual de dados mal construda pode gerar conseqncias desastrosas no
banco de dados. Baixo desempenho do banco outra conseqncia que pode ser decorrente de
uma m administrao. No entanto, importante estar atento: nem sempre o baixo
desempenho resultado de algum problema no banco de dados. Outros fatores, como
conexes ou configuraes de rede, bem como configurao de hardware, podem estar
associados ao problema. O ponto chave do problema a monitorao, que se realizada de
forma pr-ativa e preventiva pode evitar incidentes relacionados ao desempenho.

13

REFERNCIAS
BATTIST, Jlio. SQL Server 2005: Administrao & Desenvolvimento: Curso Completo.
Axcel Books, 2005, 1016p.
BLOG DA TI, Tipo de dados SQL Server 2008. Disponvel em
<http://blogdati.com.br/?p=65>
CHIGRIK, Alexander. Optimizing SQL Server Performance by using File and
Filegroups: Disponvel em:
<http://www.sqlservercentral.com/articles/Performance+Tuning/fileoptimtips/443/>
DATE, C. J. Introduo a Sistemas de Bancos de Dados. Campus, Rio de Janeiro, 2004.
DUMLER, Michelle. Microsoft SQL Server 2005: Guia do Produto. Disponvel em:
<http://download.microsoft.com/download/4/3/7/43798b24-9af7-4039-960d12361ae367cc/ProductGuide-brz.doc>
HIRT, Allan; MCBATH,Frank;TRIPP,Kimberley;COOK,Cathan;MICROSOFT CORP. SQL
Server 2000 High Availability. Mircrosoft Press,2003,800p.
LINGUAGEM DE BANCO DE DADOS, Tipo de Constraints. Disponvel em
<http://elderstroparo.blogspot.com/2010/02/tipos-de-constraints.html>
MICROSOFT, Comparao de recursos do SQL Server 2005. Disponvel em
<http://www.microsoft.com/brasil/servidores/sql/prodinfo/features/compare-features.mspx>.
MICROSOF, Tipo de dados (Transact-SQL). Disponvel em
<http://msdn.microsoft.com/pt-br/library/ms187752.aspx>
PINHEIRO, Nilton. Database Mirroring. Revista SQL Magazine, n.38, p.8-18.
SQL SERVER CONSTRAINTS, SQL Server
<http://marcelo.todoinfo.com.br/sqlserver-constraints/>

Constraints.

Disponvel

em