2009-10-06 330 views
43

¿Es posible obtener un historial de consultas realizadas en postgres? y ¿es posible obtener el tiempo que tomó para cada consulta? Actualmente estoy intentando identificar consultas lentas en la aplicación en la que estoy trabajando.¿Es posible obtener un historial de consultas realizadas en postgres

estoy usando PostgreSQL 8.3.5

+3

Las etiquetas retrotraídas cambian porque esta no es una pregunta específica de sql. –

+1

Ver http://stackoverflow.com/questions/722221/how-to-log-postgres-sql-queries –

Respuesta

52

No hay historia en la base de datos en sí, si estás usando psql puede utilizar "\ s" para ver su historial de comandos allí.

Puede obtener consultas futuras u otros tipos de operaciones en los archivos de registro configurando log_statement en el archivo postgresql.conf. Lo que probablemente desee en su lugar es log_min_duration_statement, que si lo configura en 0 registrará todas las consultas y sus duraciones en los registros. Eso puede ser útil una vez que tus aplicaciones se pongan en funcionamiento; si estableces eso en un valor superior, solo verás las consultas de larga ejecución que pueden ser útiles para la optimización (puedes ejecutar EXPLAIN ANALYZE en las consultas que encuentres allí para descubrir por qué es lento).

Otra cosa útil que hay que saber en esta área es que si ejecutas psql y le dices "\ timing", se mostrará el tiempo que tarda cada instrucción. Así que si usted tiene un archivo sql que tiene este aspecto:

\timing 
select 1; 

se puede ejecutar con las banderas correctas y ver cada declaración intercalada con el tiempo que tomó. He aquí cómo y lo que el resultado es idéntico:

$ psql -ef test.sql 
Timing is on. 
select 1; 
?column? 
---------- 
     1 
(1 row) 

Time: 1.196 ms 

Esto es muy útil ya que no es necesario ser superusuario base de datos para usarlo, a diferencia de cambiar el archivo de configuración, y es más fácil de usar si está desarrollando nuevos codificar y quiere probarlo.

2

Si desea identificar consultas lentas, que el método es utilizar log_min_duration_statement configuración (en postgresql.conf o conjunto por base de datos con ALTER DATABASE SET).

Cuando haya registrado los datos, puede usar grep o algunas herramientas especializadas, como pgFouine o mi propia analyzer, que a pesar de esto no funciona bien.

0

FYI para aquellos que utilizan la interfaz de usuario Navicat:

debe configurar sus preferencias para utilizar un archivo como a where para almacenar el historial.

Si está en blanco, su Navicat estará en blanco.

enter image description here

PD: No tengo ninguna afiliación con o en asociación con Navicat o sus afiliados. Solo estoy buscando ayudar.

Cuestiones relacionadas