Fórum Firebird/Performance #231745
12/05/2004
0
banco de dados, Firebird, dbExpress, programação SQl, delphi7.
Acredito eu que estou utilizando os melhores recursos possíveis apresentados para um banco de dados free que é o perfil dos meus clientes.
Hoje fiz a importação de dados do dbase para o banco firebird, o cadastro
de clientes tem somente 15.000 registros, acho que não é um número elevado, pois a aplicação demora 10 segundos para abir a tela de cadastro de clientes, acho eu isto uma eternidade, pois no clipper dou um enter e a tela aparece na hora.
A máquina do cliente roda no windows 98 e tem 64 mega ram.
Meus amigos isto é normal? ou será que eu preciso fazer alguma coisa na aplicação para melhorar esta performance?
Placido
Curtir tópico
+ 0Posts
12/05/2004
Rodolpho123
Qual é o processador do seu cliente? Se tratando de servidor, acredito que para um bom desempenho do FB, (ou seja quanto mais dados, mais hardware) vc vai ter que ter uma máquina mais avançada. Eu, por exemplo, uso o FB em um servidor assim: Processador 1,4Ghz, Memória 512RAM. Meu sistema leva cerca de 1,5 segundos para abrir uma tabela de 65.000 registros. Realmente, uma tabela dBase abre bem mais rápido no seu caso, porém o risco de um corrupção da tabela é muito grande, uma vez jogada na rede. As vantagens de se trabalhar com FB são tantas que não daria para colocar aqui. No primeiro acesso ao BD após a máquina ser ligada, o FB fica um pouco lento pois é devido as operação do substemas Virtual IO,Cache Manager e Physical IO, mas após isto acontecer, a rapidez aos dados será a sua resposta deste tópico.
Gostei + 0
12/05/2004
Placido
mega Ram e nas estações 64, é muito pouco vou fazer uma reunião com o cliente e solicitar para colocar 512 mega Ram no servidor e 256 nas estações, acho que assim fica rápido.
Um abraço fique com Deus.
Gostei + 0
12/05/2004
Vanius
Nao sei, mas hoje, temos que buscar o menor nº de informaçoes de um banco de dados.
Ex. se vc dar um select * from tabelaDe15000Registro.
vc poderia utilizar 2 querys.
a 1ª SELECT CodCliente FROM Cliente (ja abriria em 1 seg.)
e a 2ª, SELECT * FROM Cliente WHERE CodCliente = :CodCliente
Desta forma vc colocaria na memoria e na rede 15.000 CodCliente e apenas TODOS os DADOS de 01 CLIENTE.
Deu pra entender o q eu quiz dizer?
Se vc quiser, te explico melhor.
Abraços,
Vanius
vaniusg@yahoo.com.br
Gostei + 0
12/05/2004
Rodolpho123
As suas máquinas-clientes não precisam ser super-poderosas. O FB trabalha da seguinte maneira: 1º a consulta SQL é feita na máquina cliente; 2º É enviado na rede para o servidor o pedido da consulta; 3º Todo o trabalho de consulta (busca) dos dados é feito no servidor, por isso é necessário um bom servidor, dispensando assim, uma boa máquina cliente; 4º É enviado para a máquina cliente [b:57071d25ef]somente[/b:57071d25ef] os dados solicitados na consulta, evitando assim o congestionamento da rede. :wink:
Gostei + 0
12/05/2004
Placido
Como eu disse no início o programa tem esta demora somente no momento da abertura da tela, para fazer pesquisa, incluir, alterar etc. a performance está relativamente boa. Veja a minha query abaixo, mas se
possível gostaria que você explicasse melhor o uso de duas querys.
SELECT CLI_CODIGO
, PROF_CODIGO
,STA_CODIGO
,TIP_CODIGO
,CLI_NOME
, CLI_DATANASCIMENTO
, CLI_COMPLEMENTO
,CLI_INSCRICAOESTADUAL
,CLI_CNPJ
,CLI_RG
,CLI_CPF
,CLI_CAIXAPOSTAL
, CLI_TELEFONE
, CLI_FAX
,CLI_CELULAR
,CLI_EMAIL
, CLI_HISTORICO
, CLI_CAIXAPOSTALPAGTO
,CLI_PESSOAFISICAJURIDICA
,CLI_DATACADASTRO
,CLI_DATAULTIMACOMPRA
,CLI_BAIRRO
, CLI_CEP
, CLI_LOGRADOUROENDERECO
, CLI_CEPPAGTO
,CLI_LOGRADOUROPAGTO
, CLI_BAIRROPAGTO
, CLI_FANTASIA
,CLI_NATUREZA
,CLI_CIDADE
, CLI_CIDADEPAGTO
, CLI_UF
,CLI_UFPAGTO
,EMP_CODIGO
,CLI_FOTO
FROM CLIENTE
WHERE EMP_CODIGO= :EMPRESA and
CLI_CODIGO = :CODIGO
Um abraço
Gostei + 0
12/05/2004
Vanius
vc usou a seguinte query. Estou colocando o nº de bytes utilizado por cada campo.
SELECT CLI_CODIGO (4)
, PROF_CODIGO (4)
,STA_CODIGO (4)
,TIP_CODIGO (4)
,CLI_NOME (1 para cada ´caracter´, +- 30)
, CLI_DATANASCIMENTO (8)
, CLI_COMPLEMENTO (+-30)
,CLI_INSCRICAOESTADUAL (15)
,CLI_CNPJ (14)
,CLI_RG (15)
,CLI_CPF (11)
,CLI_CAIXAPOSTAL (10)
, CLI_TELEFONE (10)
, CLI_FAX (10)
,CLI_CELULAR (10)
,CLI_EMAIL (30)
, CLI_HISTORICO (100)
, CLI_CAIXAPOSTALPAGTO (10)
,CLI_PESSOAFISICAJURIDICA (1)
,CLI_DATACADASTRO (8)
,CLI_DATAULTIMACOMPRA (8)
,CLI_BAIRRO (30)
, CLI_CEP (10)
, CLI_LOGRADOUROENDERECO (40)
, CLI_CEPPAGTO (10)
,CLI_LOGRADOUROPAGTO (40)
, CLI_BAIRROPAGTO (40)
, CLI_FANTASIA (40)
,CLI_NATUREZA (40)
,CLI_CIDADE (40)
, CLI_CIDADEPAGTO (40)
, CLI_UF (2)
,CLI_UFPAGTO (2)
,EMP_CODIGO (4)
,CLI_FOTO (300?)
FROM CLIENTE
WHERE EMP_CODIGO= :EMPRESA and
CLI_CODIGO = :CODIGO
NESTE CASO, somando cada campo devem dar 967b * 15000 registros = 14,505,000b = 14,5Mb.
Com isto, vc trafegou cerca de 14,5 Mb do server para a estacao.
Se vc fizesse um simples SELECT CLI_CODIGO FROM ... na query principal, vc reduziria os 14,5Mb para 60Kb e depois vc Abriria a 2ª query (nao esquecer de colocar o DataSource apontando para a 1ª query) abrindo 967b.
Vc trabalharia com a 1ª query como ´master´ e a 2ª como Detail. Praticamente assim...
Ja deu pra percerber q o trafego na rede seria bem menor. Vc ganharia cerca de 141.75¬ de desempenho apenas diminuindo o fluxo de dados na rede.
se precisar, te mando um exemplo amanha de manha.
Abraços,
Vanius Girodo.
Gostei + 0
12/05/2004
Professorvizagre
Seria interessante, além da dica de nosso colega, dar uma verificada nos indices da(s) tabela(s) em uso.
Gostei + 0
13/05/2004
Placido
Fico muito grato pela colaboração dos colegas, percebi que o assunto é interessante e inesgotável, fiquei muito contente com as repostas dos meus colegas.
Um abraço a todos e tenham um bom dia!
Pensamento para o dia
´ A luz de Deus brilha em nossa mais profunda escuridão ´
Janice Morris (EUA)
Gostei + 0
13/05/2004
Placido
Um abraço.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)