Velocidade do Firebird
Uso Delphi 6 e Firebird 1.5
Estou desenvolvendo um sistema onde entre outras coisas, tem orçamento e licitações de vendas (em um único form), quando começa a gravação dos ítens da venda em alguns momentos quando vai abrir uma consulta de um produto para verificação dos dados, demora 1 ou 2 segundos, e a gravação é instantanea.
Mas a partir de ter gravado 50 produtos na mesma venda ele começa a ficar mais lento e passa a demorar as vezes até mais de 10 segundo por consulta e a gravação uns 4.
Isso é comum ao Firebird? Ele é lento assim mesmo?
Tá certo que o cadastro de produtos já tem mais de 6000 produtos, mas nao acho que deveria estar tao lento com tao pouco registros, visto que a capacidade dele é tida como milionária.
Isso pode ser instalação errada, ou alguma outra coisa?
Alguem tem alguma dica? Por favor.
Agradeço antecipadamente qualquer ajuda.
Sandro
Estou desenvolvendo um sistema onde entre outras coisas, tem orçamento e licitações de vendas (em um único form), quando começa a gravação dos ítens da venda em alguns momentos quando vai abrir uma consulta de um produto para verificação dos dados, demora 1 ou 2 segundos, e a gravação é instantanea.
Mas a partir de ter gravado 50 produtos na mesma venda ele começa a ficar mais lento e passa a demorar as vezes até mais de 10 segundo por consulta e a gravação uns 4.
Isso é comum ao Firebird? Ele é lento assim mesmo?
Tá certo que o cadastro de produtos já tem mais de 6000 produtos, mas nao acho que deveria estar tao lento com tao pouco registros, visto que a capacidade dele é tida como milionária.
Isso pode ser instalação errada, ou alguma outra coisa?
Alguem tem alguma dica? Por favor.
Agradeço antecipadamente qualquer ajuda.
Sandro
Salupe
Curtidas 0
Respostas
Raserafim
29/04/2005
já que a demora é na consulta (leitura) e não na gravação, o problema pode está na falta de índices nos campos em que são feitos as pesquisas. Os índices bem aplicados são essenciais para o bom desempenho em consultas, sendo que mal utilizados podem prejudicar o desempenho, sobre tudo da gravação. Como vc disse que a gravação é instatânea, deduzo que realmente está faltando índice nos campos em que são feitos as consultas.
GOSTEI 0
Sremulador
29/04/2005
como você esta fazendo estas consultas, utiliza query ou table, a localização e por locate ???
GOSTEI 0
Salupe
29/04/2005
estou utilizando ibquery da paleta interbase, por isso nao utilizo indices, já que a própria query os faz no momento necessitado.
Mesmo utilizando query seria bom eu ter indices?
Agradeço antecipadamente qualquer ajuda.
Mesmo utilizando query seria bom eu ter indices?
Agradeço antecipadamente qualquer ajuda.
GOSTEI 0
Gandalf.nho
29/04/2005
Claro que vc precisa criar os índices no banco, a query só usa os índices que existem, ela não os cria.
GOSTEI 0
Salupe
29/04/2005
Desculpe a minha falta de informação, mas pra mim a query criava automaticamente o indice a partir do ´order by nome´ por exemplo. Eu achava que utilizando query estava livre da criação e atualização dos índices.
Se nao é assim e precisoutilizar um índice previamente criado, como eu o utilizo e quando o atualizo, e principalmente como indico o índice que será utilizado pela query no seu devido momento, ou seja, quando for chamado uma consulta.
Agradeço antecipadamente qualquer ajuda.
Se nao é assim e precisoutilizar um índice previamente criado, como eu o utilizo e quando o atualizo, e principalmente como indico o índice que será utilizado pela query no seu devido momento, ou seja, quando for chamado uma consulta.
Agradeço antecipadamente qualquer ajuda.
GOSTEI 0
Vinicius2k
29/04/2005
Colega,
A atualização é automática, apenas se vc quiser fazer a antiga ´reindexação´ vc pode desativar e ativar o índice ou efetuar um backup/restore.
Vc não precisa informar a query qual índice utilizar. O próprio IB/FB, através do otimizador de consultas, fará a seleção do melhor índice de acordo com a instrução SQL que lhe for enviada e criará o PLANo de execução para a query.
Se vc tiver ´bons´ índices irá contribuir assustadoramente para a performance das consultas, consequentemente da aplicação.
Em geral e basicamente, crie índices para : colunas utilizadas em ORDER BY e chaves estrangeiras utilizadas nos JOINs.
Um bom índice é um índice de boa seletividade, ou seja, menor número possível de registros com valores identicos dentro da coluna indexada.
Analise a instrução que será executada por uma query da aplicação dentro de uma query de uma ferramenta que permita a análise do PLAN e evite ao máximo o ´NATURAL´.
Isto irá lhe fornececer informações importantes se os índices ´ideais´ estão sendo utilizados.
Veja estes links:
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=268
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=148
T+
A atualização é automática, apenas se vc quiser fazer a antiga ´reindexação´ vc pode desativar e ativar o índice ou efetuar um backup/restore.
Vc não precisa informar a query qual índice utilizar. O próprio IB/FB, através do otimizador de consultas, fará a seleção do melhor índice de acordo com a instrução SQL que lhe for enviada e criará o PLANo de execução para a query.
Se vc tiver ´bons´ índices irá contribuir assustadoramente para a performance das consultas, consequentemente da aplicação.
Em geral e basicamente, crie índices para : colunas utilizadas em ORDER BY e chaves estrangeiras utilizadas nos JOINs.
Um bom índice é um índice de boa seletividade, ou seja, menor número possível de registros com valores identicos dentro da coluna indexada.
Analise a instrução que será executada por uma query da aplicação dentro de uma query de uma ferramenta que permita a análise do PLAN e evite ao máximo o ´NATURAL´.
Isto irá lhe fornececer informações importantes se os índices ´ideais´ estão sendo utilizados.
Veja estes links:
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=268
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=148
T+
GOSTEI 0