Como cronometrar consultas SQL usando o psql?

238

Gostaria de fazer o benchmark de algumas consultas SQL contra meu banco de dados PostgreSQL. Existe alguma maneira de cronometrar consultas SQL usando psql?

Jonas
fonte
4
Para mais detalhes sobre as consultas do PostgreSQL de benchmarking: dba.stackexchange.com/q/42012/9622
Franck Dernoncourt

Respostas:

321

Basta ativar o tempo digitando:

\timing

Caleb
fonte
1
Desde o bash, a opção "-c" de psqlnão permite essa configuração. Você pode fazer isso com algo como: psql --o /dev/null <<EOF \timing select 1 EOF
3manuek
6
Ou façapsql -c '\timing' -c 'select 1'
cdmckay
12

O tempo que \timingretorna também inclui a latência da rede, se você estiver se conectando a um servidor remoto.

Quando você não desejar isso e também não precisar da saída da consulta, use melhor EXPLAIN ANALYZE, que gera o plano de consulta com as estimativas do planejador, mais os tempos de execução reais.

por exemplo, EXPLAIN ANALYZE SELECT foo from bar ;

Devi
fonte
1
... o único problema é que você não recebe a saída normal da consulta.
Dez17
2
O uso de explain analyzetempos de produção aproximadamente o dobro do que eu vejo ao usar \timing, que é o oposto do que eu esperaria com base nos comentários aqui sobre a latência da rede. Suspeito que exista sobrecarga na execução normal analyzeque aumenta o tempo de consulta. Com base nos documentos, acho que EXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM barfornecerá informações de tempo mais úteis. Veja postgresql.org/docs/9.6/static/sql-explain.html para obter detalhes.
larsks