22 Replies Latest reply: Jul 20, 2016 8:59 AM by Clever Anjos RSS

    LOAD demorando muito tempo para executar

    Brander Weten

      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.

        • Re: LOAD demorando muito tempo para executar
          Normélio Junior

          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?

            • Re: LOAD demorando muito tempo para executar
              Brander Weten

              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.
            • Re: LOAD demorando muito tempo para executar
              Yuri Nicolett

              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--qvd-optimized

              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.

                • Re: LOAD demorando muito tempo para executar
                  Brander Weten

                  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.

                    • Re: LOAD demorando muito tempo para executar
                      Normélio Junior

                      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!

                        • Re: LOAD demorando muito tempo para executar
                          Brander Weten

                          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?

                        • Re: LOAD demorando muito tempo para executar
                          Yuri Nicolett

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

                            • Re: LOAD demorando muito tempo para executar
                              Brander Weten

                              // 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;

                              • Re: LOAD demorando muito tempo para executar
                                Brander Weten

                                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.

                                  • Re: LOAD demorando muito tempo para executar

                                    Bom Dia Amigo...

                                     

                                    Você está gerando arquivo diario mesmo, um Qvd por dia ou vi errado?
                                    Outra coisa: For costuma deixar processamento mais lento porque você acabar varrendo a mesma cosia varias e varias vezes não é tão otimizado assim, mas será que você fizer Mapping não seria melhor com ApplyMaping ?

                                     

                                    eu vi que só no final você fecha a conexão de dados, teu DBA ainda não quis te matar ficando 1 hora plugado no banco ? rs

                                    Acho que você precisa primeiro extrair tudo do banco, em cima dessa gama de dados do banco fazer a tratativa para gerar seu arquivo diario.

                            • Re: LOAD demorando muito tempo para executar
                              Clever Anjos

                              Já conseguiu a resposta? Se sim, escolha uma e marque como "Correta" para fechar o tópico e nos ajudar a manter a comunidade organizada

                              Have fun, be Qlik

                              • Re: LOAD demorando muito tempo para executar
                                Brander Weten

                                Clever ainda não existe uma resposta correta, acho que não seria bacana fechar a pergunta.