Quiero comparar una consulta que contiene una función definida por el usuario que he escrito para PostgreSQL. ¿Hay alguna forma estándar de ejecutar ese punto de referencia?
Sé que el tiempo se puede activar \timing
en el indicador de psql, pero idealmente me gustaría tener un script que se encargue de todo automáticamente: ejecutar la consulta varias veces, borrar el caché de PostgreSQL después de cada ejecución (probablemente reiniciando el PostgreSQL servicio), y generar el tiempo de ejecución promedio (y la memoria utilizada es una ventaja).
postgresql
benchmark
Franck Dernoncourt
fuente
fuente
pgbench
; puedes ejecutarlo con scripts personalizados para hacer algo de lo que quieras. Con un script de shell envoltorio para detener y reiniciar Pg y soltar el caché de disco del sistema operativo, tiene la mayor parte de lo que necesita.Respuestas:
La herramienta más utilizada es el comando SQL
EXPLAIN ANALYZE
, posiblemente con más opciones para obtener más detalles en la respuesta. Eso genera el plan de consulta con las estimaciones del planificador más los tiempos de ejecución reales.¿Por qué querrías borrar el caché? El caso de uso generalmente más probable es que el caché está poblado. Si aún desea seguir esa ruta, aquí hay una respuesta relacionada con SO .
Sin restablecer el caché, aquí hay dos formas simples de probar con muchas iteraciones:
UDF simple
O con entrada aleatoria: números aleatorios entre 0 y 5000 en el ejemplo:
O con una mesa de la vida real:
Funciones / consultas más complejas
Llamada:
Cuidado : ¡la consulta se ejecuta realmente!
Cuidado : no apto para uso público. Posible inyección de SQL.
Nuevamente, puede usar parámetros aleatorios si es necesario. Posiblemente con la
USING
cláusula deEXECUTE
.fuente