Sei sulla pagina 1di 8

Processamento e Otimização de Consultas em PostgreSQL

Daniel Flores Bastos

Universidade Luterana do Brasil (ULBRA) – Campus Santa Maria Caixa Postal 21.834 – 97020-001 – Santa Maria – RS - Brasil

Santa Maria – RS – Brasil

daniellbastos@yahoo.com.br

Abstract. This article will conduct a research on how is processed and query optimization in relational database management system (Management System Database) in particular, the PostgreSQL software for free distribution, which has gained prestige among developers looking to get the best performance SGBD robust and at the same time free license. Therefore, it is recommended to have some knowledge about the concepts of database and relational algebra.

Resumo. Este artigo realizará uma pesquisa sobre como é realizado o processamento e otimização de consultas em SGBDs (Sistema Gerenciador de Banco de Dados) em específico, o PostgreSQL um software de livre distribuição, que vem ganhando prestigio entre os desenvolvedores que buscam obter o melhor desempenho de um SGBD robusto e ao mesmo tempo de licença gratuita. Para tanto é recomendado tenha algum conhecimento sobre os conceitos de banco de dados e álgebra relacional.

Palavras-chave. PostgreSQL, otimizador de consultas, processamento de consultas.

1. Introdução

O seguinte artigo abordará conceitos de forma simples e o modo como é realizado o processamento e a otimização de consulta, onde será tratado consultas SQL utilizando banco de dados PostgreSQL.

Com a necessidade de se obter informações cada vez mais rápidas em grandes volumes de dados vem o desafio de realizar grandes operações com o menor consumo de processamento possível. Para que isso seja possível, é crucial que haja um grande conhecimento de como funciona um SGBD (Sistema Gerenciador de Banco de Dados) internamente. SGBDs de alto desempenho estão sempre ligados diretamente a um otimizador eficiente, que o auxilia nas tarefas de otimização reduzindo o esforço manual de identificar e corrigir comandos de SQL realizados de maneira incorreta. PostgreSQL por se tratar de um SGBD de grande capacidade de armazenamento e processamento, exige do seu DBA (Administrador de Banco de Dados) um grande conhecimento para que possibilite formas de se obter informações com menor consumo de processamento possível.

Serão especificados algumas características e um poucos da história do PostgreSQL, logo após serão apresentados os conceitos básicos necessários para a compreensão de como é realizado o processamento e como o otimizador de consulta realiza suas tarefas em um sistema gerenciador de banco de dados por meio de instruções SQL.

2. PostgreSQL

2.1 Histórico

Seu início se deu na Universidade de Berkeley, na Califórnia, em 1986. Um programador chamado Michael Stonebraker, na época liderou um projeto para a criação de um servidor de banco de dados relacional chamado Postgres, este projeto era oriundo de outro projeto da mesma instituição denominado Ingres. Então essa tecnologia foi adquirida pela Illustra, empresa posteriormente comprada pela Informix. Porém, mesmo diante disso, dois estudantes de Berkeley (Jolly Chen e Andrew Yu) compatibilizaram o Postgres à linguagem SQL. Este projeto recebeu o nome de Postgres95.

Dez anos depois, já em 1996, quando o projeto estava estável, o banco de dados recebeu o nome de PostgreSQL. Porém, houve várias mudanças enquanto ainda possuía o nome Postgres95. O seu código foi totalmente revisado e a linguagem SQL foi definida como padrão.

2.2 Descrição

Tecnicamente falando, o PostgreSQL é um banco de dados relacional e orientado a objetos. Uma de suas características é possuir recursos comuns em banco de dados de grande porte, o que o deixa apto a trabalhar, inclusive, com operações de missão crítica. Além disso, trata-se de um banco de dados versátil, seguro, gratuito e de código aberto (disponível sob uma licença BSD).

O PostgreSQL é otimizado para aplicações complexas, isto é, que envolvem grandes volumes de dados ou que tratam de informações críticas. Assim, para um sistema de comércio eletrônico de porte médio/alto, esse SGBD é capaz de lidar de maneira satisfatória com o volume de dados. Entre suas características, encontram-se:

Compatibilidade multi-plataforma, ou seja, pode ser executado em vários sistemas operacionais, como Windows, Mac OS X, Linux e outras variantes de Unix;

Compatibilidade com várias linguagens, entre elas, Java, PHP, Python, Ruby, e C/C++;

Base de dados de tamanho ilimitado;

Tabelas com tamanho de até 32 TB;

Quantidade de linhas de até 1.6 TB ilimitada;

Campos de até 1 GB;

Suporte a recursos como triggers, views, stored procedures, SSL, MVCC, schemas, transactions, savepoints, referential integrity e expressões regulares;

Instrução em SQL, como indica o nome;

3. Processamento de Consultas

Atualmente diversos SGBDs, assim como o PostgreSQL, utilizam diferentes técnicas para processar, otimizar e executar consultas feitas através de comandos SQL. Uma consulta deve ser examinada (scanner), analisada (parser) e validada.

O scanner identifica os componentes da linguagem no texto da consulta, enquanto o parser verifica a sintaxe da consulta para determinar se a mesma esta seguindo a sintaxe da linguagem SQL.

A consulta também será validada, através da verificação de todos os nomes de

atributos e tabelas são válidos e semanticamente significativos. Uma representação interna da consulta é criada, geralmente usando uma estrutura de árvores ou grafos, chamada de árvore de consulta ou grafo de consulta.

Depois de examinado, analisando e validado um comando SQL, o sistema tem de traduzir o comando para uma expressão equivalente da álgebra relacional e representá-la em uma estrutura de dados conhecida como árvore de consulta. Tendo convertido a representação em uma forma interna melhor, o otimizador deve então decidir como avaliar a consulta transformada representada pela forma convertida.

A seguir a Figura 1 descreve os passos do processamento de consultas de alto

nível:

Figura 1. Consulta de alto nível. 4. Otimizador de Consultas A finalidade do otimizador de

Figura 1. Consulta de alto nível.

4. Otimizador de Consultas

A finalidade do otimizador de um banco de dados é livrar os usuários de suas complexidades e das exigências necessárias para se conseguir consultas de forma eficiente. Usar técnicas para reformular consultas em outras que desempenha a mesma funcionalidade, mas com tempo de resposta menor que a consulta original é uma das principais características de um Otimizador de Consulta. O otimizador faz com que reduza o esforço manual e repetitivo de identificar e corrigir comandos de SQL realizados de maneira incorreta, causando em baixos desempenhos.

Assim que uma consulta for examinada, analisada e validada, deve então determinar uma estratégia de execução para a recuperação dos dados da consulta. O PostgreSQL usa algumas estatísticas mantidas em tabelas do sistema para direcionar o seu otimizador.

Uma consulta tipicamente possui diversas estratégias de execução, e o processo para escolher dentre elas a mais eficiente estratégia de execução é concedido ao Otimizador de Consultas. Portanto a otimização envolve:

Determinar uma expressão equivalentemente mais eficiente;

Escolha da melhor estratégia de execução para a consulta (plano de acesso).

5. Álgebra Relacional

5.1. Projeção

Geralmente indicada na literatura por π (a letra grega pi) produz um conjunto onde há um elemento para cada elemento do conjunto de entrada, sendo que a estrutura dos membros do conjunto resultante é definida nos argumentos da operação. Pode ser entendida como uma operação que filtra as colunas de uma tabela. Por operar sobre apenas um conjunto de entrada, a projeção é classificada como uma operação unária.

Ex.: π Nome_Func (funcionário)

Essa expressão produz um conjunto contendo um elemento para cada funcionário, e cada elemento contém apenas a informação referente à Nome_Func da relação funcionário original.

5.2. Seleção

Indicada por σ (a letra grega sigma) é uma operação que para um conjunto inicial fornecido como argumento, produz um subconjunto estruturalmente idêntico, mas apenas com os elementos do conjunto original que atendem a uma determinada condição (também chamada de predicado). A seleção pode ser entendida como uma operação que filtra as linhas de uma tabela, e é também uma operação unária, já que opera sobre um único conjunto de dados.

Ex.: σ Sexo = ‘M’ (funcionário)

Produz o conjunto dos elementos de funcionário que atendem ao predicado [Sexo = ‘M’], ou seja, representa um subconjunto dos funcionários para o qual essa condição é avaliada como verdadeira.

5.3. Produto cartesiano

A notação geralmente adotada (na forma ‘conjunto1 x conjunto2’) para representar essa operação binária indica bem a sua natureza: o resultado do produto cartesiano de duas tabelas é uma terceira tabela contendo todas as combinações possíveis entre os elementos das tabelas originais. Essa tabela resultante possuirá um número de colunas que é igual à soma das quantidades de colunas das duas tabelas iniciais, e um número de linhas igual ao produto do número de suas linhas. Portanto, se fizermos o produto cartesiano de uma tabela A que possua quatro colunas e dez linhas com uma tabela B onde existem três colunas e sete linhas, a tabela resultante terá 4 + 3= 7 colunas e 10*7=

70 linhas. Assim, cada linha dessa tabela corresponderá à concatenação de uma linha da primeira tabela com uma linha da segunda. O produto cartesiano não é muito usado como um fim em si mesmo, ou seja, dificilmente estaremos interessados em saber quais são todas as combinações possíveis entre as linhas de duas tabelas, pois a utilidade prática desse tipo de conhecimento é muito discutível. Entretanto, é a única forma primitiva de que dispomos para fundir informações de duas tabelas heterogêneas para posterior processamento. Nesse caso, tipicamente será necessário executar uma Seleção sobre o resultado do Produto Cartesiano, de maneira a descartar as combinações inválidas entre as linhas das tabelas originais.

5. 4. Álgebra Relacional Equivalente

Uma regra de equivalência diz que uma expressão de duas formas são equivalentes:

podemos transformar uma na outra preservando a equivalência. Manter a equivalência significa que as relações geradas pelas duas expressões têm o mesmo conjunto de atributos e contêm o mesmo conjunto de tuplas, embora seus atributos possam estar ordenados de forma diferente.

As regras de equivalência são usadas pelo otimizador para transformar expressões em outras logicamente equivalentes. O processo é caro, tanto em termos de espaço quanto de tempo. Além disso, nem sempre é necessário gerar expressões usando regras de equivalências. Se as estimativas de custo da avaliação são levadas em consideração, um otimizador pode ser capaz de evitar o exame de algumas das expressões. Nesse estágio, o otimizador pode escolher uma expressão equivalente avaliada e ainda obter o mesmo resultado.

A seguir um resumo dos operadores da álgebra relacional com é mostrado na tabela 1:

Símbolo

Operação

Sintaxe

Tipo

σ

Seleção / Restrição

σ Condição (Relação)

Primitiva

π

Projeção

π Expressões (Relação)

Primitiva

U

União

Relação1 U Relação2

Primitiva

Intersecção

Relação1 Relação2

Adicional

-

Diferença de conjuntos

Relação1 - Relação2

Primitiva

X

Produto cartesiano

Relação1 X Relação2

Primitiva

|x|

Junção

Relação1 |x| Relação2

Adicional

÷

Divisão

Relação1 ÷ Relação2

Adicional

ρ

Renomeação

ρ nome (Relação)

Primitiva

Atribuição

Variável Relação

Adicional

Tabela 1. Resumo dos Operadores da Álgebra Relacional. Fonte: Operações Relacionais e Álgebra Relacional.

6. Conclusão

Neste artigo foi apresentando como um SGBD, em específico o PostgreSQL, realiza a Otimização de Consulta, onde foi mostrado os processos de uma consulta SQL. Assim foi possível ter um melhor entendimento de como é o funcionamento de um SGBD, focando principalmente, nas tarefas de Processamento e da Otimização de Consultas realizadas internamente por um banco de dados.

Analisando o que foi apresentado neste artigo podemos concluir:

Como são os passos do processamento de uma consulta escrita na linguagem SQL. Primeiramente é examinada para identificar os componentes da linguagem de consulta no texto, após é analisado a sintaxe da consulta para determinar se a mesma esta seguindo a sintaxe da linguagem SQL e por último é validada a consulta, verificando se os nomes de atributos e tabelas são válidos e se possuem um significado semanticamente.

Após todo o processamento da consulta, a mesma é repassada ao Otimizador de Consultas, onde o mesmo é encarregado de reescrever toda a consulta utilizando técnicas para reformular a consulta em outras que visam um melhor desempenho com a mesma funcionalidade da consulta originalmente escrita. Com isso é reduzido o esforço manual de identificar e corrigir comandos SQL escrito de maneira incorreta, causando baixo desempenho.

Compreendendo estes passos que um banco de dados realiza para executar uma consulta, e tendo um entendimento sobre álgebra relacional, fica mais claro o funcionamento interno de um banco de dados.

Referências

Anderson Naidon, Daniel Bastos e Gleizer Voss. PostgreSQL ou MySQL. Disponível em: <http://www.danielbastos.eti.br/trabalhos_interdiciplinar.php>. Acesso em Setembro, 2009.

João Paulo Silva Cintra e Renato Capello. Otimização de Consultas Relacionais. Disponível em: <http://www.ic.unicamp.br/~geovane/mo410-091/ch15- Resumo.pdf>. Acesso em Outubro, 2009.

Cristiano Tonietto Galina. Processamento de Consultas. Disponível em:

<http://ctgalina.googlepages.com/ProcessamentoConsultas.ppt>. Acesso em Setembro, 2009.

Javam C. Machado. Otimização de Consultas Relacionais. Disponível em:

<http://www.lia.ufc.br/~javam/Bd_avancado/otimizacao-consulta.pdf>. Acesso em Setembro, 2009.

Ligia Flávia Antunes Batista. Processamento e otimização de consultas. Disponível em:

<http://inf.cp.cefetpr.br/ligia/material/bd2/cli-serv/otimiz_dissertacao_oracle.ppt>.

Acesso em Outubro, 2008.

Juliano

Tonezer

da

Silva.

Otimização

Algébrica.

Disponível

em:

<http://usuarios.upf.br/~tonezer/bd2/otimizacao_v.pdf >. Acesso em Outubro, 2008.

PostgreSQL:

Documentation.

Acesso em Outubro, 2008.

Disponível

em: <http://www.postgresql.org/docs>.

Walter Cruz. Disponível em: < http://artigos.waltercruz.com/postgresql/otimizador/>. Acesso em Outubro, 2008.

Carlos Eduardo Santos Pires, Rilson Oscar Nascimento, Ana Carolina Salgado. Comparativo de Desempenho entre Bancos de Dados de Código Aberto. Disponível em:

<http://www.itautec.com.br/FileExplorer/Arquivo/Empresa/Documentos/Corporativ o_%20Bancos%20de%20Dados_%20SW%20Livre.pdf>. Acesso em Outubro, 2008.

Relacional.

Disponível em: <http://www.pucrs.campus2.br/~jiani/bd/OpRelacional.pdf>.

Acesso em Outubro, 2008.

Antonio

Cesar

de

Barros

Munari.

Operações

Relacionais

Álgebra

e