Diferenças entre os otimizadores de consulta do banco de dados

Propaganda
Curso de Engenharia de Computação
DIFERENÇAS ENTRE OS OTIMIZADORES DE CONSULTA
DO BANCO DE DADOS ORACLE
BASEADO EM REGRAS E BASEADO EM CUSTO
João Paulo Geraldini Nunes
Itatiba – São Paulo – Brasil
Dezembro de 2009
ii
Curso de Engenharia de Computação
DIFERENÇAS ENTRE OS OTIMIZADORES DE CONSULTA
DO BANCO DE DADOS ORACLE
BASEADO EM REGRAS E BASEADO EM CUSTO
João Paulo Geraldini Nunes
Monografia apresentada à disciplina, Projetos em
engenharia de computação II, do Curso de Engenharia de
Computação da Universidade São Francisco, sob a
orientação do Prof. Ms. José Aparecido Carrilho, como
exigência parcial para conclusão do curso de graduação.
Orientador: Prof. Ms. José Aparecido Carrilho
Itatiba – São Paulo – Brasil
Dezembro de 2009
iii
DIFERENÇAS ENTRE OS OTIMIZADORES DE CONSULTA
DO BANCO DE DADOS ORACLE BASEADO EM REGRAS E
BASEADO EM CUSTO
João Paulo Geraldini Nunes
Monografia defendida e aprovada em Dezembro de 2009 pela Banca
Examinadora assim constituída:
Prof. Ms. José Aparecido Carrilho (Orientador)
USF – Universidade São Francisco – Itatiba – SP.
Prof. Ms. Claudio Maximiliano Zaina
USF – Universidade São Francisco – Itatiba – SP.
Prof. Bel. Angelo Amaral
USF – Universidade São Francisco – Itatiba – SP.
O registro de arguição e defesa consta de “ATA DE ARGUIÇÃO FINAL DE
MONOGRAFIA”, devidamente assinada e arquivada na Coordenação do curso.
iv
"A mente que se abre a uma nova idéia jamais
voltará ao seu tamanho original."
(Albert Einstein)
v
Aos meus familiares e amigos que tanto contribuíram
para a minha formação.
vi
Agradecimentos
Agradeço a meu orientador José Aparecido Carrilho, aos supervisores das matérias de
Trabalho de conclusão de curso I e Projetos em engenharia de computação II, Alencar de
Melo Júnior e André Leon Sampaio Gradvohl respectivamente, a todos meus amigos e
familiares que colaboram para a elaboração dessa monografia.
vii
Sumário
Lista de Siglas ........................................................................................................................ viii
Lista de Figuras ....................................................................................................................... ix
Lista de Tabelas ........................................................................................................................ x
Resumo ..................................................................................................................................... xi
Abstract ................................................................................................................................... xii
1
Introdução .......................................................................................................................... 1
1.1 Objetivos ....................................................................................................................... 1
1.1.1 Objetivo geral ......................................................................................................... 1
1.1.2 Objetivo específico ................................................................................................. 2
1.2 Estrutura do trabalho ..................................................................................................... 2
2
Ambiente de Desenvolvimento dos Testes ....................................................................... 3
3
Planejamento de Desempenho .......................................................................................... 4
3.1 Escalabilidade................................................................................................................ 4
3.2 Componentes de Hardware ........................................................................................... 4
3.3 Componentes de Software............................................................................................. 5
3.4 Princípios de Projeto de Aplicações .............................................................................. 5
3.5 Plano de Execução ........................................................................................................ 6
4
Otimizadores ...................................................................................................................... 8
4.1 Vantagens da otimização ............................................................................................... 8
4.2 Otimizadores baseados em regras (RBO) ..................................................................... 9
4.2.1 Porque entender o RBO .......................................................................................... 9
4.2.2 Regras Internas ....................................................................................................... 9
4.3 Otimizadores baseados em custo (CBO) ..................................................................... 10
4.3.1 Estatísticas ............................................................................................................ 10
4.3.2 Recolhendo estatísticas ......................................................................................... 11
4.4 Sugestões ..................................................................................................................... 11
4.5 Comparação dos otimizadores .................................................................................... 11
4.5.1 Configuração das bases de dados ......................................................................... 12
4.5.2 Metodologia de comparação ................................................................................. 12
4.5.3 Consultas realizadas ............................................................................................. 12
5
Conclusão .......................................................................................................................... 23
5.1 Trabalhos futuros......................................................................................................... 23
Referências Bibliográficas ..................................................................................................... 24
viii
Lista de Siglas
CBO
Cost-Based Optimizer
CPU
Central Processing Unit
E/S
Entrada e saída
RBO
Rule-Based Optimizer
SEQUEL
Structure Query Language
SQL
Structure Query Language
ix
Lista de Figuras
Figura 3.1 - Visualização de uma consulta e seu plano de execução no Oracle. ....................... 6
Figura 3.2 – Redução no consumo de CPU na realização de uma consulta repetidas vezes. .... 7
Figura 4.1 – Processamento de consulta SQL. Fonte: Oracle9i Database Performance Tuning
Guide and Reference. Release 2 (9.2) ........................................................................................ 8
Figura 4.2 - Exemplo de uso de HINT. ..................................................................................... 11
Figura 4.3 - Comando SQL para alterar o método de otimização. ........................................... 12
Figura 4.4 - Consultando o otimizador da base de dados CBO. ............................................... 12
Figura 4.5 - Consulta 1 realizada para testes de desempenho. ................................................. 13
Figura 4.6 - Resposta obtida na primeira vez que a consulta 1 foi realizada na base RBO. .... 13
Figura 4.7 - Resposta obtida na vigésima vez que a consulta 1 foi realizada na base RBO. ... 14
Figura 4.8 - Resposta obtida na primeira vez que a consulta 1 foi realizada na base CBO. .... 14
Figura 4.9 - Resposta obtida na vigésima vez que a consulta 1 foi realizada na base CBO. ... 14
Figura 4.10 - Consulta 2 realizada para testes de desempenho. ............................................... 15
Figura 4.11 - Resposta obtida na primeira vez que a consulta 2 foi realizada na base RBO. .. 15
Figura 4.12 - Resposta obtida na vigésima vez que a consulta 2 foi realizada na base RBO. . 16
Figura 4.13 - Resposta obtida na primeira vez que a consulta 2 foi realizada na base CBO. .. 16
Figura 4.14 - Resposta obtida na vigésima vez que a consulta 2 foi realizada na base CBO. . 17
Figura 4.15 – Gráfico referente à consulta A ........................................................................... 19
Figura 4.16 – Gráfico referente à consulta B ........................................................................... 19
Figura 4.17 – Gráfico referente à consulta C ........................................................................... 20
Figura 4.18 – Consulta realizada na base RBO. ....................................................................... 20
Figura 4.19 - Gráfico referente às consulta para testes do uso de hints ................................... 21
Figura 4.20 – Plano de execução da consulta na base CBO. .................................................... 21
Figura 4.21 – Plano de execução da consulta na base RBO com o uso de hints. ..................... 22
Figura 4.22 – Plano de execução da consulta na base RBO sem o uso de hints. ..................... 22
x
Lista de Tabelas
Tabela 4.1 - Tempos de resposta para consulta 3. .................................................................... 17
Tabela 4.2 – Consultas realizadas............................................................................................. 18
Tabela 4.3 - Tempos de resposta para as consultas A, B e C nos 2 otimizadores. ................... 18
Tabela 4.4 – Tempos de respostas para a consulta no RBO com o uso de hints e no CBO. .... 20
xi
Resumo
Esse trabalho aborda as diferenças entre os otimizadores de consulta disponíveis no
banco de dados Oracle 11g. O trabalho descreve o planejamento de desempenho da Oracle®,
mostrando alguns dos principais pontos a serem observados para que seja possível o
entendimento do ajustamento (tuning) por parte do usuário. O trabalho explica o
funcionamento dos otimizadores de consultas, mostrando os dois tipos de otimizadores
disponíveis: o otimizador baseado em regra e o otimizador baseado em custo, mostrando as
vantagens da otimização, as funcionalidades de cada otimizador e algumas formas para
melhorar o desempenho, tais como o uso de sugestões (hints).
Após configurar duas bases de dados idênticas, cada uma com um otimizador, foi
iniciada a fase de testes. Para esses testes foram realizadas algumas consultas repetidas vezes
em cada base, visando observar a melhora do desempenho a cada consulta e com isso analisar
os otimizadores mostrando possíveis formas de utilização. A partir dessas analises, foi
possível tirar as conclusões sobre cada um dos otimizadores e do uso de sugestões para o
melhoramento do desempenho.
PALAVRAS-CHAVE: Banco de dados Oracle, Desempenho, Otimizador baseado em
Regra, Otimizador baseado em Custo, SQL.
xii
Abstract
This work focuses on the differences between the query optimizers available on the
Oracle Database 11g. The work refers to the planning performance of Oracle, showing some
of the main points to be observed for possible understanding of the tuning by the User. The
work explains how the query optimizer work, showing the two types of available optimizers:
the rule based optimizer and the cost-based optimizer, showing the benefits of optimization,
the features of each optimizer, and some ways to improve performance, such as the use of
hints.
After setting up two identical databases, each one with an optimizer type, begun the
testing phase. For these tests were carried out some repeated queries in each base in order to
observe the performance improvement at each visit and with that analyzing the optimizers
showing some possible ways of use. Based on this analysis it was possible to draw
conclusions about each one of the optimizers and the use of hints for improving the
performance.
KEY WORDS: Oracle Database, Performance, Rule Based Optimizer, Cost-Based Optimizer,
SQL, Hints.
1
1 INTRODUÇÃO
Os sistemas de banco de dados relacionais necessitam de uma linguagem que seja fácil
para os usuários obterem as informações neles armazenadas e a SQL (Structured Query
Language) é a linguagem comercial mais utilizada no mercado[1]. A SQL oferece diversos
recursos além da consulta aos dados, como instruções de manipulação e definição de dados.
Inicialmente chamada de SEQUEL foi criada pela IBM® no laboratório de pesquisa de San
Jose nos anos 70 [2], desde então a SQL tem evoluído e com o mercado cada vez mais
competitivo o desempenho dos softwares precisa ser cada vez maior.
Para melhorar o desempenho nas consultas a Oracle criou os otimizadores de consulta
que determinam o caminho mais eficiente para a execução de uma instrução SQL depois de
considerar vários fatores relacionados aos objetos referenciados e as condições especificadas
na consulta [3]. Otimizadores de consulta são essenciais para realização de tuning de
aplicações em Oracle. Tuning consiste em realizar as tarefas no menor tempo possível, com o
menor processamento e com maior qualidade. Para isso é necessário a construção de um
Planejamento de Desempenho (Performance Planning) e, na maioria das vezes, as aplicações
possuem vários pontos relevantes, tais como, tipo de máquina para ser o servidor, se a
aplicação é duas camadas ou três camadas, onde acontecerá o processamento, cliente ou
servidor, quais são as regras de negócio, qual a latência na rede, se essa latência é relevante,
entre outros vários pontos a serem tratados.
Conhecer o funcionamento dos otimizadores, apesar de ser apenas uma parte do tuning, é
de grande importância e deve ser tratado com atenção para obter a otimização esperada nas
consultas. No Oracle existem dois tipos de otimizadores, o otimizador baseado em regras de
negocio (Rule Based Optimizer - RBO) e o otimizador baseado em custo (Cost-Based
Optimizer - CBO). O CBO surgiu no Oracle 7 e a partir do Oracle 10g passou a ser o único
otimizador a ter suporte, porém a Oracle manteve as funcionalidades do RBO para que não
perdesse a compatibilidade com as implementações anteriores.
1.1 Objetivos
1.1.1 Objetivo geral
Esse trabalho analisa as diferenças entre os otimizadores de consultas implementados
pelo banco de dados da Oracle, com o objetivo de mostrar as funcionalidades de cada um e a
2
importância deles no tuning de aplicação, isso para que os usuários entendam o
funcionamento dos mesmos de maneira que facilite uma possível migração ou implementação
desses otimizadores.
1.1.2 Objetivo específico
Comparar os dois otimizadores, mostrando as qualidades e os problemas de cada um,
chegando a uma conclusão de qual o melhor otimizador para cada tipo de aplicação.
1.2 Estrutura do trabalho
No Capítulo 2 é descrito o ambiente no qual foram realizados os testes dos otimizadores
de consulta, bem como as tabelas que foram utilizadas. O Capítulo 3 contém uma introdução
ao Planejamento de Desempenho e seus principais pontos para a implementação do tuning.
No Capítulo 4 são analisados os otimizadores de consulta, descrevendo suas funcionalidades,
o uso sugestões (hints) e realizando comparações entre eles. As conclusões deste trabalho são
apresentadas no Capítulo 5.
3
2 AMBIENTE DE DESENVOLVIMENTO DOS TESTES
Nesse trabalho foram estudados dois otimizadores implementados pela Oracle,
comparando o funcionamento dos mesmos através de consultas realizadas em uma base de
dados com os CEP(s), mostrando alguns pontos fortes e fracos de cada um deles.
Para o desenvolvimento do trabalho, será utilizado um computador portátil da marca
DELL modelo LATITUDE 131L com a seguinte configuração:
•
Processador AMD Turion 64 X2 Mobile 1.6GHz
•
2 GB de RAM
•
Disco Rígido de 80 GB
•
Windows XP Home Edition SP2
•
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0
As bases de dados utilizadas tanto para o RBO quanto para o CBO são exatamente
iguais, mudando apenas o otimizador utilizado nas consultas. Contendo um total de 738227
registros referentes aos CEPs do Brasil, as bases são descriminadas em 4 (quatro) tabelas:
•
ENDERECO, 699307 registros;
•
BAIRRO, 28871 registros;
•
CIDADE, 10022 registros;
•
UF, 27 registros.
4
3 PLANEJAMENTO DE DESEMPENHO
Com a evolução da Internet, os bancos de dados desempenham um papel mais importante
nos negócios em aplicações e com isso a importância no aumento do desempenho do sistema
tem crescido cada vez mais.
O desempenho deve ser projetado junto com o sistema. Quando isso não ocorre,
geralmente, tem-se como resultado problemas de contensão ou esgotamento de um ou mais
recursos do sistema[4]. Para isso é necessário observar alguns pontos importantes como,
escalabilidade, componentes de hardware, componentes de software e os princípios de design
de aplicações.
3.1 Escalabilidade
Escalabilidade é a capacidade de aumentar o trabalho dos processos com um aumento
proporcional do uso de recurso; basicamente, é a capacidade de atender ou estar preparado
para atender uma demanda crescente de trabalho. Uma escalabilidade ruim aumenta o número
de lógicas de E/S (entrada e saída) para um mesmo resultado final.
3.2 Componentes de Hardware
Os componentes de hardware podem ser divididos em quatro grupos[3].
•
Processador: pode haver um ou mais processadores, desde os sistemas mais
simples, tais como, computadores de mão e celulares, por exemplo, até servidores
de alta potência;
•
Memória: as aplicações exigem uma quantidade considerável de memória cache e
memória principal. Como esse recurso é finito, o uso otimizado da mesma é um
fator contribuinte para a otimização[5];
•
Subsistemas de E/S: o desempenho de muitas aplicações de banco de dados é,
muitas vezes, limitado pelos sistemas de E/S. Os subsistemas podem variar desde
os discos rígidos dos clientes até a alta performance dos storages dos servidores.
Podem ser executados milhares de operações E/S;
•
Rede: todos os computadores que usam o sistema devem estar conectados em uma
rede e as principais preocupações são a largura de banda e a latência.
5
3.3 Componentes de Software
Os componentes mais comuns são[3]:
•
Interface de gerenciamento: componente mais visível pelos usuários que utilizam
as aplicações;
•
Implementação de lógica de negócios: esse componente implementa o núcleo das
regras de negócio, qualquer erro pode ser muito custoso para o projeto;
•
Gerenciamento de requisição e alocação de recursos pelo usuário: as requisições
de recursos pelos usuários geralmente são tratadas pelo servidor de banco de dados
ou pelo sistema operacional. Deve-se ter um cuidado especial com esse
componente em sistemas onde o número de usuário é desconhecido ou cresce
muito rapidamente;
•
Gerenciamento de dados e transações: esse componente está em grande parte sob
responsabilidade do banco de dados e do sistema operacional.
3.4 Princípios de Projeto de Aplicações
Para um bom resultado final é necessário seguir alguns princípios no momento de fazer
o projeto. Quanto mais simples e fácil de compreender, maior é a chance de estar correto.
Estruturas, ferramentas e máquinas bem concebidas geralmente são mais viáveis e fáceis de
usar e manter.
A modelagem de dados deve ser feita cuidadosamente, de maneira que atenda as
práticas comerciais. O uso de ferramentas de modelagem pode gerar rapidamente esquemas e
definições, e é útil quando é necessário um rápido protótipo[4].
Tabelas e índices são componentes de grande responsabilidade pela flexibilidade e
desempenho do núcleo das transações. Ao criar o projeto das tabelas e índices deve-se seguir
a modelagem, além de normalizar as tabelas. As tabelas devem ser criadas observando alguns
pontos essenciais, como organização das colunas na tabela, tipos de índices utilizados, custo
do índice em uma consulta, uso de índices em série e adição de colunas em índices ou tabelas
de índices organizados.
Outra forma de simplificar o projeto de aplicação é a criação de visões. Elas podem
facilitar as coletas e armazenagem de dados. Entretanto, nem sempre é aconselhado o uso de
visões por dificultar o trabalho dos otimizadores.
Outros pontos muito importantes ainda devem ser estudados, tais como, implementação
da aplicação, as tendências no desenvolvimento da aplicação e a eficiência dos comandos
SQL a serem executados.
6
3.5 Plano de Execução
Uma forma de avaliar o planejamento de desempenho é executando um comando SQL e
observando o plano de execução por ele gerado.
A Figura 3.1 apresenta a visualização de uma consulta gerada nas tabelas de exemplo do
Oracle relacionando o primeiro nome, departamento, função, data inicial e data final de
trabalho para pessoas que trabalharam no período entre 01/01/90 e 31/12/99 inclusive e logo a
seguir exibindo o plano de execução para realizar essa consulta.
Figura 3.1 - Visualização de uma consulta e seu plano de execução no Oracle.
O plano de execução mostrado na Figura 3.1 é um recurso disponibilizado pela Oracle
para auxiliar o administrador a melhorar o desempenho das consultas criadas. Para visualizar
o plano de execução deve-se habilitar o recurso autotrace, além do plano de execução esse
recurso exibe para o usuário outros detalhes sobre a consulta realizada, como as estatísticas
sobre a consulta e o predicado da informação. Na primeira linha do programa é mostrado o
comando para se habilitar esse recurso. No plano de execução é possível observar o uso de
CPU gerado pela consulta, o tempo de execução, as etapas da consulta entre outras
informações sobre a execução do comando SQL. Como essa consulta foi gerada usando o
7
Oracle 10g utilizando otimizadores na base de custo, é possível observar na Figura 3.2 que a
mesma consulta após ser realizada algumas vezes possui um consumo de CPU bem menor,
pois o otimizador armazenou estatísticas sobre a consulta SQL.
Figura 3.2 – Redução no consumo de CPU na realização de uma consulta repetidas vezes.
8
4 OTIMIZADORES
A Oracle utiliza dois tipos de otimizadores, o otimizador baseado em regras de negócio (
Rule-Based Optimizer – RBO ) e o otimizador baseado em custo ( Cost-Based Optimizer –
CBO ).
Nesse Capítulo são descritas algumas vantagens da otimização e detalhes de cada
otimizador.
4.1 Vantagens da otimização
À medida que novos aplicativos aparecem, as reclamações sobre o desempenho
deficiente aumentam. O desempenho deve ser tratado com a mesma importância que a própria
programação, para que isso não ocorra ao escrever os aplicativos. As vantagens de uma
otimização bem sucedida podem ser a curto e longo prazo.[5]
O Oracle implementa a otimização examinando tabelas e selecionando o caminho que
custará menos para o CBO ou determina a eficiência de acordo com um conjunto de regras
internas para o RBO como mostra a Figura 4.1.
Figura 4.1 – Processamento de consulta SQL. Fonte: Oracle9i Database Performance Tuning Guide and
Reference. Release 2 (9.2)
9
Os otimizadores determinam uma maior eficiência na execução de uma consulta SQL
após considerar vários fatores relativos aos objetos referenciados e a condições especificas na
consulta [3].
4.2 Otimizadores baseados em regras (RBO)
O RBO deixou de ter suporte desde o Oracle 10g, que passou a dar suporte apenas para
o CBO. Entretanto a Oracle manteve as funcionalidades do RBO para não perder a
compatibilidade com bases de dados antigas. O RBO faz a recuperação de dados com base
nas regras internas. Ao encontrar a primeira forma aplicável, ele a utiliza e abandona o
processo sem verificar se existem outros mecanismos que podem ser aplicados de forma mais
eficiente.
4.2.1 Porque entender o RBO
Apesar de a Oracle ter deixado de dar suporte ao RBO, muitas empresas ainda mantém
suas bases de dados com esse otimizador e é necessário entende-lo para poder realizar a
manutenção ou até mesmo uma possível migração.
4.2.2 Regras Internas
Com as regras do RBO, o Oracle realiza as consultas de acordo com alguns fatores. O
Oracle classifica os caminhos de acesso com peso de 1 a 15, sendo que os melhores recebem
1 e os piores 15[5].
Uma breve explicação sobre algumas classificações[3]:
•
Classificação 1: Palavra-chave where iguala o rowid a um único valor;
•
Classificação 4: Quando todas as colunas pertencentes a uma chave exclusiva
ou primaria são referenciados pela instrução SQL em condição de igualdade;
•
Classificação 8: Se a cláusula where da instrução mencionar todas as colunas
em um índice composto, realizando comparações de igualdade;
•
Classificação 9: Quando a parte where/and usa um ou mais índices. Se
houver mais que um deve-se conectá-los com and;
•
Classificação 15: Não satisfaz nenhum dos critérios mencionados acima.
Todos os registros são lidos, passando apenas os que satisfaçam a cláusula
where.
10
4.3 Otimizadores baseados em custo (CBO)
O CBO utiliza estatísticas e histogramas para conseguir executar a consulta de uma
maneira que utilize o mínimo possível de processamento. O servidor de banco de dados
escreve o mesmo comando de diversas formas diferentes para que o comando a ser executado
seja sempre o melhor possível, consumindo o mínimo de processamento.
A grande diferença entre o RBO e o CBO é que, enquanto o RBO utiliza a primeira
forma aplicável, o CBO verifica todas as formas possíveis até encontrar a melhor. O CBO
realiza um trabalho maior antes da execução do comando, entretanto todo esse trabalho é
compensado no final com a execução que apresentará um melhor desempenho.
4.3.1 Estatísticas
É possível coletar estatísticas no Oracle sobre tabelas, colunas, índices e sistema.
Seletividade é o número de linhas que uma consulta SQL retorna satisfazendo a cláusula
WHERE do predicado[6]. A otimização baseada em custo utiliza essas informações para fazer
a seletividade dos predicados e gerar uma estimativa do custo de cada consulta SQL.
Essas estatísticas incluem os seguintes pontos:
•
Tabelas
o Número de linhas;
o Número de blocos;
o Média de comprimento da fila.
•
Colunas
o Número de valores distintos;
o Número de valores nulos;
o Distribuição de dados (histograma);
o Estatísticas de extensão.
•
Índices
o Número de blocos folha;
o Níveis;
o Fator de clusterização.
•
Sistema
o Consumo de E/S;
o Consumo de CPU.
11
As estatísticas são armazenadas em dicionários e histogramas. Essas estatísticas
podem ser atualizadas regularmente mantendo as consultas com maior precisão na
otimização.
4.3.2 Recolhendo estatísticas
A Oracle mantém as estatísticas automaticamente, mas é possível também, manter
esses dados manualmente.
Mesmo no processo automático podem-se realizar customizações para que a recolha
seja a mais adequada para cada aplicação. As estatísticas podem ser geradas de diversas
maneiras. Por exemplo, podem ser criadas em cada consulta SQL, através de procedures
criadas pelo administrador ou até mesmo manualmente com comandos passados diretamente
no console.
4.4 Sugestões
Uma possibilidade de melhoria é o uso de sugestões. Nos livros e documentos da
Oracle é possível encontrar como hints. Hints são sugestões embutidas nas instruções SQL
que modificam o caminho de acesso apenas para a instrução na qual foram declaradas [7].
Com as sugestões é possível determinar para o banco o caminho de acesso a ser usado,
como mostra o exemplo da Figura 4.2. A Hint ALL_ROWS, por exemplo, otimiza a consulta
para minimizar o tempo que leva para todas as linha serem devolvidas.
Figura 4.2 - Exemplo de uso de HINT.
Em alguns casos pode-se ter algumas informações que o otimizador não possui, por
exemplo, que um índice é mais seletivo que outro em uma determinada consulta e com o uso
de hints pode-se forçar o otimizador a escolher o caminho mais adequado[3].
Existem diversas hints, podendo ser utilizada a mais adequada a cada situação. Através
de hints é possível determinar, forma que serão retornados os dados, forma de acesso,
paralelização, etc.
4.5 Comparação dos otimizadores
Foi necessária a criação de duas bases de dados para a comparação dos otimizadores,
uma delas configurada com o CBO e a outra com o RBO. Ambas contendo exatamente os
mesmos registros, garantindo assim que a comparação seja válida.
12
4.5.1 Configuração das bases de dados
No Oracle 11g, utilizado para a realização dos testes, o CBO é configurado como
padrão, por isso, para a base de teste do otimizador por custo não foi necessária nenhuma
mudança na configuração.
Já no caso do otimizador por regra - RBO, foi preciso mudar o método de otimização
como mostra a Figura 4.3 a seguir.
Figura 4.3 - Comando SQL para alterar o método de otimização.
Como é possivel observar na Figura 4.3, também foi executado um comando select
logo após o comando alter para confirmar a mudança no modo de otimização. Observe na
Figura 4.4 o mesmo select realizado na base CBO, onde o otimizador não foi alterado.
Figura 4.4 - Consultando o otimizador da base de dados CBO.
4.5.2 Metodologia de comparação
O primeiro método de comparação será a realização de consultas. Cada consulta será
realizada vinte vezes. Com a ajuda do autotrace espera-se observar uma melhora de
desempenho a cada consulta realizada na base CBO enquanto a base RBO deverá continuar
sempre com o mesmo desempenho.
4.5.3 Consultas realizadas
Na primeira consulta foram requisitados dados sobre endereços pertencentes à cidade de
Itatiba, como mostra a Figura 4.5.
13
Figura 4.5 - Consulta 1 realizada para testes de desempenho.
As Figuras 4.6 a 4.9 apresentam os resultados obtidos pelo autotrace na primeira e na
vigésima consulta pelo CBO e pelo RBO.
Figura 4.6 - Resposta obtida na primeira vez que a consulta 1 foi realizada na base RBO.
14
Figura 4.7 - Resposta obtida na vigésima vez que a consulta 1 foi realizada na base RBO.
Figura 4.8 - Resposta obtida na primeira vez que a consulta 1 foi realizada na base CBO.
Figura 4.9 - Resposta obtida na vigésima vez que a consulta 1 foi realizada na base CBO.
A consulta realizada retorna 1514 registros. Observe na Figura 4.6 e 4.7 que as consultas
na base RBO foram praticamente iguais, na Figura 4.6 é possivel observar uma chamada
15
recursiva enquanto na outra não teve nenhuma. Essa pequena diferença ocorreu por ser a
primeira consulta realizada; da segunda até a vigésima consulta os desempenhos foram
exatamente iguais. Já na base otimizada pelo CBO, a Figura 4.8 mostra que o desempenho da
primeira consulta é muito pior que o desempenho da vigésima mostrada na Figura 4.9. Isso
porque, na primeira consulta, o CBO captura todas as informações e estatisticas sobre a
consulta e para isso faz a chamada da função de todas as formas possiveis.
Esse comportamento também é observado em outras consultas realizadas. Uma outra
consulta buscando informações sobre endereços das cidades de Jundiaí e de Valinhos
ordenadas pelo nome da cidade, do bairro e endereço também foi realizada vinte vezes em
cada base de dados. Como pode ser visto nas Figuras 4.10 a 4.14.
Figura 4.10 - Consulta 2 realizada para testes de desempenho.
Figura 4.11 - Resposta obtida na primeira vez que a consulta 2 foi realizada na base RBO.
16
Figura 4.12 - Resposta obtida na vigésima vez que a consulta 2 foi realizada na base RBO.
Figura 4.13 - Resposta obtida na primeira vez que a consulta 2 foi realizada na base CBO.
17
Figura 4.14 - Resposta obtida na vigésima vez que a consulta 2 foi realizada na base CBO.
Para a consulta 2, os resultados são os mesmos da consulta 1. O CBO armazenou as
estatisticas para as próximas consultas, fazendo com que elas obtivessem um desempenho
melhor.
Uma terceira consulta foi realizada com as mesmas caracteristicas da primeira, desta
vez para a cidade de Ribeirão Preto, também sendo realizada vinte vezes. Veja abaixo a tabela
com os tempos de cada vez que a consulta foi realizada.
Tabela 4.1 - Tempos de resposta para consulta 3.
Número da consulta
Tempo RBO (s)
Tempo CBO (s)
1
6,013
4,820
2
6,011
4,242
3
6,010
4,240
4
5,509
4,103
5
6,082
3,670
6
5,539
3,821
7
6,177
3,534
8
6,222
3,771
9
5,536
3,516
10
6,008
4,021
11
6,221
3,727
12
5,523
3,521
13
6,011
4,293
14
6,034
4,017
15
6,012
3,750
16
6,512
4,237
17
6,011
4,021
18
6,288
4,016
19
5,511
3,522
20
6,090
3,514
18
Observe na Tabela 4.1 que o tempo para as consultas na base CBO variam entre 3,514
segundos e 4,820 segundos enquanto a base RBO variou entre 5,509 segundos e 6,512
segundos. Taxa de variação de aproximadamente 1 segundo só não é maior para a base CBO
porque a base de dados já havia armazenado dados para esse padrão de consulta com a
primeira consulta realizada nos testes. Analisando os planos de execução e os tempos, é
possível observar que essa diferença de tempo entre as bases é causada pelos otimizadores,
isso porque melhorias causadas por cache por exemplo, são eliminadas uma vez que o número
de chamadas recursivas também diminui a cada consulta.
Novas consultas com utilização da cláusula INNER JOIN e sub-consultas, observando a
Tabela 4.2 veremos as três consultas realizadas e a Tabela 4.3 mostra os tempos para
processar estas consultas utilizando cada otimizador.
Tabela 4.2 – Consultas realizadas.
A
SELECT b.BAIRRO_DESCRICAO, e.ENDERECO_LOGRADOURO, e.ENDERECO_CEP
FROM BAIRRO b INNER JOIN ENDERECO e ON e.BAIRRO_CODIGO = b.BAIRRO_CODIGO
WHERE b.CIDADE_CODIGO IN (SELECT c.CIDADE_CODIGO
FROM UF u INNER JOIN CIDADE c ON c.UF_CODIGO = u.UF_CODIGO
WHERE u.UF_SIGLA='SP' AND c.CIDADE_DESCRICAO='GUARULHOS')
B
SELECT b.BAIRRO_DESCRICAO, e.ENDERECO_LOGRADOURO, e.ENDERECO_CEP
FROM ENDERECO e, BAIRRO b, CIDADE c, UF u
WHERE
e.BAIRRO_CODIGO
=
b.BAIRRO_CODIGO
AND
b.CIDADE_CODIGO
=
c.CIDADE_CODIGO
AND
c.UF_CODIGO = u.UF_CODIGO AND u.UF_SIGLA='SP' AND c.CIDADE_DESCRICAO='GUARULHOS'
C
SELECT b.BAIRRO_DESCRICAO, e.ENDERECO_LOGRADOURO, e.ENDERECO_CEP
FROM ENDERECO e INNER JOIN (BAIRRO b INNER JOIN (CIDADE c INNER JOIN UF u ON c.UF_CODIGO =
u.UF_CODIGO) ON b.CIDADE_CODIGO = c.CIDADE_CODIGO) ON e.BAIRRO_CODIGO = b.BAIRRO_CODIGO
WHERE u.UF_SIGLA='SP' AND c.CIDADE_DESCRICAO='GUARULHOS'
Tabela 4.3 - Tempos de resposta para as consultas A, B e C nos 2 otimizadores.
Nº
Consulta
A
RBO
B
CBO
RBO
C
CBO
RBO
CBO
1
5,512
3,512
4,507
2,997
4,509
3,187
2
5,184
3,120
4,500
3,252
4,507
3,004
3
5,004
3,117
5,010
3,266
4,513
2,996
4
5,009
3,088
4,499
3,212
4,753
3,012
5
5,205
3,016
4,538
3,209
4,503
3,012
6
5,003
3,037
4,525
2,999
4,598
3,017
7
5,000
3,106
4,494
2,530
4,510
3,013
8
5,227
3,182
4,720
3,002
4,499
3,017
9
5,007
3,024
5,002
2,995
4,635
3,717
10
5,002
3,149
4,496
3,213
4,502
3,014
19
Note na Tabela 4.3 a diferença de tempo nas consultas entre os otimizadores RBO e
CBO. Lembrando que no caso do CBO ele já havia armazenado informações das consultas
anteriores, por isso a diferença entre a primeira e a decima consulta é menor do que na Tabela
4.1. Observando os três gráficos a seguir, é mais fácil visualizar a diferença entre os
otimizadores.
Figura 4.15 – Gráfico referente à consulta A
Figura 4.16 – Gráfico referente à consulta B
20
Figura 4.17 – Gráfico referente à consulta C
O uso de hints pode ser muito útil quando se conhece as bases de dados. A primeira
consulta foi novamente realizada com o RBO, desta vez com o uso de sugestões. Observe que
o tempo da consulta baixou de forma que se compara com os tempos do CBO.
Tabela 4.4 – Tempos de respostas para a consulta no RBO com o uso de hints e no CBO.
RBO (sem hints)
RBO (com hints)
CBO (sem hints)
5,022
3,012
2,512
5,025
3,053
3,154
5,516
3,009
3,199
5,045
3,018
3,205
5,018
2,532
3,012
A Figura 4.18 apresenta as sugestões (hints) utilizadas na consulta.
Figura 4.18 – Consulta realizada na base RBO.
21
O gráfico dessas consultas é observado na Figura 4.19. E através dele é possível notar
que no quesito tempo, o RBO com o uso de hints se mostrou sutilmente melhor na maior parte
das consultas.
Figura 4.19 - Gráfico referente às consulta para testes do uso de hints
Observe também o plano de execução gerado pelas consultas nas Figuras 4.20 a 4.22.
Figura 4.20 – Plano de execução da consulta na base CBO.
22
Figura 4.21 – Plano de execução da consulta na base RBO com o uso de hints.
Figura 4.22 – Plano de execução da consulta na base RBO sem o uso de hints.
23
5 CONCLUSÃO
Com o estudo e os resultados obtidos nos testes realizados é possível chegar à conclusão
que o RBO é obsoleto se comparado ao CBO, e que nesse cenário se mostrou muito útil
utilizado com hints, onde a base não sofre muitas atualizações e a estrutura da base permanece
inalterada. As hints também podem ser utilizadas no CBO, o que outra sugere que o RBO é
obsoleto. Porém como muitas empresas ainda o utilizam, o seu entendimento junto com o
planejamento de desempenho faz com que manutenções ou até mesmo uma possível migração
seja ela parcial ou integral fique muito mais fácil e rápida.
O estudo do planejamento de desempenho auxilia a compreensão dos otimizadores e
obtenção de conclusões, pois na maioria das consultas foi utilizada a visualização dos planos
de execução e através deles foram observadas as principais diferenças entre os dois
otimizadores, tais como, forma de acesso (acesso total a tabela, acesso através da chave
primaria, acesso através de Hash, etc), quantidade de chamadas recursivas aos dados,
quantidades de blocos examinados, sequência de acesso, etc.
5.1 Trabalhos futuros
Como trabalhos futuros sugerem-se:
•
Realização de estudos mais aprofundados sobre tuning em banco de dados:
o mostrar as diferenças do tuning em SGBDs diferentes.
•
Análise de otimizadores de outros SGBDs:
o Estudos dos otimizadores de cada SGBD;
o Comparações entre otimizadores de diferentes SGBDs;
o Formas de otimização de cada otimizador.
•
Diferentes formas de otimização de SGBDs;
•
Realização de estudos mais detalhados sobre sugestões (hints).
24
Referências Bibliográficas
1.
SILBERSCHATZ, Abraham; CANHETTE, Claudio Cesar; KORTH, Henry F.; SUDARSHAN, S.
Sistema de Banco de Dados. 3. ed. São Paulo: Makron, 1999. 778 p. ISBN 85-346-1073-8
2.
KREINES, David C. Oracle SQL: The essential reference. Beijing: O´Reilly, 2000. 382 p. ISBN 156592-697-8
3.
GREEN, Connie D. Oracle9i Database Performance Tuning Guide and Reference. Release 2 (9.2),
October 2002. URL: http://www.oracle.com/technology/documentation/oracle9i.html. Recuperado em
25/02/2009.
4.
HOLDSWORTH, Andrew Oracle9i Database Performance Planning. Release 2 (9.2), March 2002.
URL: http://www.oracle.com/technology/documentation/oracle9i.html. Recuperado em 25/02/2009.
5.
ABBEY, Michael; COREY, Michael J.; ABRAMSON, Ian. Oracle8i: Guia Introdutório. Rio de
Janeiro: Campus, c2000. 701 p. ISBN 8535206256
6.
CHAN, Immanuel Oracle Database Performance Tuning Guide, 11g Release 1 (11.1), July 2008.
URL: http://www.oracle.com/technology/documentation/database.html. Recuperado em 27/05/2009.
7.
ARONOFF, Eyal; LONEY, Kevin; SONAWALLA, Noorali. Oracle8 advanced tuning &
administration. Berkeley, Calif.: Osborne McGraw-Hill: Oracle Press, c1998. xxii, 660 p., ill., 24 cm.
+. ISBN 0078825342.
Download