Euler,

Mozart Hasse escreveu:
>> Com esse "talvez" minha
>> impressão é que nem você sabe o que poderia te convencer a mexer nesse 
>> valor.

> O *talvez* é porque é uma técnica empírica (sem embasamento teórico).
Eu
> e muitos concordam que o valor padrão é ridículo.

Ok, em qual lista as pessoas que decidem isso discutem ou discutiram esse 
assunto? Alguém que concorda que o valor padrão é ridículo já se
manifestou 
por lá?


>> Já falei anteriormente que não estou nem aí que o Postgres gaste o dobro
de
>> tempo planejando *todas* as consultas se no final ele fizer um plano 
>> decente, pois o processamento que ele vai desperdiçar fazendo o plano
errado 
>> nem se compara com o tempo de planejamento.

> Você não entendeu a minha colocação acima. Valor padrão não tem nada
a
> ver com um caso específico;

Sim, tem a ver com:
* o caso mais frequente (eu acho que meu caso é), ou
* com o caso que trará bom resultado para a maioria dos usuários (eu acho
que meu caso traz), ou 
* com o caso que trouxer menos problemas para a maioria dos usuários (eu acho
que meu caso traz muito pouco para justificar preocupações), ou
* qualquer outro critério que tenha algo a ver com os acima (eu acho que o
meu caso deveria se aplicar).

> ou você acha que todas as suas colunas vão
> precisar de um 'statistics_target' alto? 

Todas não, mas uma boa parte. Aliás, muito mais do que o suficiente para eu
achar que vale a pena calcular para *todas* a fim de que ele nunca fique com
pouca informação para estimar as que eu de fato preciso.

> E mais, (repetindo o que eu disse) para que gastar tanto tempo no
planejamento 
> se você consegue um resultado razoável em bem menos tempo? 

Porque nem todo mundo acha satisfatório o resultado "razoável" medido em
minutos, especialmente quando se coloca lado a lado com outros bancos de
dados, que na mesma máquina fazem a mesma consulta sobre a mesma estrutura e
os mesmos dados em poucos milissegundos.

> Lembre-se: a idéia é *estimar*.
> Na etapa de planejamento você não precisa de precisão (aka estatísticas
> altas) e sim de rapidez e um plano razoável porque a maior parte do
> tempo de execução deve ser gasta manipulando dados.
(...)
> Não adianta coletar tanta informação se o tempo para analisá-las é
> significativo em relação ao tempo de manipulação dos dados.

Pouco importa a proporção planejamento/execução, o que interessa é
atender a todas as consultas que chegam no menor tempo possível. Eu também
estou falando de poupar tempo, só que fazendo as coisas da maneira mais
inteligente. Usar estatísticas insuficientes é uma otimização precoce que
faz com que o servidor não faça mais nada além de manipular dados de
maneira ridiculamente ineficiente.

> Vale ressaltar que mesmo com estatísticas ruins, você pode ter consultas
> rápidas porque o planejador não sabe muita coisa a respeito de como
> estão armazenados os dados; 

Com estatísticas ruins, consultas rápidas serão fruto de *muita* sorte ou
um de sistema muito, *muito* simples. Não dá para contar com a sorte em
bases cheias de dados não-fictícios e tabelas interligadas.

>> Hum, finalmente uma "fundamentação" teórica, mesmo que seja do século
passado.

> Século passado? De quando você acha que é a teoria relacional?

Teoria relacional surgiu no século passado, só que de lá para cá algumas
pessoas andaram pensando a respeito e melhorando o que já existia. Olha só o
que o odiado concorrente fez para nunca, *nunca mesmo* ter uma mísera
consulta significativamente mais lenta do que o Postgres no meu ambiente de
testes:

http://www.microsoft.com/technet/prodtechnol/sql/2005/qrystats.mspx


> Se os valores forem bem distribuídos a estimativa é boa.

Sim, só que isso é no mundo perfeito, cuja proximidade só existe em sonhos.
Idealismo por idealismo, se valores fossem bem distribuídos, bancos de dados
nem precisariam de estatísticas.

> (i) inchaço da tabela do catálogo pg_statistic -- que pode provocar 
> demora na hora de obter os dados para análise

Sim, isso *pode* levar mais tempo. Agora, no meu caso não ter dados
estatísticos suficientes *garantidamente* deixou o servidor muito pior.

> (ii) tempo de processamento dos planos pode aumentar o tempo de 
> execução da consulta desnecessariamente.

Claro que *pode*. Só que no meu caso não ter dados estatísticos suficientes
*garantidamente* deixou o servidor muito pior.

> O modelo de custo do PostgreSQL foi desenhado para ser simples e
> eficiente. 

Nada contra simplicidade, só sou contra coisas *exageradamente* simples. Que
tal ser um pouco mais eficiente ao invés de ser apenas simples?

> Adicionar processamento desnecessário está fora dos planos do PostgreSQL.


Está fora dos meus planos também. Estou desde o começo da tópico
explicando de várias maneiras que ter mais informações estatísticas *não
é* desnecessário. Deu pra notar?

> Novamente eu concordo que o valor é baixo (e isto é por uma
> razão histórica); 

:-O 

(Acaso decidiram isso no século passado também?)

:-|

(Está escrito em pedra?!)

:-/

> Ninguém se aventurou a mostrar com distribuições de
> dados variadas que este valor não condiz com a realidade atual. 

Como já exposto anteriormente, aguardo divulgação de diretrizes de formato
aceitas pelo julgador para "me aventurar" nessa empreitada curiosamente
difícil de entender.

> É fato que esta área do SGBD precisa de novas idéias mas que ninguém se
aventurou a propor algo.

Ninguém *do Postgres*, você quer dizer.

Ok concluindo então: em qual lista as pessoas que decidem isso discutem ou
discutiram esse assunto? Alguém que concorda que o valor padrão é ridículo
já se manifestou por lá?


Mozart Hasse


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

Responder a