Queda de desempenho usando Firebird 2.5.2

01/04/2013

0

olá pessoal,

Antes meu sistema usava a versão do Firebird 1.5.6, e naquela época, alguns clientes reclamavam de lentidão e queda de desempenho ao longo do tempo... então a gente fazia um backup/restore, e tudo voltava ao normal... tinha que fazer isso de tempos em tempos.

Então resolvemos migrar para Firebird 2.5.2, e agora, ainda estão reclamando de lentidão (gradual - piora conforme o tempo passa). E fiz um teste, apenas reiniciei o serviço do Firebird e voltou a ficar numa velocidade aceitável...

Alguém já viu isso, por passou por algo do tipo??

Obs:
- o maior banco de dados que vi de cliente tem uns 2,4 GB
- usamos os índices das tabelas corretamente
Fernando

Fernando

Responder

Posts

01/04/2013

Rafael Cunha

Cara faz o seguinte cria a procedure abaixo e manda executar a mesma e veja se ocorreu alguma melhora no desempenho.

CREATE PROCEDURE RECOSTRUIR_INDEX
AS
DECLARE VARIABLE INDEX_NAME VARCHAR(31);
BEGIN
 FOR SELECT R.RDB$INDEX_NAME
 FROM RDB$INDICES R
 WHERE R.RDB$SYSTEM_FLAG <> 1
 INTO :INDEX_NAME DO
  BEGIN
    EXECUTE STATEMENT 'ALTER INDEX '  || :INDEX_NAME || ' ACTIVE;';
  END
END


Isso ocorre devido ao uso e crescimento de um banco de dados e ate mesmo em falhas de configuração, é possivel que os Índices fiquem Fragmentados e com a estatística desatualizada. Isto pode ocasionar que eles sejam preteridos pelo compilador na hora de gerar o plano de execução dos comandos o que pode degradar a performance ( pesquisa lenta por exemplo).
Responder

04/04/2013

Fernando

Então, se faz um backup/restore (onde há a reconstrução dos índices) volta a funcionar numa velocidade bem razoável.

Uso Delphi 7 + DBExpress.
As principais gravações do sistema (tipo estoque, caixa, etc) são feitas via stored procedure e com transação.

    try
      Randomize;
      transacao.TransactionID:=Random(999999);
      transacao.IsolationLevel :=xilREADCOMMITTED   ;
      DMCONN.SQLConn.StartTransaction(Transacao);
      DmProcedures.SPGrava.ExecProc; //Comando de Atualizacao
      DMCONN.SQLConn.Commit(Transacao);
      Executado:=true;
    except
      on E: Exception do
        begin
          DMCONN.SQLConn.Rollback(Transacao);
          Executado:=false;
        end;
    end;    
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar