otimizar acesso e consultas ao IB

02/01/2006

Tenho um sistema cliente/servidor, com o banco de dados Firebird 1.5 na web.

Otimizei ao máximo as queries, não existe nenhum ´select * ´ , uso clientdataset.

O que acontece: Ao abrir uma tabela pela primeira vez, fica muuuito lento, chega a demorar 2 minutos. Mas, ao abrir novamente as mesmas tabelas, é bem rápido, não tem problema nenhum.

Como eu posso resolver isso?


Vitor^_^

Respostas

02/01/2006

Peninha

Ola amigo, posta o código da sua consulta para que possamos te ajudar?
Erivan.


Responder Citar

02/01/2006

Vitor^_^

São várias consultas, qualquer uma delas é a mesma coisa, demora pra abrir na primeira e abre rápido na segunda.

Eu uso select * somente quando vou cadastrar um novo registro, porque eu tenho que preencher todos os campos. aí eu faço tipo:

select * from CLIENTES
where CodCli = :cod

ponho esse :cod aí, porque se for qualquer coisa <> de 0, ele abre o cds pra cadastrar ocliente. Se for nada, ou um valor inexistente, ele não traza nada. (então eu acho que uma query q não traz nada seria rápida), e se for um número existente, aí tudo bem, ele traria tudo. Mas não traz porque nunca é passado um número nessa tela, pois ela é usada somente para cadastro, não para consulta. as de consulta são assim:

select codcli, razao, from clientes
where codcli = :cod


Responder Citar

02/01/2006

Edilcimar

talvez esteja demorando na primeira vez pelo fato do bd estar fechado no servidor, e na segunda vc já o abriu, para testar deixe o bd aberto no servidor


Responder Citar

02/01/2006

Vitor^_^

você diz o serviço rodando? está sempre rodando.

O bd é aberto no momento da abertura do executavel. só que, depois do bd aberto, a primeira consulta demora, a segunda já é mais rápida.

será que tem algo a ver com cache?


Responder Citar

02/01/2006

Edilcimar

Tem índice? Uma pesquisa com índice é mais rápida que outra sem, se não tem a primeira vez ele pode realmente criar um em cache e depois vai buscar no cache e aí é mais rápido, mas se a 2ª pesquisa demorar muito, pode sumir do cache e volta a ser lenta


Responder Citar

02/01/2006

Vitor^_^

Já tenho os indices criados.

basta criar o indice que aí qualquer select que você fizer usando e ordenando pelo campo indexado fica mais rápido, certo? É só fazer um select normal mesmo, não é?


Responder Citar

02/01/2006

Edilcimar

é, vc pode inclusive colocar um timer e fazer a pesquisa com e sem índice para verificar a diferença de tempo


Responder Citar

02/01/2006

Vitor^_^

então, meu bd já tem indices. Eu sei que é mais rápido. Para usar o bd em redes locais nunca tive problemas, mas usando na web, para diversas filiais, é diferente. Deve ter algum outro esquema de otimização.


Responder Citar

02/01/2006

Edilcimar

vc precisa da informação online na web?


Responder Citar

02/01/2006

Vitor^_^

sim, porque o banco de dados é acessado por mais de 20 lojas.

Alguns cadastros são gerais e outros são separados por lojas, mas todas acessam tudo.


Responder Citar

02/01/2006

Edilcimar

bem aí então vc tem que arranjar um link mais rápido, que não vai ter jeito não, pois hoje vc tem 20 lojas com 10.000 clientes amanhã terá 50 lojas com 100.000 clientes, isto sem contar a tabela de produtos, a de movimentação, duplicatas e etc


Responder Citar

02/01/2006

Vitor^_^

está lento mesmo na loja que tem o link mais alto, tipo de 600 kbps pra cima.

O problema não é o link, porque como eu disse, só é lento na primeira consulta, as demais são rápidas, dependendo da consulta, posso até arriscar que parecem locais.


Responder Citar

02/01/2006

Titanius

Olá vitor^_^

Também tive este problema, so consegui resolver usando 3 camadas com DCOM, aí consegui acessar via internet, fora isso é impossível mesmo...


[]s


Responder Citar

02/01/2006

Edilcimar

é, tente o que o titanius falou, eu não tenho mais dicas a respeito


Responder Citar

02/01/2006

Vitor^_^

Oi titanius, já li os seus tópicos a respeito do assunto nesse forum, mas eu acho que migrar minha aplicação para 3 camadas seria meio doloroso, pois ele não foi feita pensando nisso e não está preparada.

É muito difícil? Por onde eu começo? Me disseram que dCom é problemático, e que com corba ou Sockets é melhor, mas sinceramente eu não conheço nehuma das várias formas.


De qualquer forma, um dia eu terei que fazer essa migração mesmo, mas por enquanto, meu problema é o seguinte: Só é lerdo na primeira consulta a uma tabela, todas as outras são rápidas. Se desse pra melhorar pelo menos isso até terça, depois agente pensa em 3 camadas.


Responder Citar