Otimizar o Desempenho de Consultas da Base de Dados Relacional

Muitos clientes têm problemas de desempenho com aplicações de data warehouse. Em alguns casos, as consultas de SQL geradas pelo Oracle Analytics são complexas de analisar. Este tópico fornece algumas diretrizes sobre como analisar e minimizar os problemas de desempenho que podem ter origem nas consultas de SQL geradas pelo Oracle Analytics.

Este tópico não abrange as questões de desempenho devidas a problemas com a rede, o browser ou a apresentação do relatório.

Analisar o Diário de Consultas para o Oracle Analytics (Nível de Registo no Diário 3 Obrigatório)

Para informações sobre como encontrar este diário ou compreender o conteúdo, consulte Recolher e Analisar Diários de Consultas.

  1. Compare o tempo que a sua consulta despende no Oracle Analytics com o tempo despendido na base de dados, ou seja, tempo de resposta versus duração da consulta física. Normalmente, o tempo despendido no Oracle Analytics não excede alguns segundos.
  2. Se o tempo de resposta for superior a alguns segundos, analise os passos individuais efetuados no Oracle Analytics para encontrar a causa (nível de registo no diário 5 obrigatório).

Analisar a Consulta de SQL Físico

  1. Verifique se todas as tabelas incluídas na consulta são necessárias. Procure tabelas com junção, mas que não estejam incluídas na cláusula SELECT e que não tenham nenhum filtro aplicado (filtros reais, não condições de junção).
  2. Identifique quantas consultas e subconsultas físicas são geradas. Mais precisamente, quantas vezes a consulta lê uma tabela de factos? Num mundo perfeito, a consulta lê uma única tabela de factos e apenas uma vez. Quando houver mais de uma tabela de factos, descubra o motivo e veja se pode retirar alguma.
  3. Verifique se existem colunas excluídas, regras de agregação não aditivas (REPORT_AGGREGATE, count(distinct)...), passos de seleção, uma subconsulta no relatório, operadores de conjunto (UNION), totais, subtotais, várias visualizações, etc.
  4. Verifique se existem junções externas. Descubra a respetiva origem e se pode retirar algumas delas alterando o design.

Analisar o Plano de Execução

Se a otimização da consulta de SQL não for suficiente, analise o plano de execução para encontrar a causa raiz do seu problema de desempenho. Peça ajuda ao seu administrador da base de dados (DBA). Existem quatro formas principais de melhorar o desempenho neste ponto:
  1. Reduza o volume de chamadas de entrada/saída de dados melhorando os percursos de acesso aos dados (índices).
  2. Reduza o volume de chamadas de entrada/saída de dados reduzindo o volume de dados lidos. Por exemplo, pode rever os filtros aplicados ou a estrutura do modelo de dados (consulte a secção seguinte).
  3. Aumente o paralelismo (número de threads utilizados para ler tabelas de grandes dimensões).
  4. Melhore a velocidade da chamada de entrada/saída de dados (melhoramentos na infraestrutura, base de dados em memória, etc.).

Rever e Melhorar o Modelo de Dados para Reduzir o Volume de Dados Lidos

  1. Crie tabelas de agregação.
  2. Utilize a fragmentação.

    Por exemplo, se os utilizadores selecionarem principalmente dados do Ano, Trimestre ou Mês atual, poderá dividir o facto em duas tabelas: atual e arquivo. Na base de dados Oracle, também pode utilizar a criação de partições.

  3. Utilize a desnormalização para reduzir o número de junções.
  4. Divida as tabelas para reduzir o número de colunas.

    O volume de dados lidos não depende apenas do número de linhas em cada tabela. O volume da tabela também depende do número e do tamanho das respetivas colunas. Por exemplo, pode dividir uma tabela grande com 500 colunas em duas tabelas; uma tabela com as 50 colunas utilizadas com mais frequência e outra com as restantes 450 colunas que raramente são utilizadas.

Muitos problemas de desempenho no Oracle Analytics têm origem num design inadequado que resulta na geração de consultas de SQL não otimizadas. Ao modificar o design, pode melhorar as consultas de SQL geradas pelo Oracle Analytics. Isto pode ter um enorme impacto, não apenas no desempenho dos seus relatórios, mas também na quantidade de recursos utilizados na base de dados.