Firebird/Performance
Meus amigos, estou passando meu Softaware de dbase para delphi,
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?
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
Curtidas 0
Respostas
Rodolpho123
12/05/2004
Olá Placido,
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.
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
Placido
12/05/2004
Rodolfo, muito obrigado pelo interesse em me ajudar, concordo plenamente com as suas colocações, meu cliente tem no servidor, 129
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.
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
Vanius
12/05/2004
Boa tarde.
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
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
Rodolpho123
12/05/2004
Olá novamente Placido,
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:
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
Placido
12/05/2004
Vanios obrigado pela atenção.
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
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
Vanius
12/05/2004
Beleza. Tentarei explicar.
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.
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
Professorvizagre
12/05/2004
Olá Placido, tudo bem ?
Seria interessante, além da dica de nosso colega, dar uma verificada nos indices da(s) tabela(s) em uso.
Seria interessante, além da dica de nosso colega, dar uma verificada nos indices da(s) tabela(s) em uso.
GOSTEI 0
Placido
12/05/2004
Meus amigos bom dia!
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)
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
Placido
12/05/2004
Vanio não abusando da sua bondade, estou aguardando os exmplos de querys.
Um abraço.
Um abraço.
GOSTEI 0