Gostaria de fazer o benchmark de algumas consultas SQL contra meu banco de dados PostgreSQL. Existe alguma maneira de cronometrar consultas SQL usando psql
?
postgresql
benchmark
psql
Jonas
fonte
fonte
Respostas:
Basta ativar o tempo digitando:
\timing
fonte
psql
não permite essa configuração. Você pode fazer isso com algo como:psql --o /dev/null <<EOF \timing select 1 EOF
psql -c '\timing' -c 'select 1'
O tempo pode ser ativado no
\timing
prompt do psql (como Caleb já disse).Se você está na 8.4 ou acima, pode adicionar um argumento opcional on / off para
\timing
, o que pode ser útil se você deseja definir o tempo no .psqlrc - você pode definir\timing on
explicitamente em um script onde\timing
, caso contrário, a planilha alternaria issofonte
O tempo que
\timing
retorna 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 ;
fonte
explain analyze
tempos 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 normalanalyze
que aumenta o tempo de consulta. Com base nos documentos, acho queEXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM bar
fornecerá informações de tempo mais úteis. Veja postgresql.org/docs/9.6/static/sql-explain.html para obter detalhes.