Em Ter 03 Out 2006 02:20, você escreveu:
> marlon david de souza escreveu:
> > Temos um cliente que no servidor atual utiliza nosso sistema rodando
> > sob Firebird. São mais de 150 conexões simultâneas. Visto que o servidor
> > estava ficando sobrecarregado, ele adquiriu um novo servidor e pretendia
> > colocar neste o PostgreSQL. No entanto depois de convertida a base de
> > Firebird para PostgreSQL, ele relatou que a performance geral do sistema
> > rodando em Post é muito inferior a do Firebird. Já ajustei o
> > postgresql.conf ao hardware que ele tem, rodei vacuum analyze, analisei
> > as queryes, no entanto a performance não melhora. O post está, dependendo
> > o processo, de 2 até 7 vezes mais lento que o Firebird.
>
> Vamos tentar analisar algumas coisas...
>
> > Observações:
> >
> > - O Post foi compilado no proprio servidor.
> > - O sistema de arquivos utilizado é o RaiserFS.
> > - É utilizado Raid 10 de um total de 6 discos (3+3).
> > - É usado a técnologia SAS de acesso a disco (similar a SCSI).
> > - O Post está configurado para utilizar 4Gb de shared-memory.
> > - Grande parte de nosso sistema reside no próprio banco na forma de
> > funções em pg_sql.
> > - Em nenhum processo está sendo criado o diretório "pgsql_tmp".
>
> A compilação atualmente otimiza pouca coisa dependendo de como foi
> gerado o binário.
Foi feita a compilação padrão no próprio servidor.
> No sistema de arquivos, sugiro que utilize o ext3 ou
> xfs (este último tem provado maior eficiência); o reiserfs não tem uma
> performance muito boa com arquivos grandes.
Que tamanho seria esse?
> O RAID 10 é uma boa escolha
> (ele tem um performance muito boa). A máquina tem 4GB de RAM é isso?
Possui 8Gb, sendo configurado para usar 4Gb de shared-memory.
>
> Em que tipos de comandos o PostgreSQL é mais lento do que o Firebird?
> Pode citar exemplos?
Segue o código de uma função que em Post demora 97s e em Firebird demora 59s:
create type RET_TESTE as (
Pro numeric(9,0), Cci numeric(18,4)
);
create or replace function PCD_TESTE(
Prm_Emp varchar(500), Prm_Cdi numeric(9,0), Prm_Cdf numeric(9,0)
) returns setof RET_TESTE as $$
declare
Dcl_dData date;
result RET_TESTE;
MyCur1 refcursor;
begin
Dcl_dData := 'today';
open MyCur1 for select COD from GCEPRO02 where COD between Prm_Cdi and
Prm_Cdf;
loop
fetch MyCur1 into result.Pro;
exit when (not found);
select sum(CCI) from GCEITM01 where (MOD = 'E') and (PRO = result.Pro) and
(DTR <= Dcl_dData) into result.Cci;
if (result.Cci is null) then result.Cci := 0; end if;
return next result;
end loop;
close MyCur1;
return;
end;
$$ language 'plpgsql';
dados=# explain analyze select sum(cci) from pcd_teste(',1,',5000,5200);
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=15.00..15.01 rows=1 width=17) (actual
time=97612.109..97612.112 rows=1 loops=1)
-> Function Scan on pcd_teste (cost=0.00..12.50 rows=1000 width=17)
(actual time=97611.252..97611.623 rows=119 loops=1)
Total runtime: 97618.430 ms
(3 rows)
Observações:
- O servidor foi resetado antes de realizar o teste.
- A tabela GCEITM01 possui o seguinte índice: MOD, PRO, DTR.
- Uma analise das consultas que são feitas pela função mostrou que está sendo
usado os índices corretos.
- Os dados e o códigio da função em Firebird são idênticos ao do Post.
>
> Sugiro que leia o artigo do Josh Berkus (é meio antigo mais ainda é
> válido) [1]. Quando finalizar minha palestra para III FGSL sobre
> otimização do PostgreSQL, prometo que publico o endereço aqui. :-)
>
> [1] http://www.powerpostgresql.com/PerfList
Eu já tinha usado essas informações para configurar o Post.
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/
Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios