[firebase-br] Comparação MSSQL Server x Firebird x PostGreSQL

Jennecy Junior jennecy em gmail.com
Ter Maio 3 12:45:02 -03 2005


Olá pessoal,

Estou fazendo um estudo para migrar um servidor MSSQL Server, e, por
isso, instalei em uma máquina o MSDE 2000 ( SQLServer com limitações
), o Firebird 1.5.2 e o PostgreSQL 8.0. Em seguida, criei um
aplicativo em Delphi 7 que se conecta a um banco em cada um dos
servidores, todos com 9 tabelas de mesma estrutura. Em seguida, o
aplicativo iria inserir registros nas nove tabelas de cada banco, com
um código semelhante ao abaixo:

...
log.lines.add('Inicio Banco A - tabela 1:'+formatdatetime('hh:mm:ss.zzz', now));
Query.Open;
for x:=1 to y do
begin
Query.append;
query.fieldbyname('coluna1').value := a;
query.fieldbyname('coluna2').value := a;
query.fieldbyname('coluna3').value := a;
                   ....
query.fieldbyname('coluna3').value := a;
Query.post;
end;
log.lines.add('Fim Banco A - tabela 1:'+formatdatetime('hh:mm:ss.zzz', now));
...
///muda o banco
...
log.lines.add('Inicio Banco B - tabela 1:'+formatdatetime('hh:mm:ss.zzz', now));
Query.Open;
for x:=1 to y do
begin
Query.append;
query.fieldbyname('coluna1').value := a;
query.fieldbyname('coluna2').value := a;
query.fieldbyname('coluna3').value := a;
                   ....
query.fieldbyname('coluna3').value := a;
Query.post;
end;
log.lines.add('Fim Banco B - tabela 1:'+formatdatetime('hh:mm:ss.zzz', now));
....
///muda o banco
...
log.lines.add('Inicio Banco C - tabela 1:'+formatdatetime('hh:mm:ss.zzz', now));
Query.Open;
for x:=1 to y do
begin
Query.append;
query.fieldbyname('coluna1').value := a;
query.fieldbyname('coluna2').value := a;
query.fieldbyname('coluna3').value := a;
                   ....
query.fieldbyname('coluna3').value := a;
Query.post;
end;
log.lines.add('Fim Banco C - tabela 1:'+formatdatetime('hh:mm:ss.zzz', now));
....

/// Próxima tabela
...

Bem, usando primeiramente Drivers ODBC/ADO para o Postgre e para o
Firebird ( pois a aplicação que será migrada usa ADO)  e somando-se os
tempos para cada banco, o resultado foi:

MSSQL Server : 31s
Firebird : 1m 30s
PostgreSQL: 6m

Em seguida, usando componentes ZeosDB para o Postgre e para o
Firebird, e mantendo o ADO para o MS SQL,  e somando-se os tempos para
cada banco, o resultado foi (sem campos blob):

MSSQL Server : 19s
Firebird : 35s
PostgreSQL: 4m 48s

Sendo Assim,

a) O PostgreSQL é tão lento assim ?!
b) Há como melhorar a performance do Firebird para aproximá-lo mais do
MS SQL? A diferença está beirando 100% mais lento...

Abraços

Jennecy Pereira
ServData Ltda




Mais detalhes sobre a lista de discussão lista