Cómo verificar / conocer las consultas de mayor ejecución

9

Me gustaría recopilar estadísticas sobre las consultas de mayor ejecución en mi base de datos.

Para eso necesito saber cómo puedo rastrear consultas para poder crear vistas o vistas materializadas para almacenar en caché los resultados de las consultas de mayor ejecución ya que tengo una gran base de datos.

mamesaye
fuente
1
¿Has comprobado aquí ?
Nelz
Por curiosidad, ¿qué tan grande es grande? Además, por "ejecución más alta", ¿quiere decir las consultas más frecuentes o las consultas más costosas? Y, con una vista simple, no ahorra nada a este respecto.
dezso
@ dezso: son 300k filas en la tabla principal. Lo más caro sería una prioridad, pero también quiero saber lo que se ejecuta con mayor frecuencia.
mamesaye
Como @a_horse_with_no_name ya dijo ... la extensión pg_stat_statements es probablemente lo que necesita.
Joishi Bodio

Respuestas:

8

Como alguien dijo en los comentarios, pg_stat_statements es la forma de obtener las estadísticas. Pon esto en tu postgresql.conf:

shared_preload_libraries = 'pg_stat_statements'

pg_stat_statements.max = 10000
pg_stat_statements.track = all

Luego ejecute esta consulta:

CREATE EXTENSION pg_stat_statements; 

Después de eso, esta consulta de muestra (copiada de los documentos vinculados anteriormente) le dará las estadísticas de las 5 consultas principales de todas las bases de datos :

SELECT query, calls, total_time, rows,
100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;

Si desea resultados para una sola base de datos , debe filtrar por el dbidcual puede obtener pg_databasepor nombre de base de datos. Agregue esta cláusula WHERE a la consulta anterior:

WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')

También podrías hacer una unión.

Cuando esté probando esto, puede ser una buena idea excluir las consultas a las tablas de estadísticas / esquemas, por ejemplo:

AND query not similar to '%( pg_|information_schema)%'

Hay un montón de herramientas gratuitas y comerciales que pueden ayudarlo a visualizar los datos.

Mate
fuente