Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo Universidade Federal de...

52
Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo http://claudiocampelo.com Universidade Federal de Campina Grande Mestrado em Ciência da Computação Disciplina Banco de Dados Multidimensionais Campina Grande – PB , Setembro de 2006

Transcript of Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo Universidade Federal de...

Page 1: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Otimização de Consultas em Data Warehouse (DW)

Cláudio E. C. Campelohttp://claudiocampelo.com

Universidade Federal de Campina GrandeMestrado em Ciência da Computação

Disciplina Banco de Dados Multidimensionais

Campina Grande – PB , Setembro de 2006

Page 2: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Roteiro

• Motivação;

• Background;

• Materialized Views;

• Query ReWrite;

• Aproximações;

Page 3: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Motivação

• Tempo de Resposta Aceitável:

Cinco Segundos!

• Grande quantidade de dados;• Urgência da Informação;• Informações de nível gerencial –

agregações;

Page 4: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Background

• Modelo Star (Estrela): existe uma tabela dominante no centro, chamada tabela de fatos, com múltiplas junções conectando-a a outras tabelas, sendo estas chamadas de tabelas de dimensão.

• Modelo Snow Flake (Floco de Neve): consiste em uma extensão do modelo Estrela onde cada uma das "pontas da estrela" passa a ser o centro de outras estrelas.– Não aconselhável;– Desnormalização (~3FN);

Page 5: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Background

• OLTP X OLAP

Page 6: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Background

• Índices BITMAP– Um vetor de bits por valor de atributo;– O tamanho do BITMAP é o número de

registros da relação indexada;– Por exemplo, dia da semana teria 7 vetores;– Podemos associar cada bit a faixas de

valores, por exemplo 0 to 20.000 reais, 20.000,01 a 35.000 reais;

Page 7: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Background

• Índices BITMAP– Vantagem: Maior facilidade para manipulação

interna de vários BITMAPs para responder uma consulta;

– Eficiente em Queries com muitos predicados;– Comando CREATE BITMAP INDEX

Page 8: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Background

• Query com Índices BITMAP

Page 9: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Materialized Views (MV)

• Pode contar agregações e junções;

• O otimizador decide se usa a MV;

• Alterações nas consultas são transparentes ao usuário/desenvolvedor -Não é necessário alterar a consulta SQL ou mesmo a aplicação;

• Aplicações e ferramentas de query ad hoc podem se beneficiar.

Page 10: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Materialized Views (MV)

• Interessante quando a quantidade de dados é bem maior que o resultado;

• Pode ser útil também quando envolve junções e projeções custosas!

Page 11: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Materialized Views (MV)

• Quais visões criar para ajudar o otimizador ?

• Como prover atualizações eficientes nas MV se os dados base mudam?

Dica: Na dúvida se seria necessário, o SQL Access Advisor (Oracle 10g) pode ajudar fazendo uma análise a partir da carga de trabalho (workload);

Page 12: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query ReWrite

• Vários tipos possíveis;• A mais óbvia e simples: Quando os textos são iguais;• É necessário aproveitar a mesma MV para várias

consultas!

Dica: O Explain Plan ajuda a descobrir, através do plano de execução da consulta, os meios de acesso que o Oracle está utilizando para acessar as tabelas do banco de dados.

A seguir, mostraremos o resultado exibido pelo Explain Plan, para todas as consultas exibidas como exemplo.

Page 13: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query ReWrite

• Transparência:

Page 14: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Nosso Exemplo

• Esquema em estrela:

Page 15: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Agregate Computation

• Exemplo 1: MV que computa a soma e o total dos preços das compras por mês, por produto;

• Observar a cláusula ENABLE QUERY REWRITE;

Page 16: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Agregate Computation

• Exemplo 1:

CREATE MATERIALIZED VIEW monthly_sales_mvENABLE QUERY REWRITEASSELECT t.month, p.product_id, SUM(ps.purchase_price) as

sum_of_sales, COUNT (ps.purchase_price) as total_sales

FROM time t, product p, purchases ps WHERE t.time_key = ps.time_key AND ps.product_id = p.product_idGROUP BY t.month, p.product_id;uto;Observar a cláusula ENABLE QUERY REWRITE;

Page 17: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Agregate Computation

• Exemplo 2: Computa a média dos preços das compras por mês, por produto;

SELECT t.month, p.product_id, AVG(ps.purchase_price) as avg_sales

FROM time t, product p, purchases ps

WHERE t.time_key = ps.time_key AND

ps.product_id = p.product_id

GROUP BY t.month, p.product_id;

Page 18: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Agregate Computation

• O otimizador pode utilizar a MV monthly_sales_mv para calcular o AVG !

• Explain Plan do Ex. 2:

Page 19: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

JoinBack

• Exemplo 3: Total de compras por mês, por categoria do produto

SELECT t.month, p.category, SUM(ps.purchase_price) as sum_of_sales

FROM time t, product p, purchases ps

WHERE t.time_key = ps.time_key AND

ps.product_id = p.product_id

GROUP BY t.month, p.category;

Page 20: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

JoinBack

• A categoria não está na MV;• A coluna product_id, chave primária de

PRODUCT, está na MV;• O otimizador faz a Junção da MV com

PRODUTO para obter a categoria;

• Explain Plan do Ex. 3:

Page 21: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query ReWrite Usando Dimensão

• Um DW típico que possui hierarquias nas dimensões;

• Por exemplo, dia → mês → ano…• Oracle permite criar objetos dimensões

com o comando CREATE DIMENSION;• Este objeto não consome espaço além

dos metadados;• Oracle assume que o DBA sabe o que

está fazendo!

Page 22: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query ReWrite Usando Dimensão

• Exemplo de Dimensão Oracle:

CREATE DIMENSION time_dimLEVEL time_key IS time.time_keyLEVEL month IS time.monthLEVEL quarter IS time.quarterLEVEL year IS time.yearHIERARCHY calendar_rollup ( time_key CHILD OF month CHILD OF

quarter CHILD OF year)ATTRIBUTE time_key determines (day_of_week, holiday)ATTRIBUTE month determines (month_name);

Page 23: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query ReWrite Usando Dimensão

• Exemplo 4: Compras por ano

SELECT t.year, p.category, SUM(ps.purchase_price) as sum_of_sales

FROM time t, product p, purchases ps

WHERE t.time_key = ps.time_key AND

ps.product_id = p.product_id

GROUP BY t.year, p.category;

Page 24: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query ReWrite Usando Dimensão

• O otimizador pode utilizar a MV monthly_sales_mv, uma vez que possui informações sobre a hierarquia;

• Utiliza ainda a técnica anterior (JoinBack) para obter os valores da coluna year a partir de month na MV;

• Explain Plando Ex. 4:

• Dica: Se o resultado do ReWrite não for o esperado, use a procedure DBMS_MVIEW .EXPLAIN_REWRITE (a partir do Oracle 9i) para ajudar a diagnosticar o problema

Page 25: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query ReWrite Usando Dimensão

• A cláusula ATTRIBUTE determina uma ralação um-para-um;

• É possível determinar day_of_week a partir de time_key.;

• Por exemplo (ver Exemplo 5), calculamos a soma das compras para "January" em cada ano.

• Ainda é possível usar a MV monthly_sales_mv !

Page 26: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query ReWrite Usando Dimensão

• Exemplo 5:

SELECT t.year, p.category, SUM(ps.purchase_price) as sum_of_sales

FROM time t, product p, purchases ps

WHERE t.time_key = ps.time_key AND

ps.product_id = p.product_id AND

t.month_name = 'January‘

• Note que no WHERE há atributos que não estão na MV!

Page 27: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query ReWrite Usando Dimensão

• Explain Plan do Ex. 5:

Page 28: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Filtered Data

• Até agora, vimos exemplos contendo uma MV com todos os dados da tabela PURCHASE;

• A partir do Oracle 9i, é possível utilizar reescrever a consulta a partir de uma MV contendo apenas um sobconjunto dos dados!

Page 29: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Filtered Data

• Nossa MV do Exemplo 1 foi modificada para conter apenas os dados de 1997 a 2002:

CREATE MATERIALIZED VIEW five_yr_monthly_sales_mvENABLE QUERY REWRITE

ASSELECT t.month, p.product_id, SUM(ps.purchase_price) as sum_of_sales, COUNT (ps.purchase_price) as total_salesFROM time t, product p, purchases psWHERE t.time_key = ps.time_key AND ps.product_id = p.product_id AND t.year between 1997 and 2002GROUP BY t.month, p.product_id;

Page 30: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Filtered Data

• Agora, o otimizador utiliza esta nova MV caso a consulta seja referente a dados nesse subconjunto, por exemplo a consulta do Exemplo 6 (soma das compras em 2000):

SELECT t.month, p.product_id, SUM(ps.purchase_price) as sum_of_sales

FROM time t, product p, purchases ps

WHERE t.time_key = ps.time_key AND

ps.product_id = p.product_id AND

t.year = 2000

GROUP BY t.month, p.product_id;

Page 31: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Filtered Data

• No Oracle 9i, se a condição da consulta não está na MV, ela não é utilizada;

• No 10g, ele fornece uma solução híbrida;

• Na consulta do Exemplo 7, deseja-se compras mensais de 2000 a 2003;

• Neste exemplo, o Oracle 10g usa a MV para os dados de 2000 a 2002;

Page 32: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Filtered Data

• Explain Plan do Ex. 6:

Page 33: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Filtered Data

• Exemplo 7: Compras mensais de 2000 a 2003

SELECT t.month, p.product_id, SUM(ps.purchase_price) as sum_of_sales

FROM time t, product p, purchases ps

WHERE t.time_key = ps.time_key AND

ps.product_id = p.product_id AND

t.year BETWEEN 2000 and 2003

Page 34: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Filtered Data

• Explain Plan do Ex. 7:

Page 35: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Stale Materialized Views

• O que acontece quando a tabela base é alterada?

• A Query ReWrite continua usando a MV?

• Depende do parâmetro QUERY_REWRITE_INTEGRITY

Page 36: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Stale Materialized Views

• Valores possíveis para QUERY_REWRITE_INTEGRITY:

– STALE_TOLERATED: Usa a MV mesmo quando a tabela base é alterada;

– TRUSTED: Assume que a MV fornecida não é “Staled”. Usado também para declarações em dimensões e constraints;

– ENFORCED (Default): Garante os mesmos resultados sempre, ou seja, não usa MV “Staled” ou Relacionamentos TRUSTED;

Page 37: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Partition Change Tracking

• Oracle9i introduziu o Partition Change Tracking (PCT);

• Sabe-se qual parte da MV corrsponde a parte alterada da tabela base;

• MV pode continua sendo usada para outras partes!

Page 38: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Partition Change Tracking

• Exemplo 8: Nossa MV foi alterada, adicionando DBMS_MVIEW.PMARKER

CREATE MATERIALIZED VIEW monthly_sales_pct_mvENABLE QUERY REWRITEASSELECT DBMS_MVIEW.PMARKER(ps.rowid) pm, t.month, p.product_id, SUM(ps.purchase_price) as sum_of_sales, COUNT (ps.purchase_price) as total_salesFROM time t, product p, purchases psWHERE t.time_key = ps.time_key AND ps.product_id = p.product_idGROUP BY DBMS_MVIEW.PMARKER(ps.rowid), t.month, p.product_id;

Page 39: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Partition Change Tracking

• Com a tabela PURCHASES particionada pelo time_key, ao adicionar uma nova partição para Abril de 2003, não afetará a consulta do Exemplo 9 (para março de 2002):

SELECT t.month, p.product_id, SUM(ps.purchase_price)FROM time t, product p, purchases psWHERE t.time_key = ps.time_key AND ps.product_id = p.product_id AND ps.time_key >= TO_DATE('01-03-2002', 'DD-MM-YYYY') AND

ps.time_key < TO_DATE('01-04-2002', 'DD-MM-YYYY') GROUP BY t.month, p.product_id;

• Oracle 10g adiciona soluções híbridas para esta abordagem!

Page 40: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Partition Change Tracking

• Explain Plan do Ex. 9:

Page 41: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query Rewrite com várias MVs

• Soluções híbridas do Oracle fazem uso não apenas de MV + Tabela Base, mas também de várias MV;

• Exemplo: Suponha que temos diversas MVs monthly_sales_1990-1994, monthly_sales_1995_to_2000, monthly_sales_2001_to_2005, etc.

Page 42: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query Rewrite com várias MVs

• Exemplo 10: Usa-se as 3 MVs

SELECT t.month, p.product_id, SUM(ps.purchase_price) as sum_of_sales,

FROM time t, product p, purchases psWHERE t.time_key = ps.time_key AND ps.product_id = p.product_id AND t.year between 1993 and 2003GROUP BY t.month, p.product_id;

Page 43: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query Rewrite com várias MVs

• Explain Plan do Ex. 10:

Page 44: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query Rewrite com várias MVs

• Exemplo 11: Usa-se monthly_sales_1990_to_1994 e monthly_sales_1995_to_2000 e obt’’em os dados de 1989 a partir da tabela base

SELECT t.month, p.product_id, SUM(ps.purchase_price) as sum_of_sales

FROM time t, product p, purchases psWHERE t.time_key = ps.time_key AND ps.product_id = p.product_id AND t.year between 1989 and 1999GROUP BY t.month, p.product_id;

Page 45: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Query Rewrite com várias MVs

• Explain Plan do Ex. 11:

Page 46: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Aproximações

• Utilização de amostras estatísticas dos dados;

• Técnicas de aproximação podem promover resultados interessantes;

• Atributos cuja adição de novos valores não alteram os agregados (Média Salarial);

Page 47: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Aproximações

• Suponha R sendo uma tabela de fatos e as demais de dimensão;

• Colhendo uma amostra R_ de R e então fazendo joins baseados em R_ -> S _, T _;

• Se a consulta envolve R, S, T então a query pode retornar bons resultados utilizando R _, S _, T _.

Page 48: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Aproximações

Page 49: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Aproximações

Page 50: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Aproximações

Page 51: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Conclusões

• Muitas possibilidades de melhorias;

• Responsabilidades ao DBA!

• Ferramentas são esseciais;

• Novas versões do Oracle têm adicionado melhorias consideráveis;

Page 52: Otimização de Consultas em Data Warehouse (DW) Cláudio E. C. Campelo  Universidade Federal de Campina Grande Mestrado em Ciência.

Bibliografia Consultada

• Oracle 9i Data Warehousing Guide. Junho/2005.• Oracle OLAP Application Developer's Guide 10g Release 2.

Agosto/2005.• Oracle Database Performance Tuning Guide 10g Release 2.

Junho/2005.• Hillson, Susan et Al. Improve Results with Query Rewrite. Oracle

Magazine Setembro/Outubro, 2003.• Shasha, Dennis e Bonnet, Philippe. Data Warehouse Tuning:

What’s Different About Data Warehouses. Dbazine, Abril/2005. A partir de Database Tuning: Principles, Experiments, and Troubleshooting Techniques, Morgan Kaufmann Publishers, 2003.