Quero comparar uma consulta que contém uma função definida pelo usuário que escrevi para o PostgreSQL. Existem maneiras padrão de executar essa referência?
Eu sei que o tempo pode ser ativado no \timing
prompt do psql, mas, idealmente, eu gostaria de ter um script que cuide de tudo automaticamente: executando a consulta algumas vezes, limpando o cache do PostgreSQL após cada execução (provavelmente reiniciando o PostgreSQL) serviço) e exibindo o tempo médio de execução (e a memória usada é uma vantagem).
postgresql
benchmark
Franck Dernoncourt
fonte
fonte
pgbench
; você pode executá-lo com scripts personalizados para fazer o que quiser. Com um script de shell de invólucro para parar e reiniciar a Pg e soltar o cache do disco do SO, você tem mais do que precisa.Respostas:
A ferramenta amplamente usada é o comando SQL
EXPLAIN ANALYZE
, possivelmente com mais opções para obter mais detalhes na resposta. Isso gera o plano de consulta com as estimativas do planejador mais os tempos de execução reais.Por que você deseja limpar o cache? O caso de uso geralmente mais provável é que o cache seja preenchido. Se você ainda deseja seguir esse caminho, aqui está uma resposta relacionada ao SO .
Não redefinindo o cache, aqui estão duas maneiras simples de testar com muitas iterações:
UDF simples
Ou com entrada aleatória - números aleatórios entre 0 e 5000 no exemplo:
Ou com uma mesa da vida real:
Funções / consultas mais complexas
Ligar:
Cuidado : a consulta é realmente executada!
Cuidado : Não é adequado para uso público. Possível injeção de SQL.
Novamente, você pode usar parâmetros aleatórios, se necessário. Possivelmente com a
USING
cláusula deEXECUTE
.fonte