Re: [pgbr-geral] Melhorar performance

2009-07-28 Por tôpico Euler Taveira de Oliveira
Sergio Santi escreveu:
 OK, lá vai.
 
 Postgres.conf
 
 Parâmetro  Padrão ServLentoServRápido
 max_connections   10070   100
 shared_buffers 32MB1000MB  32MB
 work_mem1MB  64MB   1MB
 maintenance_work_mem   16MB 256MB  16MB
 max_fsm_pages  204800   100204800
 max_fsm_relations1000  2000  2000
 checkpoint_segments 3 310
 enable_seqscan on   off   off
 enable_tidscan on   off   off
 effective_cache_size  128MB 256MB 128MB
 
 Consulta usada tanto no ServLento quanto no ServRapido
 
A causa da lentidão é que os planos estão pegando índices diferentes. O índice
NotaFiscal_Impressora_Intervencao_Cupom_I escolhido para consulta lenta está
com uma estimativa totalmente errada.
Os índices NotaFiscal_Impressora_Intervencao_Cupom_I,
NotaFiscal_CodigoOperacaoEstoque_I e NotaFiscal_DataEmissao_I estão com
estimativas fora da realidade. Você fez um REINDEX neles? Você tentou aumentar
o default_statistics_target das colunas que participam do índice para ver se
as estimativas melhoram?
Além disso, eu *não* aconselharia desabilitar _seqscan_ nem _tidscan_. Mas
aconselharia aumentar o effective_cache_size e checkpoint_segments.


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-28 Por tôpico Prof. Benedito A. Cruz
Euler Taveira de Oliveira escreveu:
 Sergio Santi escreveu:
   
 OK, lá vai.

 Postgres.conf

 Parâmetro  Padrão ServLentoServRápido
 max_connections   10070   100
 shared_buffers 32MB1000MB  32MB
 work_mem1MB  64MB   1MB
 maintenance_work_mem   16MB 256MB  16MB
 max_fsm_pages  204800   100204800
 max_fsm_relations1000  2000  2000
 checkpoint_segments 3 310
 enable_seqscan on   off   off
 enable_tidscan on   off   off
 effective_cache_size  128MB 256MB 128MB

 Consulta usada tanto no ServLento quanto no ServRapido

 
 A causa da lentidão é que os planos estão pegando índices diferentes. O índice
 NotaFiscal_Impressora_Intervencao_Cupom_I escolhido para consulta lenta está
 com uma estimativa totalmente errada.
 Os índices NotaFiscal_Impressora_Intervencao_Cupom_I,
 NotaFiscal_CodigoOperacaoEstoque_I e NotaFiscal_DataEmissao_I estão com
 estimativas fora da realidade. Você fez um REINDEX neles? Você tentou aumentar
 o default_statistics_target das colunas que participam do índice para ver se
 as estimativas melhoram?
 Além disso, eu *não* aconselharia desabilitar _seqscan_ nem _tidscan_. Mas
 aconselharia aumentar o effective_cache_size e checkpoint_segments.


   
Isso implica que nem sempre um servidor com hardware melhor e mais 
rápido e configurações maiores de PostgreSQL vai oferecer uma resposta 
mais rápida? Isto é, sob condições mais apertadas o PostgreSQL faz 
estimativas melhores e mais eficientes?

-- 
Benedito A. Cruz
Centro de Referência em Informação Ambiental - CRIA
email b...@cria.org.br
fone 55 19 3288 0466 


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-28 Por tôpico Fábio Telles Rodriguez

 Isso implica que nem sempre um servidor com hardware melhor e mais
 rápido e configurações maiores de PostgreSQL vai oferecer uma resposta
 mais rápida? Isto é, sob condições mais apertadas o PostgreSQL faz
 estimativas melhores e mais eficientes?

Isto significa que tuning é algo mais complexo do que se imagina e que
fazer inferências sem todas as informações necessárias faz com que nós
incorramos em erros graves. O Euler pediu mais informações, no e-mail
anterior. Sem elas, fica difícil saber realmente o que está ocorrendo.
São muitas variáveis interagindo ao mesmo tempo para se afirmar
qualquer coisa.
 []s

 --
 Benedito A. Cruz
 Centro de Referência em Informação Ambiental - CRIA
 email b...@cria.org.br
 fone 55 19 3288 0466


 --
 This message has been scanned for viruses and
 dangerous content by MailScanner, and is
 believed to be clean.

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
blog: http://www.midstorm.org/~telles/
e-mail / jabber: fabio.tel...@gmail.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-28 Por tôpico Sergio Santi




Pessoal:

Eu imaginava ter enviado as informaes solicitadas. Inclusive estava
estranhando a demora de uma resposta, mas queria ficar incomodando. Se
houver mais alguma informao que eu possa fornecer no exitem em dizer?

Abraos,

Fbio Telles Rodriguez escreveu:

  
Isso implica que nem sempre um servidor com hardware melhor e mais
rpido e configuraes maiores de PostgreSQL vai oferecer uma resposta
mais rpida? Isto , sob condies mais "apertadas" o PostgreSQL faz
estimativas melhores e mais eficientes?


  
  Isto significa que tuning  algo mais complexo do que se imagina e que
fazer inferncias sem todas as informaes necessrias faz com que ns
incorramos em erros graves. O Euler pediu mais informaes, no e-mail
anterior. Sem elas, fica difcil saber realmente o que est ocorrendo.
So muitas variveis interagindo ao mesmo tempo para se afirmar
qualquer coisa.
 []s

  
  
--
Benedito A. Cruz
Centro de Referncia em Informao Ambiental - CRIA
email b...@cria.org.br
fone 55 19 3288 0466


--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


  
  


  


-- 
Sergio Medeiros Santi



___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-28 Por tôpico Euler Taveira de Oliveira
Sergio Santi escreveu:
 Eu imaginava ter enviado as informações solicitadas. Inclusive estava
 estranhando a demora de uma resposta, mas queria ficar incomodando. Se
 houver mais alguma informação que eu possa fornecer não exitem em dizer?
 
As informações eu solicitei em [1]. Execute o que está lá e depois publique o
que conseguiu.

[1] http://listas.postgresql.org.br/pipermail/pgbr-geral/2009-July/016610.html


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-14 Por tôpico Mozart Hasse
Euler,

Eu escrevi:
  No meu caso o que sempre fez e continua fazendo uma falta desgraçada no
  Postgres é um otimizador decente (...) Bem que se podia aproveitar a
idéia aplicada no
  Oracle ou no SQL Server e ter um cache de planos (...)

 Isso já existe: chama-se comandos preparados (aka _prepared statements_).

Isso ??!
http://jdbc.postgresql.org/documentation/83/server-prepare.html

Não, não estou falando de algo tão simplório. Prepared statements têm
diversas desvantagens em relação ao que o Oracle e o SQL Server fazem:

* Prepared statements funcionam dentro da mesma conexão. Logo, consultas
idênticas feitas por instâncias diferentes da mesma aplicação ou
aplicações diferentes que façam as mesmas consultas continuarão tendo um
custo alto recompilando dúzias de vezes os mesmos comandos. Isso, é claro,
assumindo que eu me dê ao trabalho de mexer na minha aplicação para fazer
todas as consultas através da mesma conexão. O ganho disso seria bastante
questionável considerando que isso implica em serializar operações que
podem correr em paralelo.

* Da documentação:
(...)
Server side prepared statements are planned only once by the server. This
avoids the cost of replanning the query every time, but also means that the
planner cannot take advantage of the particular parameter values used in a
particular execution of the query. 
(...)
Logo, Prepared statements usam o mesmo plano independente dos valores, o que
resulta em desastre. Isso é exatamente o *oposto* do que se espera de um
otimizador decente. O otimizador deveria ter uma lista de planos para a mesma
consulta e usar o mais adequado para cada uma.

 É claro que você precisa manter a conexão mas nada que um aglomerador de
 conexões (aka _pool_) não resolva.

Como expus acima, fazer isso, ainda por cima em larga escala, resulta em
desastre.

 Como você mesmo disse, o tempo é relativamente pequeno em aplicações Web
e
 OLTP; em OLAP, algumas consultas com dezenas de junções esse tempo é
 significativo (aumenta 2^n mas é para isso que temos o GEQO) mas mesmo
assim
 bem inferior ao de execução da consulta.

Dezenas de junções não são exclusividade de aplicações OLAP, muito pelo
contrário.
O fato de uma consulta cheia de junções exigir um enorme tempo de
planejamento de forma alguma implica em não valer a pena gastá-lo fazendo
isso. É exatamente nessas tabelas potencialmente grandes e cheias de índices
que uma escolha errada do otimizador resulta em planos catastróficos.
 
 É fácil falar do otimizador mas é difícil mexer nele. ;)

Ora, ora, pelo menos nisso concordamos integralmente. A pergunta do tópico
foi quanto ao que se poderia melhorar em desempenho, só estou expondo a lista
para resolver os *meus* problemas. Afinal, custa-me acreditar que sou o único
interessado em desempenho por aqui.

 Já tivemos essa discussão a um tempo atrás (...). Se eu me lembro bem,
nenhuma das
 consultas apresentadas por você produzia um plano que não era ideal.

Depende do que chamarmos de ideal. Para mim o ideal é medir as consultas em
milissegundos para poder comparar com Oracle e SQL Server, e não em minutos.
OK, de fato não tenho no momento exemplos usando a última versão do
Postgres, quando tiver passo para a lista. Fazer testes comparativos de
desempenho é algo que consome tempo que é dificílimo de conseguir
considerando nossas experiências anteriores.

Atenciosamente,


Mozart Hasse


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-14 Por tôpico Sergio Santi




Pessoal,

Eu imagino ter participado da discusso ocorrida "h um tempo atrs" e
 claro que como j fui e muitas vezes continuo sendo vtima de planos
mal escolhidos tenho um detalhe a acrescentar:

Um servidor Dell PowerEdge 1800, dual zeon, 4GB, 4 hds SAS em raid 10
executou uma consulta que mostra o valor faturado em 40 impressoras
fiscais em um nico dia classificado por impressora fiscal em uns 4 a 5
minutos.

Um desktop core2duo, 4GB, 1 hd sata2 executou a mesma consulta sobre um
backup do primeiro equipamento restaurado no segundo em 1segundo.

Os planos de execuo so muitssimo diferentes e comparando o
postgres.conf de cada um, respectivamente, temos as seguintes
diferenas principais:

max_connections =  
 70 100
shared_buffers = 1000MB  32MB
work_mem = 64MB 1MB
maintenance_work_mem = 256MB   16MB
max_fsm_pages = 100 324000
checkpoint_segments = 310
effective_cache_size = 256MB 128M

Nas prximas semanas pretendo realizar novos testes, mas no  a
primeira vez que vejo isto e por isto se v tanto ajuste pelo mtodo de
tentativa e erro.

Abraos,


Mozart Hasse escreveu:

  Euler,

Eu escrevi:
  
  

  No meu caso o que sempre fez e continua fazendo uma falta desgraada no
Postgres  um otimizador decente (...) Bem que se podia aproveitar a
  

  
  idia aplicada no
  
  

  Oracle ou no SQL Server e ter um cache de planos (...)
  

  
  
  
  
Isso j existe: chama-se comandos preparados (aka _prepared statements_).

  
  
Isso ??!
http://jdbc.postgresql.org/documentation/83/server-prepare.html

No, no estou falando de algo to simplrio. Prepared statements tm
diversas desvantagens em relao ao que o Oracle e o SQL Server fazem:

* Prepared statements funcionam dentro da mesma conexo. Logo, consultas
idnticas feitas por instncias diferentes da mesma aplicao ou
aplicaes diferentes que faam as mesmas consultas continuaro tendo um
custo alto recompilando dzias de vezes os mesmos comandos. Isso,  claro,
assumindo que eu me d ao trabalho de mexer na minha aplicao para fazer
todas as consultas atravs da mesma conexo. O ganho disso seria bastante
questionvel considerando que isso implica em serializar operaes que
podem correr em paralelo.

* Da documentao:
"(...)
Server side prepared statements are planned only once by the server. This
avoids the cost of replanning the query every time, but also means that the
planner cannot take advantage of the particular parameter values used in a
particular execution of the query. 
(...)"
Logo, Prepared statements usam o mesmo plano independente dos valores, o que
resulta em desastre. Isso  exatamente o *oposto* do que se espera de um
otimizador decente. O otimizador deveria ter uma lista de planos para a mesma
consulta e usar o mais adequado para cada uma.

  
  
 claro que voc precisa manter a conexo mas nada que um aglomerador de
conexes (aka _pool_) no resolva.

  
  
Como expus acima, fazer isso, ainda por cima em larga escala, resulta em
desastre.

  
  
Como voc mesmo disse, o tempo  relativamente pequeno em aplicaes Web

  
  e
  
  
OLTP; em OLAP, algumas consultas com dezenas de junes esse tempo 
significativo (aumenta 2^n mas  para isso que temos o GEQO) mas mesmo

  
  assim
  
  
bem inferior ao de execuo da consulta.

  
  
Dezenas de junes no so exclusividade de aplicaes OLAP, muito pelo
contrrio.
O fato de uma consulta cheia de junes exigir um enorme tempo de
planejamento de forma alguma implica em no valer a pena gast-lo fazendo
isso.  exatamente nessas tabelas potencialmente grandes e cheias de ndices
que uma escolha errada do otimizador resulta em planos catastrficos.
 
  
  
 fcil falar do otimizador mas  difcil mexer nele. ;)

  
  
Ora, ora, pelo menos nisso concordamos integralmente. A pergunta do tpico
foi quanto ao que se poderia melhorar em desempenho, s estou expondo a lista
para resolver os *meus* problemas. Afinal, custa-me acreditar que sou o nico
interessado em desempenho por aqui.

  
  
J tivemos essa discusso a um tempo atrs (...). Se eu me lembro bem,

  
  nenhuma das
  
  
consultas apresentadas por voc produzia um plano que no era ideal.

  
  
Depende do que chamarmos de "ideal". Para mim o ideal  medir as consultas em
milissegundos para poder comparar com Oracle e SQL Server, e no em minutos.
OK, de fato no tenho no momento exemplos usando a ltima verso do
Postgres, quando tiver passo para a lista. Fazer testes comparativos de
desempenho  algo que consome tempo que  dificlimo de conseguir
considerando nossas experincias anteriores.

Atenciosamente,


Mozart Hasse


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

  


-- 
Sergio Medeiros Santi



___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br

Re: [pgbr-geral] Melhorar performance

2009-07-14 Por tôpico Sergio Santi




OK, l vai.

Postgres.conf

Parmetro
Padro ServLento ServRpido
max_connections 100 70100
shared_buffers 32MB 1000MB 32MB
work_mem 1MB 64MB 1MB
maintenance_work_mem 16MB 256MB 16MB
max_fsm_pages 204800 100 204800
max_fsm_relations 1000 2000 2000
checkpoint_segments 3 3 10
enable_seqscan on off off
enable_tidscan on off off
effective_cache_size 128MB 256MB 128MB

Consulta usada tanto no ServLento quanto no ServRapido

EXPLAIN ANALYSE

SELECT
Count("NotaFiscal"."CodigoInternoNota")::Integer As Qtde,
 Sum("NotaFiscal"."TotalLiquidoNota")::Numeric(15,4) As
SubTotal, 
 Sum("NotaFiscal"."TotalNota")::Numeric(15,4) As
TotalNota,
 "NotaFiscal"."CodigoEmpresaNota"::Integer As
CodigoEmpresaNota,
 --Nmero da impressora j gravada na tabela de nota fiscal 
 "NotaFiscal"."NumeroImpressoraNota"::Varchar(10) As
NumeroImpressora,
 --Retorna o numero de serie da empressora, a partir da
impressora gravada na tabela de nota fiscal
 /*(Select "NumeroSerieECF"
 From "ECF"
 Where "CodigoEmpresaECF" = "NotaFiscal"."CodigoEmpresaNota"
 AND "CodigoECF" = "NotaFiscal"."NumeroImpressoraNota") As
"NumeroSerieImpressora",*/
 (Sum("NotaFiscal"."TotalLiquidoNota")::Numeric(15,4) /
Count("NotaFiscal"."CodigoInternoNota")::Integer)::Numeric(15,4) As
XMediaSubTotal,
 (Sum("NotaFiscal"."TotalNota")::Numeric(15,4) /
Count("NotaFiscal"."CodigoInternoNota")::Integer)::Numeric(15,4)
As XMediaTotal
 FROM "NotaFiscal" LEFT JOIN "Operacao" ON
"NotaFiscal"."CodigoOperacaoEstoqueNota" =
"Operacao"."CodigoInternoOperacoes"
 WHERE "Operacao"."TipoOperacoes" = 'V'
 AND "NotaFiscal"."ModuloOrigemNota" = 'TS-Fature'
 AND "NotaFiscal"."NumeroImpressoraNota" between '0001' and ''
 AND "NotaFiscal"."DataEmissaoNota" between '2009-05-01' and
'2009-05-30'
 AND "NotaFiscal"."SituacaoNota" is null
 GROUP BY CodigoEmpresaNota,NumeroImpressora
 ORDER BY NumeroImpressora,CodigoEmpresaNota

--

Resultado do explain analyse no ServLento

"GroupAggregate (cost=2696.13..2696.22 rows=1 width=54) (actual
time=638899.183..639115.314 rows=35 loops=1)"
" - Sort (cost=2696.13..2696.13 rows=1 width=54) (actual
time=638896.568..638945.504 rows=97965 loops=1)"
" Sort Key: "NotaFiscal"."NumeroImpressoraNota",
"NotaFiscal"."CodigoEmpresaNota""
" - Nested Loop (cost=2345.56..2696.12 rows=1 width=54)
(actual time=559508.579..638638.195 rows=97965 loops=1)"
" - Index Scan using "Operacao_CodigoInterno_PK" on
"Operacao" (cost=0.00..12.39 rows=1 width=4) (actual time=5.206..5.218
rows=1 loops=1)"
" Filter: (("TipoOperacoes")::text = 'V'::text)"
" - Bitmap Heap Scan on "NotaFiscal"
(cost=2345.56..2683.72 rows=1 width=58) (actual
time=559503.357..638516.721 rows=97965 loops=1)"
" Recheck Cond:
((("NotaFiscal"."NumeroImpressoraNota")::text = '0001'::text) AND
(("NotaFiscal"."NumeroImpressoraNota")::text = ''::text) AND
("NotaFiscal"."CodigoOperacaoEstoqueNota" =
"Operacao"."CodigoInternoOperacoes"))"
" Filter: ((("ModuloOrigemNota")::text =
'TS-Fature'::text) AND ("DataEmissaoNota" = '2009-05-01'::date) AND
("DataEmissaoNota" = '2009-05-30'::date) AND ("SituacaoNota" IS
NULL))"
" - BitmapAnd (cost=2345.56..2345.56 rows=85
width=0) (actual time=559003.403..559003.403 rows=0 loops=1)"
" - Bitmap Index Scan on
"NotaFiscal_Impressora_Intervencao_Cupom_I" (cost=0.00..1079.62
rows=16956 width=0) (actual time=205223.259..205223.259 rows=3374443
loops=1)"
" Index Cond:
((("NumeroImpressoraNota")::text = '0001'::text) AND
(("NumeroImpressoraNota")::text = ''::text))"
" - Bitmap Index Scan on
"NotaFiscal_CodigoOperacaoEstoque_I" (cost=0.00..1265.69 rows=16956
width=0) (actual time=353598.739..353598.739 rows=747641 loops=1)"
" Index Cond:
("NotaFiscal"."CodigoOperacaoEstoqueNota" =
"Operacao"."CodigoInternoOperacoes")"
"Total runtime: 639124.536 ms"

-

Resultado do explain analyse no ServRapido

"GroupAggregate (cost=971.00..971.08 rows=1 width=54) (actual
time=1153.322..1356.063 rows=35 loops=1)"
" - Sort (cost=971.00..971.00 rows=1 width=54) (actual
time=1151.227..1242.719 rows=89221 loops=1)"
" Sort Key: "NotaFiscal"."NumeroImpressoraNota",
"NotaFiscal"."CodigoEmpresaNota""
" - Nested Loop (cost=640.78..970.99 rows=1 width=54)
(actual time=453.271..841.699 rows=89221 loops=1)"
" - Index Scan using "Operacao_CodigoInterno_PK" on
"Operacao" (cost=0.00..12.36 rows=1 width=4) (actual time=0.063..0.070
rows=1 loops=1)"
" Filter: (("TipoOperacoes")::text = 'V'::text)"
" - Bitmap Heap Scan on "NotaFiscal"
(cost=640.78..958.62 rows=1 width=58) (actual time=453.201..793.978
rows=89221 loops=1)"
" Recheck Cond:
(("NotaFiscal"."CodigoOperacaoEstoqueNota" =
"Operacao"."CodigoInternoOperacoes") AND
("NotaFiscal"."DataEmissaoNota" = '2009-05-01'::date) AND
("NotaFiscal"."DataEmissaoNota" = '2009-05-30'::date))"
" Filter: ((("ModuloOrigemNota")::text =
'TS-Fature'::text) AND (("NumeroImpressoraNota")::text =
'0001'::text) AND (("NumeroImpressoraNota")::text = ''::text)
AND ("SituacaoNota" IS NULL))"
" - 

[pgbr-geral] Melhorar performance

2009-07-13 Por tôpico Marcelo Gomes
Pessoal,

Vou começar a fazer um estudo sobre como poderia melhorar a performance do
Postgresql.

Minhas idéias iniciais:

Idéia 1:
A base fica em um storage, com um sistema de arquivo compartilhado (GFS) e
duas ou mais máquinas grava e consulta na mesma base.

Idéia 2:
Um servidor faz o processo de gravação (insert / update) e replica para
outro servidor, onde todas as consultas seria feitas só neste segundo
servidor.

Alguém já fez algum estudo deste tipo? tem alguma outra ideia ?


Obrigado,

Marcelo Gomes
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-13 Por tôpico Renato Hernandez Alexandre - GMAIL
Bom dia a todos,

Esta é minha primeira participação na lista mas venho acompanhando de perto
os assuntos aqui tratados a pelo menos um ano. Gostaria de parabenizar a
todos pelo interesse e esforço em ajudar aqueles que encontram dificuldades
neste formidável banco de dados.

Só para por lenha na fogueira, a sua idéia 2, não iria gerar o processo de
gravação (insert/update) durante a replicação? Ou seja qual ganho com a
replicação?

[]'s
Renato

2009/7/13 Marcelo Gomes marcelogome...@gmail.com

 Pessoal,

 Vou começar a fazer um estudo sobre como poderia melhorar a performance do
 Postgresql.

 Minhas idéias iniciais:

 Idéia 1:
 A base fica em um storage, com um sistema de arquivo compartilhado (GFS) e
 duas ou mais máquinas grava e consulta na mesma base.

 Idéia 2:
 Um servidor faz o processo de gravação (insert / update) e replica para
 outro servidor, onde todas as consultas seria feitas só neste segundo
 servidor.

 Alguém já fez algum estudo deste tipo? tem alguma outra ideia ?


 Obrigado,

 Marcelo Gomes



 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-13 Por tôpico Fábio Telles Rodriguez
2009/7/13 Marcelo Gomes marcelogome...@gmail.com:
 Pessoal,

 Vou começar a fazer um estudo sobre como poderia melhorar a performance do
 Postgresql.

 Minhas idéias iniciais:

 Idéia 1:
 A base fica em um storage, com um sistema de arquivo compartilhado (GFS) e
 duas ou mais máquinas grava e consulta na mesma base.

Não funciona. Para isso, você teria que ter algo como um Oracle RAC
para resolver os problemas em relação ao que está no buffer de cada
uma das máquinas. Não funciona e a tentativa de tentar funcionar é
desastrosa. O que existe é um fail over onde apenas em um dos nós a
base está ativa e se o servidor apresentar problemas o outro nó sobe o
PostgreSQL lá e continua trabalhando.

 Idéia 2:
 Um servidor faz o processo de gravação (insert / update) e replica para
 outro servidor, onde todas as consultas seria feitas só neste segundo
 servidor.

Vai gerar over head para gerar a replicação. O Standby é uma forma de
replicação sem over head, mas no momento só temos o Warm Standby.
Quando tivermos o HOT STANDBY isto será viável. A equipe do PostgreSQL
tem se empenhado muito em tornar isto uma realidade, talvez na versão
8.5.

 Alguém já fez algum estudo deste tipo? tem alguma outra ideia ?

Primeiro descreva o tipo de carga da sua aplicação. Descubra quais são
os picos, defina os gargalos.

Onde está pegando? Disco, memória, processamento?

[]s
Fábio Telles


 Obrigado,

 Marcelo Gomes



 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





-- 
blog: http://www.midstorm.org/~telles/
e-mail / jabber: fabio.tel...@gmail.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-13 Por tôpico Marcelo Gomes
Na verdade o que pega aqui é memória...se colocar mais memória vai ficar bom
(isso já esta sendo providenciado) mas como tenho máquinas e um storage que
poderia usar para testes, e estou com tempo disponível, estava querendo ver
como poderia por mais de uma máquina para trabalhar e ter alguma melhora.

Já que as minhas duas idéias não iria funcionar... alguém tem alguma outra
idéia ??? quero aproveitar esta situação para explorar o postgres e gerar
alguns doc. :D

Obrigado,

Marcelo Gomes



2009/7/13 Fábio Telles Rodriguez fabio.tel...@gmail.com

 2009/7/13 Marcelo Gomes marcelogome...@gmail.com:
  Pessoal,
 
  Vou começar a fazer um estudo sobre como poderia melhorar a performance
 do
  Postgresql.
 
  Minhas idéias iniciais:
 
  Idéia 1:
  A base fica em um storage, com um sistema de arquivo compartilhado (GFS)
 e
  duas ou mais máquinas grava e consulta na mesma base.

 Não funciona. Para isso, você teria que ter algo como um Oracle RAC
 para resolver os problemas em relação ao que está no buffer de cada
 uma das máquinas. Não funciona e a tentativa de tentar funcionar é
 desastrosa. O que existe é um fail over onde apenas em um dos nós a
 base está ativa e se o servidor apresentar problemas o outro nó sobe o
 PostgreSQL lá e continua trabalhando.
 
  Idéia 2:
  Um servidor faz o processo de gravação (insert / update) e replica para
  outro servidor, onde todas as consultas seria feitas só neste segundo
  servidor.
 
 Vai gerar over head para gerar a replicação. O Standby é uma forma de
 replicação sem over head, mas no momento só temos o Warm Standby.
 Quando tivermos o HOT STANDBY isto será viável. A equipe do PostgreSQL
 tem se empenhado muito em tornar isto uma realidade, talvez na versão
 8.5.

  Alguém já fez algum estudo deste tipo? tem alguma outra ideia ?
 
 Primeiro descreva o tipo de carga da sua aplicação. Descubra quais são
 os picos, defina os gargalos.

 Onde está pegando? Disco, memória, processamento?

 []s
 Fábio Telles

 
  Obrigado,
 
  Marcelo Gomes
 
 
 
  ___
  pgbr-geral mailing list
  pgbr-geral@listas.postgresql.org.br
  https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
 
 



 --
 blog: http://www.midstorm.org/~telles/
 e-mail http://www.midstorm.org/%7Etelles/%0Ae-mail / jabber:
 fabio.tel...@gmail.com
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-13 Por tôpico Mozart Hasse
Marcelo,

 Já que as minhas duas idéias não iria funcionar... alguém tem alguma
outra
 idéia ??? quero aproveitar esta situação para explorar o postgres e
gerar
 alguns doc. :D

No meu caso o que sempre fez e continua fazendo uma falta desgraçada no
Postgres 
é um otimizador decente. Bem que se podia aproveitar a idéia aplicada no
Oracle ou no SQL Server e ter um cache de planos, reduzindo o número de
compilações. Esse tempo hoje é relativamente pequeno (e insuficiente) no
Postgres, exatamente porque ele precisa fazer isso a cada consulta. Se puder
gastar mais tempo e aproveitar esse processamento (como o Oracle e o SQL
Server fazem faz tempo), talvez ele se torne viável para mais aplicações.

Outra coisa que ajudaria bastante seria a coleta de estatísticas mais
detalhadas para uso do otimizador, como dados sobre correlação entre valores
de campos dentro da mesma tabela (como o Oracle e o SQL Server fazem faz
tempo). Isso obviamente consome um tempo, porém nem se compara com o
desperdício que o Postgres faz com as estimativas furadas dele.

Atenciosamente,

Mozart Hasse


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Melhorar performance

2009-07-13 Por tôpico Euler Taveira de Oliveira
Mozart Hasse escreveu:

[é meio off-topic ao assunto inicial mas...]

 No meu caso o que sempre fez e continua fazendo uma falta desgraçada no
 Postgres 
 é um otimizador decente. Bem que se podia aproveitar a idéia aplicada no
 Oracle ou no SQL Server e ter um cache de planos, reduzindo o número de
 compilações. Esse tempo hoje é relativamente pequeno (e insuficiente) no
 Postgres, exatamente porque ele precisa fazer isso a cada consulta. Se puder
 gastar mais tempo e aproveitar esse processamento (como o Oracle e o SQL
 Server fazem faz tempo), talvez ele se torne viável para mais aplicações.
 
Isso já existe: chama-se comandos preparados (aka _prepared statements_). É
claro que você precisa manter a conexão mas nada que um aglomerador de
conexões (aka _pool_) não resolva.
Como você mesmo disse, o tempo é relativamente pequeno em aplicações Web e
OLTP; em OLAP, algumas consultas com dezenas de junções esse tempo é
significativo (aumenta 2^n mas é para isso que temos o GEQO) mas mesmo assim
bem inferior ao de execução da consulta.

 Outra coisa que ajudaria bastante seria a coleta de estatísticas mais
 detalhadas para uso do otimizador, como dados sobre correlação entre valores
 de campos dentro da mesma tabela (como o Oracle e o SQL Server fazem faz
 tempo). Isso obviamente consome um tempo, porém nem se compara com o
 desperdício que o Postgres faz com as estimativas furadas dele.
 
É fácil falar do otimizador mas é difícil mexer nele. ;)

Já tivemos essa discussão a um tempo atrás mas em minha opinião, eu não
importo se o número de registros indicados na estimativa seja muito diferente
dos números reais (afinal de contas, é uma *estimativa*!); o que me
incomodaria é se por essa estimativa ser bem diferente do real, eu tenha um
plano de execução que não é o ideal. Se eu me lembro bem, nenhuma das
consultas apresentadas por você produzia um plano que não era ideal.


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral