¿Cómo puedo cronometrar consultas SQL usando psql?

238

Me gustaría comparar algunas consultas SQL contra mi base de datos PostgreSQL. ¿Hay alguna forma en que pueda cronometrar consultas SQL usando psql?

Jonas
fuente
44
Para obtener más detalles sobre la evaluación comparativa de las consultas de PostgreSQL: dba.stackexchange.com/q/42012/9622
Franck Dernoncourt

Respuestas:

321

Simplemente encienda el tiempo ingresando:

\timing

Caleb
fuente
1
Desde fuera bash, la opción "-c" de psqlno permite esta configuración. Puede hacer esto con algo como: psql --o /dev/null <<EOF \timing select 1 EOF
3manuek
66
O hazlopsql -c '\timing' -c 'select 1'
cdmckay
12

El tiempo que \timingregresa también incluye la latencia de la red, si se está conectando a un servidor remoto.

Cuando no desee eso y no necesite también la salida de la consulta, mejor uso EXPLAIN ANALYZE, que genera el plan de consulta con las estimaciones del planificador más los tiempos de ejecución reales.

por ejemplo, EXPLAIN ANALYZE SELECT foo from bar ;

Devi
fuente
1
... el único problema es que no recibe la salida de consulta normal.
dezso
2
Usar explain analyzetiempos de rendimiento que son aproximadamente el doble de lo que veo cuando lo uso \timing, que es lo contrario de lo que esperaría en base a los comentarios aquí con respecto a la latencia de la red. Sospecho que hay una sobrecarga en la ejecución normal de analyzeeso se suma al tiempo de consulta. Según los documentos, creo que eso EXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM barle dará más información útil sobre el tiempo. Consulte postgresql.org/docs/9.6/static/sql-explain.html para más detalles.
larsks