Escolar Documentos
Profissional Documentos
Cultura Documentos
Boas Praticas Otimizacao Artigo SQL
Boas Praticas Otimizacao Artigo SQL
RESUMO
Este trabalho apresenta algumas das formas utilizadas para o aprimoramento ou
otimização das consultas a bancos de dados utilizando o SQL Server 2005.
1. Introdução
suficientes no que diz respeito a otimização de consultas a banco de dados. Exitem vários
fatores que podem influenciar o desempenho de consultas submetidas aos SGBD`s
Esse artigo tem como objetivo descrever quais variáveis podem afetar o
Antes de abordar alguns pontos sobre a otimização das consultas a banco de dados
é necessário ter em mente que não existe uma fórmula exata para obter sucesso na
otimização de um banco de dados. Existem sim, algumas regras de boa conduta
que deverão ser seguidas para que o objetivo final seja cumprido aproximando-se ao
2. Otimização de Consultas
pequeno de consultas pode são responsáveis pela maior parte das atividades que ocorrem
em um banco de dados (Linha de Código, 2006).
É preciso lembrar que toda e qualquer consulta deve primeiro atender os requisitos
de quem a usa garantindo a disponibilidade, escalabilidade e segurança das informações
2.1 Índices
Segundo Paulo Riberio, índices são estruturas que possuem algoritmos otimizados
para acessar dados em um banco de dados. Tais estruturas constituem uma ferramenta
fazer uso dos índices, o SQL Server 2005 rapidamente localizará e disponibilizará os
dados de uma consulta através de um número de I/O muito menor. Ao não utilizar índices,
o SQL Server precisa realizar uma operação conhecida como Table Scan, para localizar os
dados solicitados. Uma operação Table Scan é uma leitura seqüencial de todos os
registros da tabela, o que implica muito mais operações de I/O no disco. As operações de
I/O em disco são normalmente bastante lentas quando comparadas com operações
coluna com valores calculados. O corpo de um índice é formado pelas colunas de uma
tabela cujos dados se deseja classificar seguido de uma referencia conhecida como
“ponteiro”, que serve para localizar a página de dados da tabela (BATTISTI, 2005).
campo onde o índice foi definido. Ao definir um clustered index, o mesmo organiza os
dados da página de acordo com sua chave. Neste caso, o índice está alterando a ordem
aleatória da tabela. Este tipo de índice é bastante rápido eficiente para agilizar as
(RIBEIRO).
operações podem fazer com que a ordem dos registros seja alterada, e que estes tenham
que ser reposicionados para manter a ordem definida pelo índice (BATTISTI, 2005).
ordem. Os registros estarão armazenados em uma ordem aleatória, porém poderão ser
facilmente localizados através do ponteiro (RIBEIRO).
em uma tabela.
de um nonclustered index, através de colunas que não são chaves, como parte do último
nível ou camada de nós da folha de dados. Esta opção poderá melhorar
O SQL Server 2005 usa a chave clusterizada na página de índice para colocar o
ponto do índice, e uma chave armazenando o local da informação. Tabelas que contém
índices cluster e índices não cluster são muito comuns. O melhor nessas situações é criar
o índice cluster primeiro (que irá organizar os dados e o índice em ordem ascendente) e
depois criar o índice não clusterizado nas colunas que forem necessárias como FK`s, ou
colunas muito acessadas. Deve-se tomar cuidado com a utilização dos dois tipos de
índices em uma única tabela. Nesse caso o SQL acaba por utilizar os dois meios de busca
Nesse caso o valor a ser procurado será exatamente igual ao valor da chave (RIBEIRO).
Nesse tipo de índice não há unicidade nos valores armazenados. Um índice não
único permite valores repetidos para a chave, porém será proporcionalmente mais efetivo
A opção fill factor determina qual a porcentagem de uma página de dados deve ser
preenchido com o índice e quanto deve ser mantido em branco, reservado para inclusões
e alterações. Por exemplo, se utilizarmos o fill factor igual a 80%, então o SQL Server irá
20% de espaço em branco em cada página de dados para poder preencher (Linha de
Código, 2006).
então a melhor coisa a se fazer é colocar o fill factor 100%, pois não há necessidade de
deixar espaço em branco nas páginas de índices, já que eles jamais serão reorganizados
(RIBEIRO).
Imagine que uma tabela tem 1.000.000 de registros e que, diariamente, 10.000
novos registros são adicionados ou modificados. Se colocado o fill factor igual a 90%,
muito provavelmente em dez dias o espaço em branco que o SQL Server reservou já foi
tomado. Nesse contexto haverá uma queda de desempenho na hora de incluir registros na
tabela. Agora, se colocado o fill factor igual a 70%, não teremos queda de performance
Quanto maior o fill factor maior será o tempo entre manutenções do índice do
banco de dados.
O fill factor ideal de um índice será aquele que causar menos fragmentação para
um determinado período de analise
Entre os vários comando DBCC existentes, alguns merecem atenção maior quando
falamos de otimização de consultas. Abaixo veremos quais são eles divididos por quatro
categorias.
DBCC DBREINDEX Reconstrói os índices de uma tabela. Muito útil para manutenção de
índices.
DBCC DBREPAIR Apaga um banco corrompido. Use DRP DATABASE ao invés de DBCC
DBREPAIR.
Fonte: PICHILIANI
DBCC PINTABLE ‘Pina’ a tabela , ou seja , faz o SQL Server não liberar da memória
ganho de performance.
DBCC UNPINTABLE Faz o SQL Server liberar da memórias algumas informações de uma
2000
DBCC TRACEON Habilita um flag de trace que é necessário para outros comandos
DBCC.
DBCC TRACEOFF Desabilita um flag de trace setado como comando DBCC TRACEON
Fonte: PICHILIANI
DBCC OPENTRAN Mostra informações sobre a transação mais velha ( mais tempo
DBCC SHOWCONTIG Mostra várias informações sobre os índices de uma tabela , inclusive
SQL Server
Fonte: PICHILIANI
reparos
erro.
compatibilidade.
Fonte: PICHILIANI
2.9 SQL Server Profiler
um servidor SQL Server. Entende-se por atividade desde uma conexão efetuada por um
comandos enviados por uma determinada instância do SQL Server e armazena-las para
testes futuros.
Surgirá uma janela perguntando qual instância do servidor SQL Server deseja-se monitorar
conforme figura 1.
Para iniciar a captura dos eventos será necessário um duplo clique no botão Run.
Na figura 1.3 pode-se ver o evento de consulta Select executado no banco de dados.
comando não estão em memória, devem ser lidas do disco para a memória. Quando você
executa um comando pela primeira vez, podem ocorrer leituras físicas. Se você executar o
mesmo comando repetidas vezes, irá notar que leituras físicas são “convertidas” em
- Read Ahead Reads: páginas lidas por antecipação. O SQL Server 2000 lê páginas
adicionais para efeito de otimização, mantendo-as em cache para agilizar sua utilização
- Scan Count: número de vezes que a tabela foi acionada. Dependendo da maneira como
escrevemos a query, o mesmo pelo modêlo de join utilizado, uma mesma tabela pode ser
acessada repetidas vezes – exemplo: uma subquery na linha do select exige um acesso
para cada linha lida na tabela principal, portanto o scan count das tabelas presentes na
subquery será igual ao número de linhas retornadas pelo select (RIBEIRO, 2006).
Server Profiler.
3.0 Conclusão
O SQL Server 2005 possui um conjunto de soluções vastas e complexas para a
retornadas no menor tempo possível para que se atinja um nível de satisfação aceitável
REFERÊNCIAS
no SQL Server.
RIBEIRO, Paulo: SQL Magazine; Otimização e Tunning – Parte 1. 2ª Edição.
http://www.sqlmagazine.com.br/Colunistas/PauloRibeiro/07_Tunning_Estatisticas_IO.asp .
http://www.imasters.com.br/artigo/255/sql_server/comandos_dbcc_no_sql_server. Acesso
em 18 Nov. 2006.