2014-04-25 11:17 GMT-03:00 Fabrízio de Royes Mello <[email protected]>
:

> O que pode estar ocorrendo é aquele $1 estar sendo substituido por algo
> do tipo '0 or 1=1' e dai vai levar a um seqscan em toda tabela.
>

Impossível no caso, $1 tem que ser substituído por um valor absoluto, não
parte de um comando.

Além disso, um seqscan "puro" (sem ordenação, junção, agregação, etc.) não
deveria gerar arquivos temporários. Eu desconfiei de bitmap-scan no início,
mas depois me lembrei que este cara também não gera arquivos temporários.

Junto com o pessoal do IRC, eu fiz uma lista de quais algoritmos poderiam
gerar arquivos temporários, e chegamos aos seguintes: Sort, Materialize,
CTEs, Hash Joins, Aggregate/GroupAggregate (com distinct/order by) e
WindowAgg. Não vejo como nenhuma dessas operações poderia ser gerada pela
consulta mencionada. Isso é realmente muito estranho, e sinceramente estou
começando a suspeitar de algum bug, a dificuldade é como iremos "debugar"
se não é facilmente reprodutível?

Acho que o auto_explain pode mesmo nos ajudar muito nesse caso, mas temos
que lembrar que a consulta tem que passar do tempo estipulado, acho bem
possível se está gerando mesmo esses temp files, mas talvez tenhas que
"ligar" para todos.

Se possível, seria interessante diminuir o valor do
log_min_duration_statements ou ainda "logar" tudo por um tempo (colocando
zero), assim podemos pegar o valor do $1 e ainda debugar outros problemas.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a