Clipper On Line • Ver Tópico - Apagar um indice TEMPORARY

Apagar um indice TEMPORARY

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Apagar um indice TEMPORARY

Mensagempor fladimir » 13 Mar 2017 13:02

Exato João, não pertence a HB_MEMIO.

Rubens, o João descobriu, se mandar DBSETORDER(0) antes de fechar o Temporário é destruido. Testei aki e deu certo...

Agora outra questão relacionada ao assunto:

FUNCTION TstTemporary // Rubens Topic 17412 Apagar Indice Temporary
        Use ConRec.DBF  alias ConRec New Share
   Alert( str( OrdCount() ) ) //-----------------> Mostra 12

   nSecIni:=Seconds()
   Index on Recno() TAG TEMP TO TstTemp FOR ConRec->Cancelado== 'S' TEMPORARY  //---------> Não teria q ser pra um outro arquivo de indice Temporario?

   Alert(SecToTime(Seconds()-nSecIni))
   Alert( str( OrdNumber()) ) //----------------> Mostra 13
   Alert( str( OrdCount() ) )   //-----------------> Mostra 13 ou seja acabou ADICIONANDO no indice do ConRec e não em outro
   
   DbSetOrder(0) //------------> Legal apagou o Chave/Tag Temporaria nr 13 pq depois listo e vemos q tem 12, apesar de não ser a intenção deste teste pq não era pra ser a Ordem 13 pq setei jogar em um novo Arquivo de Indice.

   dbcloseall()
   Use ConRec.DBF  alias ConRec New Share
   Alert( str( OrdCount() ) ) //---------------------> Mostrou 12


Agora se refaço o teste acima com SET AUTOPEN OFF
E seto o Indice com dbSetIndex( Nome Indice ) ai cria separado e os resultados são os esperados.

Então concluo que:

SET AUTOPEN ON o Indice Temporario joga como Additive no indice de mesmo nome da tabela MESMO não tendo ADDITIVE no comando
DbSetOrder(0) Destroi o Temporario, não precisando mudar de ordem e depois mandar o OrdDestroy
A Nivel de desempenho o Indice temporário é bem melhor e não precisa do HB_MEMIO para isso

Concordam com os resultados? Alguma observação ou algo a acrescentar ou divergir?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Apagar um indice TEMPORARY

Mensagempor rubens » 13 Mar 2017 22:31

Comecei a ler o último post e fiquei imaginando o SET AUTOPEN como estava, mas você matou a charada e respondeu.
As diferenças me surpreenderam mas os testes foram locais né... daí o ótimo desempenho do setfilter.

Agora você podia ser bonzinho e fazer outro teste já que está com a mão na massa.
Cria uma tabela na memória, appenda estes dados aí nela e faz os testes só para gente ver se a tabela estando na memória vai ter um desempenho melhor ou não...

vlw...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Apagar um indice TEMPORARY

Mensagempor fladimir » 14 Mar 2017 01:36

Vamos aos resultados... fiquei preocupado com 1 deles.... vixi...

Preparando ambiente....

Tabela mesma informada nos posts acima com cerca de 1GB e 3 milhões e poucos registros

Apaguei o CDX e recriei o mesmo contendo 12 chaves

Depois com a aplicação compilada com HBMEMIO.HBC e REQUEST HB_MEMIO procedi comos testes...

        FERASE('tstTmp.CDX')
        Use ConRec Alias ConRec Shared New
        Alert( str( OrdCound())) //------> 12

//--> Tst 1 Criando Clone Fisico
        aStru  := ConRec->(DBStruct())
   nSecIni:=Seconds()
   DbCreate(    "tstFisico", aStru, "DBFCDX", .T., "tstFisico")
   APPEND FROM ConRec.DBF
   Alert('Tempo Clone Fisico ' + SecToTime(Seconds()-nSecIni))  //-----------> 38 segundos (fiz 2 x)
   
   //--> Indexando na Memoria
   nSecIni:=Seconds()
   Index on Recno() TAG TEMP TO TstTemp FOR Field->Cancelado == 'S' TEMPORARY
   Alert('Tempo Indice Memory ' + SecToTime(Seconds()-nSecIni))  //-------------------------> 10 segundos)

   //--> Mostrando qual nr TAG atual e Contando as Tags
   Alert( str( OrdNumber()) ) //---------------------------------> Mostrou 1
   Alert( str( OrdCount() ) ) //---------------------------------> Mostrou 1
   DbSetOrder(0) // Apaga TAG Temp  //---------------------------------> deveria ter apagado igual dos testes anteriores.
   Alert( str( OrdCount() ) ) //--> conta e mostra  //---------------------------------> Mostrou 1... não entendi mais nada...

DbCloseAll()
Ferase('tstFisico.dbf')
   
        //--> Tst 1 Criando Clone Fisico com Append From filtrando
        Use ConRec Alias ConRec Shared New
        aStru  := ConRec->(DBStruct())
   nSecIni:=Seconds()
   DbCreate(    "tstFisico", aStru, "DBFCDX", .T., "tstFisico")
   APPEND FROM ConRec.DBF FOR field->Cancelado == 'S'
   Alert(SecToTime(Seconds()-nSecIni)) //-----------------------------> 45 segundos
   
DbCloseAll()
Ferase('tstFisico.dbf')
        Use ConRec Alias ConRec Shared New
   //--> Tst 2 Criando Memory Memory com Append From filtrando
   nSecIni:=Seconds()
   DbCreate("mem:tstMemory", aStru, "DBFCDX", .T., "tstMemory")
   APPEND FROM ConRec.DBF FOR field->Cancelado == 'S' //  Mesmo sem o FOR o resultado é o mesmo.
   Alert(SecToTime(Seconds()-nSecIni)) // não chega nessa linha apresenta a mensagem abaixo... aparenta ter "estourado"

Unrecoverable error 9009: hb_xrealloc can´t reallocate memory...

... Called from __DbApp(0)
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Apagar um indice TEMPORARY

Mensagempor rubens » 14 Mar 2017 08:33

Bom dia...
Você tá precisando de um punhado de sal grosso nessa máquina sua aí ou de repente chamar o Padre Quevedo.

Cara num entendi o porque dos erros não, mas tem coisas que só o harbour faz para você né... e as surpresas de um sistema de informação, na teoria tudo funciona....
A questão do estouro de memória com esse tanto de registros faz sentido...
Eu sugeri o teste para ver se com a tabela na memória ficasse mais rápido o filtro, mas barrou na limitação de memória...
Eu imaginei que poderia trabalhar com ele na memória e se usasse índices temporários na memória ficaria mais rápido do que trabalhar com o arquivo físico, sem contar que eliminaria um monte de testes na operação.

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Apagar um indice TEMPORARY

Mensagempor Kapiaba » 14 Mar 2017 09:43

Estouro de pilha:

   Unrecoverable error 9009: hb_xrealloc can´t reallocate memory...


Esta máquina tem quantos GBS de memória?

Em windows de 64 bits, o recomendável, é no minimo: 8 GBS de memória RAM. Abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Apagar um indice TEMPORARY

Mensagempor fladimir » 14 Mar 2017 10:54

Samsumg Intel i7 8GB HD principal SSD 250GB para o SO Windows 7 64

HD (D:) onde a aplicação esta rodando 1 Tera SATA 2
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Apagar um indice TEMPORARY

Mensagempor Kapiaba » 14 Mar 2017 12:04

Testei aqui com fivewin, e não me dá estouro de pilha, não gera erros, mas não funciona essa rotina compilada com harbour ou xHarbour. Não entendi o propósito disso. abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Apagar um indice TEMPORARY

Mensagempor Kapiaba » 14 Mar 2017 12:06

#include "FiveWin.ch"
#Include "Ord.Ch"

ANNOUNCE RDDSYS
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto
REQUEST DBFCDX, DBFFPT
ANNOUNCE FPTCDX

function Main()

   local aStru := {}

   LOCAL cAlias

   IF FILE( 'tstTmp.CDX' )

      FERASE('tstTmp.CDX')

   ENDIF

   Use ConRec Alias ConRec Shared New

   go top

   cAlias := ALIAS()

   // browse()

   //Alert( str( OrdCound())) //------> 12 ERRADO
   Alert( str( OrdCount() ))

   //--> Tst 1 Criando Clone Fisico
   //aStru := ( ConRec )->( DBStruct() )
   aStru := ( cAlias )->( DBStruct() )

   nSecIni:=Seconds()

   DbCreate(  "tstFisico", aStru, "DBFCDX", .T., "tstFisico")

   APPEND FROM ConRec.DBF
   Alert('Tempo Clone Fisico ' + SecToTime(Seconds()-nSecIni)) //-----------> 38 segundos (fiz 2 x)

   //--> Indexando na Memoria
   nSecIni:=Seconds()
   Index on Recno() TAG TEMP TO TstTemp FOR Field->Cancelado == 'S' TEMPORARY
   Alert('Tempo Indice Memory ' + SecToTime(Seconds()-nSecIni)) //-------------------------> 10 segundos)

   //--> Mostrando qual nr TAG atual e Contando as Tags
   Alert( str( OrdNumber()) ) //---------------------------------> Mostrou 1
   Alert( str( OrdCount() ) ) //---------------------------------> Mostrou 1

   DbSetOrder(0) // Apaga TAG Temp //---------------------------------> deveria ter apagado igual dos testes anteriores.

   Alert( str( OrdCount() ) ) //--> conta e mostra //---------------------------------> Mostrou 1... não entendi mais nada...

   DbCloseAll()

   Ferase('tstFisico.dbf')

   //--> Tst 1 Criando Clone Fisico com Append From filtrando
   Use ConRec Alias ConRec Shared New
   aStru := ConRec->(DBStruct())
   nSecIni:=Seconds()

   DbCreate(  "tstFisico", aStru, "DBFCDX", .T., "tstFisico")

   APPEND FROM ConRec.DBF FOR field->Cancelado == 'S'

   Alert(SecToTime(Seconds()-nSecIni)) //-----------------------------> 45 segundos

   DbCloseAll()

   Ferase('tstFisico.dbf')
   Use ConRec Alias ConRec Shared New

   //--> Tst 2 Criando Memory Memory com Append From filtrando
   nSecIni:=Seconds()

   DbCreate("mem:tstMemory", aStru, "DBFCDX", .T., "tstMemory")

   APPEND FROM ConRec.DBF FOR field->Cancelado == 'S' // Mesmo sem o FOR o resultado é o mesmo.

   Alert(SecToTime(Seconds()-nSecIni)) // não chega nessa linha apresenta a mensagem abaixo... aparenta ter "estourado"

RETURN NIL
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Apagar um indice TEMPORARY

Mensagempor fladimir » 14 Mar 2017 13:51

Obrigado disso João é avaliar o uso dos Indices Temporarios e tb seu desempenho.

Aki estoura, DBF 1 GB 3 milhoes e pouco de registro.

Nos teus testes sua tabela era q tamanho Fisico/Registros?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Apagar um indice TEMPORARY

Mensagempor Kapiaba » 14 Mar 2017 14:39

Tamanho pequeno. Mas, para o Harbour(não tenho certeza) ou xHarbour(o que uso), tamanho não é documento.

use o CLEAR MEMORY para ver o que ocorre.

Vá parando o programa com o ? e se quebrar, mostre onde ele quabra.

Abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Apagar um indice TEMPORARY

Mensagempor Itamar M. Lins Jr. » 15 Mar 2017 09:12

Ola!
Aki estoura, DBF 1 GB 3 milhoes e pouco de registro.

Favor postar ele aqui, para testarmos. Caso não seja possível, colocar apenas pedaços que não identifique o cliente, mas com os 3 milhões de registros.
O DBF pode está corrompido, sinalizar viar recno() onde dar o erro, e visualizar via DBU por exemplo.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Apagar um indice TEMPORARY

Mensagempor fladimir » 15 Mar 2017 18:10

Posso postar, apenas antes troco o nome dos clientes q estão dentro dando um Replace All e o resto pode ir, mas aki aceita esse tamanho? Pq mesmo compactadi deu 80MB

Enquanto isso vou fazer um teste assim, vou criar arquivos de 200 em 200 MB e testar pra ver se estoura e com q tamanho estoura.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Apagar um indice TEMPORARY

Mensagempor asimoes » 15 Mar 2017 18:17

Aplicações 32 bits podem usar até 4gb de memória.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Apagar um indice TEMPORARY

Mensagempor asimoes » 15 Mar 2017 18:39

Fladimir,

Tem como você postar a estrutura da tabela pra gente gerar 3 milhões de registros e vê no que dá ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Apagar um indice TEMPORARY

Mensagempor fladimir » 15 Mar 2017 20:06

/*
* Estrutura do arquivo: ConRec.DBF
*/
LOCAL aField[25]
   aField[01] := {"COCLI"     , "C",  8,  0}
   aField[02] := {"NOMECLI"   , "C", 30,  0}
   aField[03] := {"CODPRO"    , "C",  6,  0}
   aField[04] := {"DESCPROD"  , "C", 30,  0}
   aField[05] := {"QTDE"      , "N", 10,  3}
   aField[06] := {"PRECO"     , "N", 12,  2}
   aField[07] := {"DESCONTO"  , "N", 12,  2}
   aField[08] := {"VENDA"     , "C",  6,  0}
   aField[09] := {"DTCOMPRA"  , "D",  8,  0}
   aField[10] := {"PRAZO"     , "N",  5,  0}
   aField[11] := {"VENCIMENTO", "D",  8,  0}
   aField[12] := {"PAGO"      , "C",  1,  0}
   aField[13] := {"VALORPG"   , "N", 12,  2}
   aField[14] := {"DATAPG"    , "D",  8,  0}
   aField[15] := {"COBRAR"    , "C",  1,  0}
   aField[16] := {"CODCOBRAD" , "C",  3,  0}
   aField[17] := {"DTCOBRANC" , "D",  8,  0}
   aField[18] := {"DTAGENDAM" , "D",  8,  0}
   aField[19] := {"COMISSAO"  , "N", 12,  2}
   aField[20] := {"VLRCOMIS"  , "N", 12,  2}
   aField[21] := {"DTFECHAM"  , "D",  8,  0}
   aField[22] := {"HORARECEB" , "C",  5,  0}
   aField[23] := {"TIPODOC"   , "C",  1,  0}
   aField[24] := {"NRDOC"     , "C", 20,  0}
   aField[25] := {"TAXAADM"   , "N", 12,  2}
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro