Jump to content
Fivewin Brasil

Acesso a DBF em rede - Lentidão ao acessar simultâneamente


Yury

Recommended Posts

olá pessoal, boa tarde

 

creio q esse assunto já foi abordado aqui no fórum, mas pesquisei todos os links e não encontrei uma solução

 

vou descrever o "problema":

 

uma determinada estação da rede (chamarei de terminal A) chama um programa que lê um arquivo DBF indexado (CDX) por um campo tipo DATA, utilizando DBSEEK, e demora 20 segundos para finalizar a leitura do arquivo no intervalo solicitado

 

agora outra estação (chamarei de terminal A chama o mesmo programa, sendo que a primeira estação que chamou (terminal A) ainda está executando o programa ; o tempo de execução do programa no terminal B até finalizar a leitura dos registros agora é de 1 minuto

 

se o terminal A chamar novamente o programa, sem que o terminal B abandone, o tempo para finalizar também é de 1 minuto, ou seja, demora nas duas estações o mesmo tempo de 1 minuto quando o acesso ao programa é simultâneo

 

quando 1 dos terminais abandona o programa, o terminal que permanece executando volta a obter o resultado em 20 segundos

 

já isolei os trechos do programa e constatei que:

 

- a "abertura dos arquivos" com DBUSEAREA mantém a mesma velocidade acessando por 1 terminal ou pelos 2 terminais

- o "fechamento dos arquivos" com CLOSE mantém a mesma velocidade acessando por 1 terminal ou pelos 2 terminais

- a velocidade de leitura no while acessando por um terminal é muito mais rápida do que quando está acessando pelos 2 terminais

 

portanto Ã© o LOOP que está sendo afetado pelo acesso simultâneo, perdendo desempenho

 

informações sobre o ambiente onde foi testado isso:

 

- servidor com Windows Server 2012 Standart

- terminais com Windows 7 Professional

 

nas pesquisas que fiz sobre o assunto me deparei com inúmeras dicas falando sobre o cabeamento da rede, placa de rede, anti-vírus, etc... 

 

mas posso lhes adiantar que a rede está funcionando ok e as estações em que foi testado este comportamento estão com anti-vírus desabilitado e firewall do windows liberando arquivos DBF, CDX, FPT, etc...  (testamos em várias estações) 

 

inclusive em um  cliente que reclamou dessa situação o comportamento é o mesmo, testamos em várias estações também para comprovar

 

a rotina q estamos utilizando para testar é muito simples:

 

//-----------------------------------------------------------------------------

#include 'FiveWin.ch'

Function Teste()

cTime:=TIME()

Select 1
Use "M:\TESTE.DBF" Alias "NF" Shared
Set index to "M:\TESTE.CDX"

dDataIni  := CTOD("01/01/2013")
dDataFim  := DATE()
nContador := 0

NF->(DBSETORDER(1))
NF->(DBSEEK(DTOS(dDataIni),.T.))
WHILE !NF->(EOF()) .and. NF->NFDATA <= dDataFim

   nContador++
   NF->(DBSKIP())

ENDDO

? 'Tempo da leitura dos registros: ' + CRLF +; 
  ElapTime(cTime,TIME())             + CRLF +;
  NETNAME()                          + CRLF +;
  ALLTRIM(STR(nContador))+' registros lidos'  
  
// permanecer com esta mensagem em exibição e chamar o programa de outro 
// terminal

CLOSE ALL

RETURN

//-----------------------------------------------------------------------------

 

este comportamento não me parece normal , se alguém tiver alguma sugestão ou idéia eu agradeço

 

obrigado

Yury

 

 

 

 

 

 

 

Link to comment
Share on other sites

Bom dia

nao é  M. do W7 ?   eu tenho um Intel  I7  2600  3.4    com 8GB men ran (+ so usa 4)

qq pc  ate antigoes  da de 10 nele. e´absurdo isso.  se abro uma NF emitida para mostra os itens    se e´num w2003  demoras 5 segundos  isso via TS

 

aqui localmente no PC demora no MINIMO 20 segundos

 

e a Merda do W7  com certeza.

 

se abro net  trava tudo se abre outlook trava tudo   qq cois aque faz os outros 6 Nucleos ficam aguardando KKKKKK

 

Infelizmente no w2003 nao se conegue + usar o msn so versao antigona e NAo da para nem OLhar os cleintes + novos

 

e o jeito

 

se achar uma solucao avise

 

PAiva

Link to comment
Share on other sites

Yuri, isso acontece porque voce está sobrecarregando o processador. Voce precisa fazer com que o processador dê um "respiro", senão ele vai a 100% e praticamente reserva o processamento somente para seu programa. Pra resolver é importante que em códigos de processamento longo, que não tem intervenção do usário, voce faça o seguinte:

 

nCont := 1

While !Eof()

   If Mod(nCont++,100)==0

      ThreadSleep(1)

   EndIf

   DbSkip()

EndDo

 

Agra no seu código ficaria o seguinte:

 

//-----------------------------------------------------------------------------

#include 'FiveWin.ch'

Function Teste()

cTime:=TIME()

Select 1
Use "M:\TESTE.DBF" Alias "NF" Shared
Set index to "M:\TESTE.CDX"

dDataIni := CTOD("01/01/2013")
dDataFim := DATE()
nContador := 0

NF->(DBSETORDER(1))
NF->(DBSEEK(DTOS(dDataIni),.T.))
WHILE !NF->(EOF()) .and. NF->NFDATA <= dDataFim

nContador
++

 

   If Mod(nContador,100)==0  // ALTEREI AQUI

      ThreadSleep(1)

   EndIf
 

NF->(DBSKIP())

ENDDO

? 'Tempo da leitura dos registros: ' + CRLF +;
ElapTime(cTime,TIME()) + CRLF +;
NETNAME() + CRLF +;
ALLTRIM(STR(nContador))+' registros lidos'

// permanecer com esta mensagem em exibição e chamar o programa de outro
// terminal

CLOSE ALL

RETURN


//-----------------------------------------------------------------------------

Link to comment
Share on other sites

Pessoal boa noite

 

Posso dar uma de rivelino, como dizia ele uma patada atõmico, um belo chute. Verifique no W7 (Opções avançadas) qual a prioridade de processamento se  equilibrado, dados, cache ou programa e no SERVER a parte de desempenho de equilibrio se dados ou programa, pode ser isso.

 

[]s,

Link to comment
Share on other sites

Olá Eric
 
nos testes que realizei usei um DBF com 7000 registros
 
sobre as dicas q vc postou sobre quantidade de arquivos nas pastas, abrir com READONLY e executar o programa sem mais "nada" aberto eu já tentei fazer essas modificações, mas não surtiu efeito  (na verdade li um post seu no Clipper On Line, se não me engano, onde tinha essas dicas)

 

sobre executar como adm, vou testar

 

obrigado pela atenção

 

abraço

Yury

Link to comment
Share on other sites

Yury 

Eu já passei por este tipo de problema várias vezes desde que comecei a migrar meus programas de clipper para fivewin. Quando usei o xharbour e compilei os programas em ambiente 32bits mantendo as telas em texto os arquivos em dbf, abriam em tempo e velocidade igual ao que fazia em clipper, inclusive dava impressão de ser até mais rápido, mas quando migrei para o fivewin com telas e recursos gráficos ai voltou a ficar muito lento.

 

Foram vários fatores que tive que arrumar, mas o que percebi era que quando estava em windows server com gerenciador de dominio ativado e o AD o sistema funciona muito melhor que quando não tem. Por padrão só instalo em server com AD ativado. Não seria este o problema no seu caso?

 

Fiz um teste pegando sua rotina e compilei ela com um arquivo meu que tem 980 mil registros e coloquei o loop para filtrar 298 mil, usei um indice com campo data como no seu exemplo e um servidor windows server 2008 r2 com AD ativado. Nos micros com windows XP levou 0:22 segundos e win7 0:25 segundos, quando os 2 foram ativados simultaneamente o tempo ficou em 2 minutos em cada.

Agora usando o mesmo exemplo em uma rede sem o AD ativado o tempo levou 6 minutos e 20 minutos quando acessado por  meio de wireless. rss

 

Para os testes usei seu exemplo teste.prg mudando apenas o arquivo.

 

Abçs.

Augusto

Link to comment
Share on other sites

qual a velocidade da rede ? placas de rede e do switch ?

 

ja aconteceu de ter placas antigas 10/100 ... troquei tudo para 10/100/1000 com um switch hp e nao precisei mudar 1 linha no meu codigo

 

por favor verifique a rede e a configuração do servidor e das estações

 

maquinas com windows home (isso é para ambiente domestico e nao para empresa) 

 

windows 7/64 com 2b de ram a maquina le mais o disco pois nao tem memoria para processar as informações

 

por isso recomendo verificar os equipamentos .... 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...