Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá pessoal,
Erro de memória já foi amplamente debatido neste user grup e em outros.
Entretanto, minha situação é a seguinte.
OUT OF VIRTUAL AND/OR LOGICAL MEMORY
ocorre enquanto ainda estou carregando a primeira tabela de dados a partir de centenas de arquivos TXT, ou seja, não há relacionamentos com outras tabelas ou sequer chaves sintéticas.
Meu erro ocorre a partir do processando acima de 8milhões de registros... o que considero pouco para ser um BI ....
LOAD RecNo() as tID,
AutoNumberHash256(@5,MakeDate(mid(@10,1,4),mid(@10,5,2),'01'),@11,if((@6 <> $(_MUNICIPIO)),@6, @16)) as tCHAVE,
AutoNumberHash256(@5,MakeDate(mid(@10,1,4),mid(@10,5,2),'01')) as tCHAVE_BXA,
@1 as tNOMEARQUIVO,
@4 as tRAZAO_SOCIAL,
@5 as tCNPJ,
MakeDate(mid(@10,1,4),mid(@10,5,2),'01') as tPERIODO_APURACAO,
if((@6 <> $(_MUNICIPIO)),@7, @17) as tUF,
(if((@6 = $(_MUNICIPIO)),if((@16 = @6),'DAQUI - ARRECADA AQUI','DAQUI - ARRECADA FORA'),'DE FORA - ARRECADA AQUI')) as tORIGEM
FROM
[Dados\TXT\Arq*.txt]
(txt, codepage is 1252, no labels, delimiter is '|', msq);
Obs.: suprimi alguns campos, porém, os mais complexos são estes acima, e o total são 21 campos no Load.
Alguém tem alguma consideração, sugestão ou contribuição?
Olá, Márcio.
Este erro significa estouro de memória mesmo.
Você pode consumir toda a memória disponível através de erros na construção do script (como com chaves sintéticas com problemas) ou através de um grande volume de dados mesmo.
O QlikView consegue gerenciar valores repetidos em um campo, consumindo menos memória, porém campos como CNPJ e o AutoNumberHash256() tendem a ser grandes quantidades de valores únicos, consumindo mais memória.
Para ser mais específico ao seu caso e para entendê-lo melhor, vão algumas perguntas:
- Está trabalhando em que tipo de máquina? Um desktop, notebook ou server?
- Qual a quantidade de memória disponível?
- O sistema é 32 ou 64 bits ? E o QlikView instalado?
A última pergunta é muito importante, pois mesmo que você tenha 8GB na máquina, se o Windows ou o QlikView forem 32 bits, o processo não conseguirá alocar mais de 2GB e você terá esta mensagem de erro.
Durante a carga, abra o gerenciador de tarefas do windows (atalho em Ctrl+Alt+Del ou diretamente através de Ctrl+Shift+ESC). Vá para a aba de processos e verifique a quantidade de memória alocada ao processo do QlikView e a quantidade de memória disponível na máquina como um todo.
Atenciosamente,
Erich
Marcio, boa tarde.
Não é uma solução, mas seria uma sugestão...
Os arquivos txt que são históricos, que não sofrerão mais alteração em seus dados, poderiam ser armazenados em um ou mais arquivos QVDs, e os arquivos recentes serem concatenados com estes QVD durante a leitura.
Dá para fazer esta separação utilizando a função filetime(), e separando os históricos dos recentes.
Mas esta análise deve ser feita levando em consideração ainda outros pontos na aplicação....
Espero ter ajudado.
Att.,
Conseguiu resolver o problema ?
Tive que repensar a estrutura de minhas informações. Do jeito que estava não funcionou.
Foi repensado também o hardware.
Obrigado colegas.
Durante a última semana também tive pesadelos com o famigerado "OUT OF VIRTUAL AND/OR LOGICAL MEMORY".
Meu problema era fazer max() de data em uma tabela com mais de 120 milhões de registros, em uma VM com 6Gb de RAM que meu cliente disponibilizou.
Solução: QVDs!
1.Criei um qvw gerador de qvd.
Ele puxa toda a tabela do banco para um arquivo qvd. Eu crio o qvd e em seguida já dropo a tabela, para otimizar a memória. No QV server tenho uma task para atualizar esse arquivo semanalmente.
2.Em seguida em carrego as dados do arquivo qvd, então fazendo o max() de data, que na sequencia ainda sofre uma junção com outra tabela...
3.Entao finalmente tenho um qvd final, super enxuto, com somente 2,5 milhões de registros, que será usado na carga da minha app BI.
Boa sorte.
Olá pessoal,
meu Solução em a imagen adjunta
Boa sorte, Luis
Espero ter ajudado.
Olá Marcio,
Seu PC é 32 bits ? Se for só vai carregar o aplicativo até 2 gb na memoria ou seja um QVW de 240 mega no maximo, se for isso mude para 64 bits ele pode carregar muito mais.
abs,
Marco