Sunteți pe pagina 1din 11

Boas Prticas para Otimizao de Consultas a Bancos de Dados usando SQL Server 2005

LEONARDO FERREIRA SOARES* leo.fsoares@gmail.com IREMAR NUNES DE LIMA** iremar.prof@newtonpaiva.br RESUMO Este trabalho apresenta algumas das formas utilizadas para o aprimoramento ou otimizao das consultas a bancos de dados utilizando o SQL Server 2005. Palavras-chave: Banco de Dados. Otimizao

*Graduando em Tecnologia em Informtica pelo Unicentro Newton Paiva **Professor/Orientador - Unicentro Newton Paiva 1. Introduo Em meio a um mercado extremamente competitivo as empresas vem cada vez mais apostando em sistemas informatizados que dem apoio melhoria de seus processos. Dentro desse contexto os Sistemas Gerenciados de Bancos de Dados (SGBD`s) vem com o intuito de armazenar e gerenciar as informaes garantindo sua disponibilidade de forma rpida e eficaz. Mas, em geral, SGBD`s no so ferramentas auto suficientes no que diz respeito a otimizao de consultas a banco de dados. Exitem vrios fatores que podem influenciar o desempenho de consultas submetidas aos SGBD`s Esse artigo tem como objetivo descrever quais variveis podem afetar o desempenho de consultas a bancos de dados utilizando o Microsoft SQL Server 2005. Antes de abordar alguns pontos sobre a otimizao das consultas a banco de dados necessrio ter em mente que no existe uma frmula exata para obter sucesso na

otimizao de um banco de dados. Existem sim, algumas regras de boa conduta que devero ser seguidas para que o objetivo final seja cumprido aproximando-se ao mximo do que se pode chamar de um banco de dados otimizado. Sero tratados assuntos como indexao de tabelas, fator de preenchimento (fillfactor) e anlise do plano de execuo de consultas SQL.

2. Otimizao de Consultas

A metodologia para a otimizao de um banco de dados envolve identificar as consultas que consomem mais recursos, e ento otimiz-las. Em geral, um nmero pequeno de consultas pode so responsveis pela maior parte das atividades que ocorrem em um banco de dados (Linha de Cdigo, 2006). preciso lembrar que toda e qualquer consulta deve primeiro atender os requisitos de quem a usa garantindo a disponibilidade, escalabilidade e segurana das informaes (Linha de Cdigo, 2006). A seguir ser mostrado algumas ferramentas importantes que ajudam na otimizao das consultas.

2.1 ndices Segundo Paulo Riberio, ndices so estruturas que possuem algoritmos otimizados para acessar dados em um banco de dados. Tais estruturas constituem uma ferramenta poderosa para o projetista do Banco de Dados no intuito de auxili-lo na melhora do desempenho das consultas. O principal papel de um ndice reduzir o nmero de operaes de I/O (leitura e escrita) necessrios para localizar os dados solicitados por uma consulta. Sendo assim, ao fazer uso dos ndices, o SQL Server 2005 rapidamente localizar e disponibilizar os dados de uma consulta atravs de um nmero de I/O muito menor. Ao no utilizar ndices, o SQL Server precisa realizar uma operao conhecida como Table Scan, para localizar os dados solicitados. Uma operao Table Scan uma leitura seqencial de todos os registros da tabela, o que implica muito mais operaes de I/O no disco. As operaes de

I/O em disco so normalmente bastante lentas quando comparadas com operaes de leitura e escrita em memria (BATTISTI, 2005). Os ndices podem ser criados em qualquer coluna da tabela, inclusive em uma 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 pgina de dados da tabela (BATTISTI, 2005).

2.2 Index Clustered Um clustered index armazena os dados ordenados de acordo com os valores do campo onde o ndice foi definido. Ao definir um clustered index, o mesmo organiza os dados da pgina de acordo com sua chave. Neste caso, o ndice est alterando a ordem aleatria da tabela. Este tipo de ndice bastante rpido eficiente para agilizar as operaes de localizao de registros. Somente podemos ter um clustered index por tabela, pois s poderemos armazenar os dados em ordem de um determinado critrio (RIBEIRO). Embora o ndice melhore o desempenho das consultas, existe um pequeno overhead para operaes de atualizao, insero e excluso de registro, pois estas operaes 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).

2.3 Non-Clutered Index Ao se criar um ndice no-cluster cria-se na verdade uma estrutura que, atravs de ponteiros, ligar a linha do ndice correspondente pgina da tabela sem alterar sua ordem. Os registros estaro armazenados em uma ordem aleatria, porm podero ser facilmente localizados atravs do ponteiro (RIBEIRO). A utilizao desse tipo de ndice indicada quando os dados podem ser pesquisados por diferentes critrios, uma vez que podemos criar vrios nonclustered index em uma tabela. Uma novidade do SQL Server 2005 a possibilidade de ampliar a funcionalidade de um nonclustered index, atravs de colunas que no so chaves, como parte do ltimo

nvel ou camada de ns da folha de dados. Esta opo poder melhorar consideravelmente o desempenho das consultas (BATTISTI, 2005). O SQL Server 2005 usa a chave clusterizada na pgina de ndice para colocar o ponto do ndice, e uma chave armazenando o local da informao. Tabelas que contm ndices cluster e ndices no cluster so muito comuns. O melhor nessas situaes criar o ndice cluster primeiro (que ir organizar os dados e o ndice em ordem ascendente) e depois criar o ndice no clusterizado nas colunas que forem necessrias como FK`s, ou colunas muito acessadas. Deve-se tomar cuidado com a utilizao dos dois tipos de ndices em uma nica tabela. Nesse caso o SQL acaba por utilizar os dois meios de busca gerando um I/O muito grande.

2.4 Index Keys Index Keys so as colunas utilizadas para a definio de um ndice. A chave do ndice um valor que permite que o registro correspondente seja facilmente localizado. Nesse caso o valor a ser procurado ser exatamente igual ao valor da chave (RIBEIRO).

2.5 Index Uniqueness Nesse tipo de ndice no h unicidade nos valores armazenados. Um ndice no nico permite valores repetidos para a chave, porm ser proporcionalmente mais efetivo quanto mais variarem os valores para o campo (RIBEIRO).

2.6 FILL FACTOR A opo fill factor determina qual a porcentagem de uma pgina de dados deve ser preenchido com o ndice e quanto deve ser mantido em branco, reservado para incluses e alteraes. Por exemplo, se utilizarmos o fill factor igual a 80%, ento o SQL Server ir apenas preencher 80% de cada pgina com os ndices. Se alterarmos ou incluirmos dados, o SQL consegue reorganizar os ndices de uma maneira mais rpida, pois ele tem 20% de espao em branco em cada pgina de dados para poder preencher (Linha de Cdigo, 2006). A deciso de usar ou no fill factor depende do nmero de incluses e alteraes

que se espera receber em uma tabela. Se o banco for utilizado somente para consulta, ento a melhor coisa a se fazer colocar o fill factor 100%, pois no h necessidade de deixar espao em branco nas pginas de ndices, j que eles jamais sero reorganizados (RIBEIRO). Imagine que uma tabela tem 1.000.000 de registros e que, diariamente, 10.000 novos registros so adicionados ou modificados. Se colocado o fill factor igual a 90%, muito provavelmente em dez dias o espao 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%, no teremos queda de performance durante um ms (Linha de Cdigo, 2006). Quanto maior o fill factor maior ser o tempo entre manutenes do ndice do banco de dados. O fill factor ideal de um ndice ser aquele que causar menos fragmentao para um determinado perodo de analise

2.8 DBCC Database Consistency Cheker No SQL Server 2005, atravs da linguagem transacional, temos uma srie de comando que podem ser de grande utilidade na manuteno de tabelas e ndices. Entre os vrios comando DBCC existentes, alguns merecem ateno maior quando falamos de otimizao de consultas. Abaixo veremos quais so eles divididos por quatro categorias.

2.8.1 Comandos de Manuteno Comandos para manuteno preventiva ou corretiva no banco de dados:
DBCC DBREINDEX Reconstri os ndices de uma tabela. Muito til para manuteno de ndices. DBCC DBREPAIR Apaga um banco corrompido. Use DRP DATABASE ao invs de DBCC DBREPAIR. DBCC Desfragmenta um ou mais ndices de uma tabela. Melhora a

INDEXDEFRAG

performance do ndice.

Fonte: PICHILIANI 2.8.2 Comandos Gerais Possuem diversas funcionalidades, como alocao de tabela na memria, ajuda sobre outros comandos DBCC e pinagem de tabela:
DBCC HELP DBCC PINTABLE Retorna a sintaxe de algum outro comando DBCC Pina a tabela , ou seja , faz o SQL Server no liberar da memria algumas informaes de uma tabela. Se utilizado com cuidado , h ganho de performance. DBCC UNPINTABLE Faz o SQL Server liberar da memrias algumas informaes de uma tabela que foi pinada como comando DBCC PINTABLE. DBCC ROWLOCK Simplesmente includa por compatibilidade. A funcionalidade que este comando proporcionava j embutida automaticamente no SQL Server 2000 DBCC TRACEON Habilita um flag de trace que necessrio para outros comandos DBCC. DBCC TRACEOFF Desabilita um flag de trace setado como comando DBCC TRACEON

Fonte: PICHILIANI 2.8.3 Comandos de Status Fazem algumas verificaes de algumas configuraes do banco de dados:
DBCC OPENTRAN Mostra informaes sobre a transao mais velha ( mais tempo executando ) em um banco de dados. DBCC SHOWCONTIG Mostra vrias informaes sobre os ndices de uma tabela , inclusive o nvel de fragmentao do ndice. DBCC SHOW_STATISTICS Mostra as informaes sobre as estatsticas de uma tabela. Estatsticas so muito importantes para a melhora de performance.

DBCC TRACESTATUS

Mostra a situao dos flags de trace que foram setados com o DBCC TRACEON. Estes traces controlam configuraes internas do SQL Server

Fonte: PICHILIANI 2.8.4. Comandos de validao Checagem de alguns objetos do banco de dados como tabelas, valores das colunas IDENTITY e constraints:
DBCC CHECKALLOC Verifica o espao para as estruturas de alocaes internas do SQL Server. Permite alguns reparos em caso de erro. DBCC CHECKCATALOG Somente checa a consistncia de algumas tabelas de sistema do SQL Server ( que compem o Database Catalog ). No faz reparos DBCC CHECKCONSTRAINTS DBCC CHECKDB Checa os relacionamentos de uma determinada constraint no banco de dados. No faz reparos. Verifica erros de alocao e de consistncia em vrios objetos do banco de dados. Pode efetuar reparos importantes em caso de erro. DBCC CHECKFILEGROUP Muito parecido com o DBCC CHECKDB , porm s faz a verificao no nvel do filegroup de um database. No faz reparos DBCC CHECKIDENT Chega e corrige , caso necessrio , valores de colunas que possuem a propriedade IDENTITY. Pode inclusive resetar o valor inicial ( seed ) da coluna que possui a propriedade IDENTITY. DBCC CHECKTABLE Checa e corrige a integridade das pginas de dados , ndices , ntext , text e image para uma tabela ou uma indexed view DBCC NEWALLOC Idntica DBCC CHECKALLOC. Foi mantida por

compatibilidade.

Fonte: PICHILIANI

2.9 SQL Server Profiler Profiler uma ferramenta que monitora a atividade de uma ou mais instncias de um servidor SQL Server. Entende-se por atividade desde uma conexo efetuada por um usurio at comandos executados atravs de uma conexo. Com a utilizao do Profiler temos a possibilidade de capturar e uma srie de comandos enviados por uma determinada instncia do SQL Server e armazena-las para testes futuros. Imaginando que uma aplicao faa uso de constantes consultas ao banco de dados, pode-se ento armazen-las e aps a criao ou reestruturao de ndices, ou definio de diferentes porcentagens de fill factor, teremos a possibilidade de fazer a analise em conjunto das alteraes realizadas facilitando a tomada de decises. captura destes comandos ou eventos d-se o nome de trace. O trace poder ser configurado de acordo com as necessidades do administrador do banco.

2.9.1 Configurando o Trace Aps a execuo da ferramenta Profiler, clicar no menu FILE NEW TRACE.

Surgir uma janela perguntando qual instncia do servidor SQL Server deseja-se monitorar conforme figura 1.

Aps a seleo do Servidor surge a janela de propriedades do trace. Nesta janela podemos definir qual o modelo de trace ser utilizado e personalizar algumas

caractersticas, conforme indicado na figura 1.2.

Para iniciar a captura dos eventos ser necessrio um duplo clique no boto Run. Na figura 1.3 pode-se ver o evento de consulta Select executado no banco de dados.

2.10 Estatisticas de I/O As estatsticas de I/O podem ser um timo indicador de desempenho no processo de criao de uma consulta. Para fazer a verificao das estatsticas de uma consulta, basta, antes da

execuo do comando transacional SQL, inserir o comando Set Statistcis IO ON. Dessa forma, aps a execuo da consulta estaro detalhadas as informaes de estatstica da mesma. Segue algumas das informaes fornecidas: - Logical Reads : informa o nmero de pginas lidas em memria. (RIBEIRO, 2006). - Physical Reads: nmero de pginas lidas em disco. Se as pginas requeridas por um comando no esto em memria, devem ser lidas do disco para a memria. Quando voc executa um comando pela primeira vez, podem ocorrer leituras fsicas. Se voc executar o mesmo comando repetidas vezes, ir notar que leituras fsicas so convertidas em leituras lgicas. As leituras fsicas desaparecem, permanecendo somente as leituras lgicas (RIBEIRO, 2006). - Read Ahead Reads: pginas lidas por antecipao. O SQL Server 2000 l pginas adicionais para efeito de otimizao, mantendo-as em cache para agilizar sua utilizao por outras queries (RIBEIRO, 2006). - Scan Count: nmero de vezes que a tabela foi acionada. Dependendo da maneira como escrevemos a query, o mesmo pelo modlo 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 nmero de linhas retornadas pelo select (RIBEIRO, 2006). Tais informaes tambm podero ser verificadas atravs da ferramenta SQL Server Profiler. 3.0 Concluso O SQL Server 2005 possui um conjunto de solues vastas e complexas para a otimizao de consultas a bancos de dados. Porm, entendendo alguns conceitos sobre criao de ndices, anlise de estatsticas, fator de preenchimento das pginas dos ndices e outros comandos ou ferramentas apresentadas ao longo do artigo, j se pode obter um grande ganho na otimizao das consultas a banco. Seja na construo ou verificao de consultas j desenvolvidas por outras

pessoas, percebe-se que, apesar de ser o objetivo central das consultas, no basta apenas obter as informaes desejadas. necessrio que as informaes sejam retornadas no menor tempo possvel para que se atinja um nvel de satisfao aceitvel com os usurios de sistemas informatizados.

REFERNCIAS

BATTISTI, Jlio SQL Server 2005: Administrao e Desenvolvimento: Curso Completo. Janeiro: Axcel Books, 2005. Linha de Cdigo: SQL Server ndices. Disponvel em http://www.linhadecodigo.com.br/artigos.asp?id_ac=619. Acesso em 02 Out. 2006. RIBEIRO, Paulo: SQL Magazine; Entendendo e utilizando ndices na otimizao de queries no SQL Server. RIBEIRO, Paulo: SQL Magazine; Otimizao e Tunning Parte 1. 2 Edio. RIBEIRO, Paulo: SQL Magazine; Otimizao e Tunning Parte 2. 2 Edio RIBEIRO, Paulo: SQL Magazine; Tuning Estatsticas de I/O. Disponvel em http://www.sqlmagazine.com.br/Colunistas/PauloRibeiro/07_Tunning_Estatisticas_IO.asp . Acesso em 18 Nov. 2006. PICHILIANI, Mauro: IMaster; Comandos DBCC no SQL Server. Disponvel em http://www.imasters.com.br/artigo/255/sql_server/comandos_dbcc_no_sql_server. Acesso em 18 Nov. 2006.

S-ar putea să vă placă și