Pesquisar este blog

sexta-feira, 8 de julho de 2011

Dica da semana

Relatório lento? DMR, Relacional ou OLAP?

- DMR
Coisa feia.. mas funciona basicamente como um cubo, tanto que MDX funciona.
Se seu relatório é em DMR e está lento, procure verificar o tamanho das tabelas envolvidas, esse modo foi desenvolvido para tratar de tabelas pequenas, agregadas, em tabelas muito grandes considere a abordagem normal.

- Relacional
Ai o bixo pega, pois podem ser muitos fatores, creio que os mais comuns são falta de índices e utilização de funções de aplicação logo de cara.
Sempre que for fazer um relatório, leve para a query somente o que for estar visível ou necessário para agregações, tenha certeza de que os relacionamentos estão bem feitos e analise a query para conferir.
Faça uma consulta paralela ao banco e compare os tempos do relatório e do banco, não pode ser muito diferente.
Funções como total( ... for) dificilmente são aplicadas no banco, e são geralmente tratadas na aplicação(servidor cognos), se forem utilizadas na primeira query farão um belo estrago, trazendo muito mais informação do que o necessário para só depois agregar, nesse caso, faça subqueries e só utilize essas funções depois que o nível de agregação do banco já foi feito.

- OLAP(Cubos)
Isso serve para todos os cubos MSAS, PowerCube, etc
Não faça detail filters, pois funciona como funções de aplicação, que antes de filtrar trazem todos os dados do cubo, e isso pesa pacas!!
Utilize slicers(filtros de contexto) e a função filter, que são muito mais performáticas.

Dúvidas? E-mail me!

3 comentários:

  1. Fala Tiago,

    Beleza?

    Acessei pela primeira vez seu blog e achei bem interessante.

    Dúvida nesse post relacionado a lentidão em relatórios Relacionais. O que vc quis dizer com subqueries?? Poderia ser mais específico?

    Abraço,
    Roldan

    ResponderExcluir
  2. Roldan,

    Quando digo subqueries me refiro a primeiro você fazer uma consulta com as agregações e depois faça os calculos em cima do resulatdo dessa consulta, assim você fará cálculos com menos linhas, aumentando a performance.
    Ex:
    select a, b, c, total(c for b)
    from
    (select a, b, sum(c) c from tb1 group by a, b) tb2

    ResponderExcluir
  3. Ah sim, agora entendi. Nada muito diferente do usual.

    Valeu.

    Abraço,

    ResponderExcluir