Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde a todos,
Estou com uma aplicação onde minha carga está me trazendo 13 milhões de registros, com o grouop by, anteriormente estava trazendo 26 milhões sem o group by, porém o desempenho ainda não está aceitável, alguém tem uma ideia de como posso diminuir a quantidade de registros ou melhorar o desempenho?
Nessa mesma aplicação ainda trato esses dados (13 milhões) utilizando Set Analysis.
Agradeço desde já a atenção
Rogério.
Rogério,
Estes 13 milhões você está lendo do banco para o qvw ou está gerando um QVD?
Se for possível, podes fazer uma carga incremental, criando um QVD inicial e incrementar sua carga nos próximos reload's.
Quanto ao Set Analysis, veja se não possível criar alguma coisa em script ou em tabelas fato, que facilitem a consulta e melhorem a performance da aplicação.
Abraços.
Rogério,
Esqueci de mencionar estas informações são de QVD.
Em relação ao Set Analysis, coloquei para carregar os valores diretamente no script ao invés de estar na expressão, isso ajudou em certo modo, porem meu set analysis tem muitos cálculos a serem feitos (só para ter uma base a menor expressão tem 205 linhas), por isso acredito que se conseguir dimunuir um pouco mais a quantidade de registros pode ser que melhore, pois após diminuir de 26 para 13 houve uma melhora significativa.
Agradeço a atenção.
Rogério Almeida.
Rogério,
As vezes a forma como é feita a fórmula do Set Analysis prejudica a performance... eu, em um projeto aqui precisava ler 929 milhões de uma tabela detalhe e aplicar duas fórmulas básicas... apanhei bastante, mas no final, ficou mais rápido, entretanto, vai depender também da granularidade dos dados, da memória disponível para a execução do cálculos...
Creio que você deve ter bastante IF dentro dos Set, já que possuem várias linhas...
Eu já apanhei bastante, pois para cada tipo de Seleção fazia um cálculo diferente... as vezes vc pode utilizar a expressão filial = $::filial, uma vez que não precisa checar se a filial está marcada, a expressão funciona com ela marcada ou desmarcada... é bastante interessante.
Qualquer dúvida estou por aqui.
Abraços.
Rogério, você esta trabalhando com uma quantidade pequena de registros, para entender melhor seu problema, nos informe:
Como esta a modelagem da sua aplicação: Star Schema? Snow Flake? Simple Table?
Possui chaves e tabelas sintéticas?
Como estão as expressões e dimensões nos gráficos? Tem alguma dimensão calculada?
Qual o tamanho do QVW?
Qual a configuração (hardware) de seu QvServer? ou esta rodando essa app em seu computador?
Yuri,
Minha tabela possui 4 chaves e outros campos necessários em uma tabela link, onde inserimos nesta link os registros de varias tabelas e as concatenando, para que assim os dados de uma tabela possam ser visto em todas.
Existem expressões calculadas para as tabelas dinâmicas, onde fiz a mudança desse calculo para o script assim melhorando um pouco o desempenho.
O QVW está com 26 milhões de registros e consegui diminuir para 13 milhões efetuando o group by.
O Hardware tem 24 gb de ram em um servidor com 4 núcleos.
Rogério Almeida
Poderia postar uma imagem da modelagem?
Ele fica lento no servidor ou em seu computador?
Qual é o tamanho desse QVW? Quantos usuários acessam essa aplicação?
Na minha opinião 4 cores é muito pouco.
A memória vai depender do tamanho do qvw e o número de usuários que possuem acesso.
Rogério,
Verifique qual o tamanho do qvw em memória... quanto aos 13 milhões, você diz que o QV carrega os 13 milhões, porém, devido à modelagem, estes dados modem se multiplicar em memória...
O mais correto seria dar uma olhada na modelagem e nas sintaxes do seu SA, para podermos avaliar melhor o porque da perda de performance... como o Yuri explicou, vários fatores podem estar influenciando a aplicação ficar lenta, somente com acesso à modelagem pode-se dar um diagnóstico preciso.
Lembrando que a quantidade de dados relatadas é bastante pequena, porém, após a modelagem, podem ocupar bastante espaço em sua memória, prejudicando seus cálculos.
A ideia do IF é uma ótima solução, por exeplo, se você trabalhar com datas, pode atualizar apenas do mês em questão, exemplo:
If Month (Now(2))='05' then
TabelaFato:
Load (seu comando)
Store (caminho do QVD)
ENDIF
Assim você não irá carregar dados anteriores ou como o Rogério falou acima, estudar alguma forma de carregar apenas incremental.
Consegui resolver, as dicas de vocês foram validas sempre, fiz de tudo um pouco que cada um falou e depois de quase destruir tudo consegui resolver, obrigado a todos pelo esforço e atenção.