Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
branderbwcs
Contributor III
Contributor III

LOAD demorando muito tempo para executar

Prezados amigos, boa tarde!

Mais uma vez preciso de ajuda!!! Recentemente implantamos o conceito de carga incremental dos dados onde estamos gerando um arquivo (qvd) diariamente somente com informações do dia. Com a alteração tivemos uma melhora de carga de 3 horas e meia, no entanto ao fazer o LOAD dos dados para o painel principal o mesmo está demorando muito para realizar a execução, passou de 3 minutos para 1 hora e meia.

Pesquisei um pouco na internet sobre recarga parcial e não achei viável pois muitos relataram problemas ao utilizar a funcionalidade, outra solução seria desabilitar a leitura dos LOGS do (qvd) o que iria melhorar a carga.

Gostaria de saber se alguém sabe como desabilitar a leitura dos LOGS, devo codificar algo ao salvar os qvds ou no arquivo LOAD? Ou é algo relacionado a configuração do servidor?

Att,

Brander Weten.

22 Replies
offjunior
Creator
Creator

Boa tarde!

Vamos lá, vamos ver se eu entendi.

Você gera um QVD por dia, sempre com a informação somente do dia, certo?

Ai depois você lê todos esses arquivos QVDs de vários dias para formar a sua carga total, certo?

A lentidão está na leitura dos vários QVDs? Ou em outro momento?

Acredito que desabilitar a Leitura de LOGS não acarretará em super ganho assim, e no mais se era 3 minutos e agora é uma hora e meia, alguma coisa não está certo, isso é fato, portanto a leitura de LOGs foi habilitada e ai iniciou-se esse problema?

nicolett_yuri

Brander, você começou o processo corretamente, fazendo carga incremental, porém ainda me resta uma dúvida: Quando você vai carregar esses QVDs diários, você faz alguma tratativa neles? A leitura de QVDs é extremamente rápida quando utilizamos a leitura otimizada deles.

Escrevi um pouco sobre isso nesse post http://community.qlik.com/groups/qlikview-brasil/blog/2014/04/15/melhores-pr%C3%A1ticas-qlikview--qv...

acho que vai te ajudar bastante!

Caso não seja isso, por favor detalhe mais seu processo para entendermos

Pode ser que estejamos falando da necessidade de um upgrade de hardware.

branderbwcs
Contributor III
Contributor III
Author

Junior,

Muito obrigado pela resposta, vamos as considerações:

  1. Possuo um arquivo cuja sua funcionalidade é exclusiva de gerar qvd, este que após a alteração para carga incremental passou a ser de três minutos. (EXCELENTE)
  2. O outro arquivo que contém todos os painéis, ao ler cada arquivo está demorando muito. Pelo que notei ao realizar a leitura da carga da link table ao passar dos dez milhões de registros começa a ficar bem lento.
branderbwcs
Contributor III
Contributor III
Author

Yuri,

Muito obrigado pela resposta. Não realizo nenhum tipo de tratativa na leitura dos qvds, não existem tratativas, somente a leitura pura do dado. Pelo que notei a demora ocorre ao realizar a leitura na tabela "LinkTable" que possui muitos registros. Ao ultrapassar os dez milhões a performance cai bastante.

Quando não possuía o recurso de carga incremental o LOAD era quase instantâneo, pois não existia a leitura de vários arquivos e sim a de um único arquivo com todos os dados.

Quero deixar bem claro que a quantidade de registros não alterou ao utilizar o modelo, o que foi alterado foi a quantidade de arquivos qvds e a leitura de cada um deles.

Att,

Brander Weten.

offjunior
Creator
Creator

Bom dia!

Por que você está usando uma LINK TABLE?

São várias nuvem de dados em um mesmo arquivo QVW para ser necessário o uso de uma LINK TABLE?

Vamos lá, entendi que você tinha uma aplicação funcionando antes de particionar em vários QVDs. Nela já existia uma LINK TABLE.

Também entendi que agora no modelo novo você está gerando multiplos QVDs.

Então a minha pergunta é esses Múltiplos QVDs são todos de um mesmo assunto, porem estão partidos em data(dia, mês, ano...) ou esses QVDs são de assuntos diferentes que por isso se faz necessário o uso de um LINK TABLE?

Abraço!

nicolett_yuri

Brandes, coloquei aqui seu script de criação da LinkTable

branderbwcs
Contributor III
Contributor III
Author

Normélio, boa noite!

Eu necessito utilizar link table pois o modelo que trabalho existem várias tabelas fatos e elas se relacionam entre si por parâmetros distintos.

Outro ponto de utilizar link table é para eliminar a referência circular que acontece nas chaves sintéticas e em toda relação eu preciso do link com a minha dimensão independente.

Acho que a questão não é a link table e sim a demora para load em um determinado arquivo que possua mais de dez milhões de registros. Você sabe de algo que limita o qlikview quanto a isso?

branderbwcs
Contributor III
Contributor III
Author

// Variável para armazenar o nome da visualização.

LET vView = 'LinkTable';

// Lista todos arquivos dentro do diretório estipulado e carrega todas as datas.

FOR EACH ArquivosQVD IN FILELIST('$(vSaidaArquivo)$(vView)\*.qvd')

  DataCarregadas:

  LOAD NUM(DATE#(LEFT(RIGHT('$(ArquivosQVD)',12),8),'YYYY-MM-DD')) AS Arquivos

  AUTOGENERATE 1;

NEXT ArquivosQVD

// Cria uma lista das datas faltantes comparando os arquivos dentro do diretório e o período estipulado no calendário.

DatasFaltantes:

LOAD CONCAT(CalendarioPeriodo&', ') AS DataFaltante

RESIDENT Calendario

WHERE NOT EXISTS(Arquivos,CalendarioPeriodo);

// Concatena todas as datas faltantes em uma única variável. O comando "LEFT" é utilizado para remover a última vírgula e espaço.

LET vDatasFaltantes = LEFT(PEEK('DataFaltante'),LEN(PEEK('DataFaltante'))-2);

// Para cada data não encontrada no período será executada uma repetição.

FOR EACH ArquivosQVDFaltante IN $(vDatasFaltantes)

  // Variável que irá armazanar a data faltante e utilizá-la como parâmetro.

  LET vDataFormatada = DATE($(ArquivosQVDFaltante),'YYYY-MM-DD');

  LET vDataFormatadaPesquisa = DATE($(ArquivosQVDFaltante),'DD/MM/YYYY');

  TRACE Carregando $(vView) data: $(vDataFormatada);

  // Execução da view utilizando a data estipulada.

  // CompetenciaOutrasReceitas

  $(vView):

  LOAD DISTINCT

  CodigoCliente AS CodigoCliente,

  ChaveData AS ChaveData,

     CompetenciaTipo AS CompetenciaTipo,

     NULL() AS CodigoMVA,

     NULL() AS ChaveCodigoUsuario,

     NULL() AS ChaveCodigoUnidadeOperacional,

     NULL() AS VeiculoFaixa,

     NULL() AS VeiculoOrdemFaixa 

  FROM [$(vSaidaArquivo)CompetenciaOutrasReceitas\CompetenciaOutrasReceitas_$(vDataFormatada).qvd] (qvd);

  // CompetenciaContratos

  $(vView):

  LOAD DISTINCT

  CodigoCliente AS CodigoCliente,

  ChaveData AS ChaveData,

     CompetenciaTipo AS CompetenciaTipo,

     CodigoMVA AS CodigoMVA,

     NULL() AS ChaveCodigoUsuario,

     NULL() AS ChaveCodigoUnidadeOperacional,

     NULL() AS VeiculoFaixa,

     NULL() AS VeiculoOrdemFaixa  

  FROM [$(vSaidaArquivo)CompetenciaContratos\CompetenciaContratos_$(vDataFormatada).qvd] (qvd);

  // CompetenciaCustos

  $(vView):

  LOAD DISTINCT

  CodigoCliente AS CodigoCliente,

  ChaveData AS ChaveData,

     NULL() AS CompetenciaTipo,

     NULL() AS CodigoMVA,   

     NULL() AS ChaveCodigoUsuario,

     NULL() AS ChaveCodigoUnidadeOperacional,

  NULL() AS VeiculoFaixa,

     NULL() AS VeiculoOrdemFaixa   

  FROM [$(vSaidaArquivo)CompetenciaCustos\CompetenciaCustos_$(vDataFormatada).qvd] (qvd);

  // HistoricoVeiculos

  $(vView):

  LOAD DISTINCT

  CodigoCliente AS CodigoCliente,

  ChaveData AS ChaveData,

     NULL() AS CompetenciaTipo,

     CodigoMVA AS CodigoMVA,

     NULL() AS ChaveCodigoUsuario,

     ChaveCodigoUnidadeOperacional AS ChaveCodigoUnidadeOperacional,

  VeiculoFaixa AS VeiculoFaixa,

     VeiculoOrdemFaixa AS VeiculoOrdemFaixa   

  FROM [$(vSaidaArquivo)HistoricoVeiculos\HistoricoVeiculos_$(vDataFormatada).qvd] (qvd);

  //FichaVenda

  $(vView):

  LOAD DISTINCT

  CodigoCliente AS CodigoCliente,

  ChaveData AS ChaveData,

     NULL() AS CompetenciaTipo,

     CodigoMVA AS CodigoMVA,

     ChaveCodigoUsuario AS ChaveCodigoUsuario,

     ChaveCodigoUnidadeOperacional AS ChaveCodigoUnidadeOperacional,

     VeiculoFaixa AS VeiculoFaixa,

     VeiculoOrdemFaixa AS VeiculoOrdemFaixa   

  FROM [$(vSaidaArquivo)FichaVenda\FichaVenda_$(vDataFormatada).qvd] (qvd);

  //VendedorMeta

  $(vView):

  LOAD DISTINCT

  NULL() AS CodigoCliente,

  ChaveData AS ChaveData,

     NULL() AS CompetenciaTipo,

     NULL() AS CodigoMVA,

     ChaveCodigoUsuario AS ChaveCodigoUsuario,

     ChaveCodigoUnidadeOperacional AS ChaveCodigoUnidadeOperacional,

     NULL() AS VeiculoFaixa,

     NULL() AS VeiculoOrdemFaixa   

  FROM [$(vSaidaArquivo)VendedorMeta\VendedorMeta_$(vDataFormatada).qvd] (qvd);

  // Armazenamento do conteúdo da view no arquivo qvd.

  STORE $(vView) INTO $(vSaidaArquivo)$(vView)\$(vView)_$(vDataFormatada).qvd;

  // Apaga a tabela da memória.

  DROP TABLE $(vView);

  // Carrega a próxima data faltante.

NEXT ArquivosQVDFaltante

// Limpa as tabelas da memória.

DROP Table DataCarregadas, DatasFaltantes;

// Limpa o conteúdo das variáveis "vDatasFaltantes" e "vView".

LET vDatasFaltantes = '';

// Dropa a tabela calendário da memória.

DROP TABLE Calendario;

// Encerra a conexão com o banco de dados e o script.

DISCONNECT;

EXIT SCRIPT;

branderbwcs
Contributor III
Contributor III
Author

Yuri, como mencionei anteriormente quando gerava isso em um único arquivo o LOAD demorava 20 segundos. O script é o mesmo só que agora o QVD demora dois minutos para gerar e load 1 hora.