microsoft sql server 2008 r2 - Blog da Newton

Propaganda
OTIMIZADOR DE CONSULTAS EM BANCO DE DADOS
ESTUDO DE CASO: MICROSOFT SQL SERVER 2008 R2
ELISA ALVINA DE MORAES ARCANJO 1
IREMAR NUNES DE LIMA 2
RESUMO: Os bancos de dados armazenam diferentes tipos de informações e são acessados constantemente de diversas formas. Uma consulta SQL quando é
solicitada ao banco de dados é tratada pelo SGBD, que, ao encontrar o melhor caminho, mostra o resultado das informações descritas no comando. A busca
pelo melhor desempenho e retorno rápido dos comandos requer o estudo de técnicas de otimização. O tratamento que o SGBD realiza na execução de consultas em busca de otimização segue por duas linhas diferenciadas: otimização heurística e otimização baseada em custos. Sendo a primeira feita por regras
e a segunda baseada em estatística. O presente trabalho tem como objetivo mostrar as duas formas de otimização de um SGBD e descrever qual a otimização
padrão utilizada pelo SQL Server 2008 R2.
PALAVRAS-CHAVE: Banco de Dados, Otimização, SQL Server 2008 R2.
1 INTRODUÇÃO
informações disponíveis que, talvez, o programador não tenha
Os bancos de dados armazenam diferentes tipos de infor-
acesso, como, por exemplo, os efeitos e quais os índices da
mações e são acessados constantemente de diversas formas,
tabela ou do banco que influenciam no comando e os planos
como, por exemplo, um acesso para consultar certos registros,
de execução já existentes. Assim, este artigo descreve, nos
solicitado por algum software ou mesmo por um DBA (Adminis-
próximos tópicos, como a otimização de consultas é tratadas
trador de Banco de Dados), ou o acesso ao banco para realizar
pelos SGBDs, descreve as técnicas de otimizações heurísticas
alguma alteração em um registro ou a inserção de novos dados.
e baseadas em custos e como funciona a otimização de con-
Seja para consultar, inserir ou alterar, dentre outros coman-
sultas no SQL Server 2008.
dos, o acesso aos dados e a resposta dos comandos deve
O restante deste trabalho está organizado da seguinte for-
ser rápido, contundente com o que está armazenado e com o
ma: na seção 2 é descrito o funcionamento dos otimizadores dos
que foi solicitado. A busca pelo melhor desempenho e retorno
SGBDs e as técnicas de otimização, como a Heurística e base-
rápido dos comandos requer o estudo do termo otimização, o
adas em Custos; na seção 3 é apresentado o funcionamento do
qual consiste, segundo TOMIO (2006), em escolher boas estra-
otimizador do SQL Server 2008 e, na seção 4 a conclusão.
tégias para o processamento de consultas ou comandos com
os objetivos de diminuir o acesso ao disco e a quantidade de
2 OTIMIZAÇÃO DE CONSULTAS DOS SGBDS
memória utilizada. Assim, para certo comando, existe um tipo
Uma consulta SQL quando é solicitada ao banco de dados
de otimização, mas a que será detalhada neste artigo é a otimi-
é tratada pelo SGBD, que ao encontrar o melhor caminho, mos-
zação de consultas SQL (Structured Query Language).
tra o resultado das informações descritas no comando. Este
Segundo BOSCATTO e DAMINELLO (2004, p. 3) “a otimi-
tratamento feito pelo SGBD, também conhecido como proces-
zação da consulta apresenta tanto um desafio como uma opor-
samento de consultas, pesquisa uma expressão equivalente ao
tunidade”, pois a otimização feita pelo programador ou por um
comando SQL com o objetivo de otimizar o tempo de execução
otimizador de banco de dados torna-se um desafio devido ao
da consulta. Para exemplificar a otimização de consultas consi-
grande número de relacionamentos existentes em um banco e
dere o seguinte comando:
a diversidade de estruturas de dados existentes no SGBD. A
SELECT c.nome
oportunidade acontece pelo simples fato de que otimizar con-
FROM clientes c, endereco e
sultas é possível e viável, seja ela como for, feita pelo progra-
WHERE c.codend = e.codend AND e.cidade=
mador humano, pelo DBA ou pelo próprio otimizador do banco.
“BELO HORIZONTE”;
Porém, diante deste contexto, pode ser que o otimizador
do banco consiga melhor desempenho ao executar uma con-
O processamento normal deste comando primeiramente
sulta do que se a otimização for feita pelo programador huma-
realizará o produto cartesiano das tabelas clientes e ende-
no (BOSCATTO, 2004 et all), pois o otimizador do banco possui
reço e depois verificará a satisfação das condições. Então,
PÓS EM REVISTA DO CENTRO UNIVERSITÁRIO NEWTON PAIVA 1/2012 - EDIÇÃO 5 - ISSN 2176 7785 l 121
somente depois do resultado gerado pelo produto cartesiano
representação interna e a mais utilizada é a árvore de sintaxe
e do tratamento das condições é que a projeção da coluna
abstrata ou árvore de consulta (figura 1). Esta árvore repre-
nome da tabela clientes será feita. Este processamento ain-
senta a consulta na linguagem de consulta de sistema. Ou
da não é o mais rápido. Utilizando as técnicas de otimização
seja, o comando é separado em blocos e níveis para que o
dos SGBDs, o processamento seria feito da seguinte forma:
SGBD avalie qual o melhor caminho da árvore a ser percorri-
primeiramente as condições WHERE seriam validadas e dos
do. Considere o comando a seguir e verifique a montagem de
resultados obtidos, a coluna nome seria projetada.
sua árvore de consulta:
Conforme descrito por TOMIO (2006), em geral os passos
seguidos por um otimizador de consultas são:
SELECT cliente.nome FROM cliente, categoria WHERE categoria.nome = “VIP” AND cliente.codcat = categoria.codcat
- Representação interna: a consulta é transformada numa
A árvore da figura 01 representa como um SGBD inter-
10) AND (cliente.nome OR cliente.idade < 30). Assim, diante
preta uma consulta SQL. No primeiro nível da árvore estão os
das diferentes formas, o SGBD deve escolher a melhor ex-
campos que deverão ser retornados pela consulta; no segun-
pressão e eliminar as demais do processo de execução de
do nível, realiza-se o produto cartesiano de categoria e cliente
uma consulta SQL.
de acordo com a condição especificada (a chave estrangeira
Medição de custo: as expressões são consideradas
codcat de cliente deve ser igual à chave primária codcat de
como uma série de operações e para cada operação o SGBD
categoria). No terceiro nível é realizada a filtragem das cate-
avalia os procedimentos necessários para a implementação
gorias que possuem o nome VIP. Sempre ao final da árvore,
da operação e assim, calcula qual o custo da operação;
nas pontas, também chamadas de folhas, encontramos as
tabelas selecionadas no comando.
Expressão equivalente: a representação interna é convertida para uma expressão equivalente com o intuito de re-
Informações do catálogo do sistema: o SGBD verifica as
informações referentes ao estado do banco de dados, como
por exemplo, os índices referentes à consulta inicial, as tabelas relacionadas e suas cardinalidades.
presentar, de maneira mais eficiente, a consulta original. Ou
Planos de consulta: com as informações do catálogo e a
seja, um mesmo comando pode ser representado de diferen-
medição dos custos, o otimizador gera os planos de consulta
tes maneiras, mas gerará o mesmo resultado. Porém, cabe
e em seguida, escolhe o melhor entre eles, ou seja, o de me-
ao SGBD escolher a expressão que melhor representa e que
lhor desempenho (menor custo).
tenha a melhor performance do que o comando original. Por
O tratamento que o SGBD realiza na execução de consul-
exemplo, a condição WHERE cliente.nome = “JOAO” OR
tas em busca de otimização pode ser feito de duas maneiras:
(cliente.idade > 10 AND cliente.idade < 30) também pode
otimização heurística e otimização baseada em custos. Estas
ser descrita como WHERE (cliente.nome OR cliente.idade >
técnicas serão descritas nos próximos tópicos.
122 | PÓS EM REVISTA DO CENTRO UNIVERSITÁRIO NEWTON PAIVA 1/2012 - EDIÇÃO 5 - ISSN 2176 7785
2.1 OTIMIZAÇÃO HEURÍSTICA
muitas tabelas e os relacionamentos forem descritos na forma
Na otimização heurística, segundo TOMIO (2006), algumas
regras são aplicadas para melhorar o desempenho da execução
e da transformação das consultas em diversas expressões equivalentes. As regras são:
de produto cartesiano, mesmo seguindo as regras, a otimização
heurística gerará um resultado, talvez, mais demorado.
A otimização baseada em custos depende de atualizações
periódicas de índices, tuplas, cardinalidade das tabelas e cha-
Executar operações de SELEÇÃO e PROJEÇÃO primeiramente;
ves, e isto necessita de um tratamento por parte de um DBA ou
um desenvolvedor, que devem criar funções que façam tal atu-
A JUNÇÃO só deve ser realizada depois da SELEÇÃO e
PROJEÇÃO;
alização ou eles mesmos façam tal tratamento. Se estes dados
não estiverem de acordo com a realidade do banco podem ge-
Somente os atributos solicitados para o resultado da con-
rar resultados que não sejam os melhores. Porém, se as funções
sulta e os que realmente são necessários em consultas subse-
que armazenam as informações dos índices, chaves, tuplas e
qüentes é que devem ser projetados;
cardinalidade estão atualizadas, a otimização em custos se tor-
Evitar geração de múltiplas tabelas intermediárias;
na bastante vantajosa, uma vez que sua prioridade é eliminação
Pesquisar as subexpressões comuns e processá-las so-
de custos, garantindo ótima performance e resultados rápidos.
mente uma vez;
A utilização dessas regras heurísticas influencia no plano de
3 O OTIMIZADOR DE CONSULTAS DO SQL SERVER 2008 R2
execução da consulta, pois uma ordem de execução das ope-
Conforme o site da MSDN (Microsoft Developer Network)
rações é determinada e também quais os recursos serão utiliza-
ao executar um comando SELECT em um banco de dados,
dos no plano, por exemplo, os índices.
o comando não informa qual o caminho o banco deve seguir
para gerar o resultado no menor tempo e performance possível.
2.2 OTIMIZAÇÃO BASEADA EM CUSTOS
Assim, todo SGBD possui em sua estrutura um otimizador de
A otimização baseada em custos é gerada a partir de fun-
consulta que é responsável por avaliar a instrução a partir do
ções estatísticas dos SGBDs. Estas funções armazenam infor-
comando, do esquema e das estatísticas do banco gerando o
mações referentes ao número de tuplas, aos índices, as chaves
melhor plano de execução.
e a cardinalidade das tabelas. As estatísticas da distribuição dos
O SQL Server 2008 R2 possui em sua estrutura um otimiza-
dados nas colunas das tabelas e que são usadas para estimar
dor de consultas que é baseado em custos. Ou seja, cada plano
os custos, também consideram o uso de CPU e I/O e o tamanho
de execução possui um custo referente aos recursos que utiliza,
das tabelas utilizadas.
como CPU e I/O, e o otimizador é responsável por analisar e
Porém, como este tipo de otimização é baseado em estatísticas e pode gerar um resultado que talvez não seja o melhor.
Isto acontece devido ao SGBD utilizar informações armazenadas que talvez estejam desatualizadas. Assim, é necessário que
as funções que armazenam as informações das tuplas, índices,
chaves e cardinalidade sejam atualizadas periodicamente. Não
escolher o plano mais eficiente, de menor custo e que retorne o
resultado da forma mais rápida.
O processamento de uma consulta no SQL Server 2008 R2,
segundo o site MSDN, segue alguns passos:
Análise do comando SELECT e separação do mesmo em
palavras-chave, expressões, operadores e identificadores.
é viável realizar a atualização todas as vezes que acontece al-
Criação da árvore de consulta do comando.
guma alteração no banco, pois isto implica em alto custo, mas
Análise dos diferentes modos de percorrer a árvore em
atualizando periodicamente, o SGBD manterá valores próximos
busca melhor resultado esperado pelo comando original. Neste
aos reais.
passo, a cada análise, a árvore de consulta é atualizada e sua
versão final é chamada de plano de execução.
2.3 A ESCOLHA DO SGBD
Execução do plano de consulta.
Os SGBDs que optam pela otimização heurística, estão em
Retorno dos resultados ao usuário.
busca de um resultado bem mais confiável do que o resultado
Assim, o otimizador do SQL Server 2008 R2 utiliza a otimi-
da otimização baseada em custos, pois a otimização heurística
zação baseada em custos. Ele realiza otimização em tabelas lo-
segue um padrão de avaliação e execução de uma consulta e
cais, particionadas, distribuídas e em diversos servidores, mas
este padrão ajuda no desempenho e resultado das informações
os passos descritos anteriormente para otimizar uma consulta
do comando original, enquanto que a otimização em custos é
são os mesmos realizados indiferente da arquitetura do banco
baseada em estatísticas. Mas, se a consulta fizer referência a
e das tabelas.
PÓS EM REVISTA DO CENTRO UNIVERSITÁRIO NEWTON PAIVA 1/2012 - EDIÇÃO 5 - ISSN 2176 7785 l 123
4 CONCLUSÃO
Uma consulta quando é solicitada a um banco de dados
não especifica qual a ordem e as etapas de sua execução. Tal
tarefa é de responsabilidade do otimizador de consulta, existente em todo SGBD.
Existem dois tipos de otimização de consulta: heurística e
baseada em custos. A heurística possui passos a seguir para
gerar um plano de execução eficiente, como, por exemplo, SE-
CALUMBY, Rodrigo Tripodi. Otimização Heurística de Consultas. Universidade Estadual de Campinas, 2010. Disponível em: http://www.
ic.unicamp.br/~tripodi/mc526/slides/aula12-otimizacao_de_consultas_
heuristica.pdf. Acesso em: 27 de Maio de 2011.
MSDN – Microsoft Developer Network. Processamento de instruções
SQL – SQL Server 2008 R2. Disponível em: http://msdn.microsoft.com/
pt-br/library/ms190623.aspx. Acesso em: 07 de Junho de 2011.
LEÇÃO e PROJEÇÃO são os primeiros passos desta otimização. A otimização baseada em custos baseia-se em estatísticas
NOTAS DE RODAPÉ
geradas a partir de funções que armazenam informações so-
1 Especialista em Banco de Dados e Business Intelligence (elisaarcanjo@
hotmail.com).
bre índices e chaves, cardinalidade das tabelas e as tuplas do
banco para gerar o plano de execução que gere menor custo e
resultado mais rápido.
O SQL Server 2008 R2 utiliza em seu otimizador a otimiza-
2 DBA, mestre em informática e professor do Centro Universitário Newton
Paiva ([email protected]).
ção baseada em custos e também possui seus próprios passos
na execução de um comando SELECT.
Assim, todo SGBD possui em sua estrutura um otimizador
de consultas, mas cada banco de dados pode escolher qual
estratégia de otimização: heurística ou baseada em custos.
REFERÊNCIAS BIBLIOGRÁFICAS
BOSCATTO, Ronaldo; DAMINELLO, Marcelo Rosalem. Otimização de
Consultas SQL. Instituto Municipal de Ensino Superior de São Caetano
do Sul, 2004. Acesso em 27 de Nov. de 2010.
NOBRE, Wendell. Otimização de Consultas em Banco de Dados
Centralizados. Disponível em: http://docs.google.com/
viewer?a=v&q=cache:4oBqBvQGb-0J:labdist.dimap.ufrn.br/files/3Ma.
ppt+otimizador+de+consultas+sgbd Acesso em: 22 de Nov. de 2010.
Otimização do Desempenho com o SQL Server 2008. Disponível em:
http://fabadas.wordpress.com/dba-banco-de-dados/sql-server/otimizacao-do-desempenho-com-o-sql-server-2008/. Acesso em: 22 de Nov.
de 2010.
TOMIO, Thiago; CAIO, Renato; TSUYOSHI, Arlindo. Banco de Dados
– Álgebra Relacional, Processamento e Otimização de Consultas.
Faculdade de Tecnologia de São Paulo – FATEC-SP, 2006. Disponível
em:http://www.shammas.eng.br/acad/sitesalunos0606/to/otimi.htm.
Acesso em: 22 em Nov. de 2010.
Processamento e Otimização de Consultas. Disponível em: http://homepages.dcc.ufmg.br/~laender/material/ibd-parte7.pdf. Acesso em: 04 de
Maio de 2011.
MACHADO, Javam C.. Otimização de Consultas Relacionais. Universidade Federal do Ceará, 1998. Disponível em: http://www.lia.ufc.
br/~javam/Bd_avancado/otimizacao-consulta.pdf. Acesso em: 05 de
Maio de 2011.
124 | PÓS EM REVISTA DO CENTRO UNIVERSITÁRIO NEWTON PAIVA 1/2012 - EDIÇÃO 5 - ISSN 2176 7785
Download