¿Existe un equivalente PostgreSQL del generador de perfiles de SQL Server?

82

Necesito ver las consultas enviadas a un servidor PostgreSQL. Normalmente, usaría el generador de perfiles de SQL Server para realizar esta acción en la tierra de SQL Server, pero todavía tengo que encontrar cómo hacerlo en PostgreSQL. Parece haber bastantes herramientas de pago, espero que haya una variante de código abierto.

BozoJoe
fuente

Respuestas:

59

Puede usar la configuración de configuración de log_statement para obtener la lista de todas las consultas en un servidor

https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement

Simplemente configure eso, y la ruta del archivo de registro y tendrá la lista. También puede configurarlo para que solo registre consultas de larga ejecución.

A continuación, puede tomar esas consultas y ejecutar EXPLAIN en ellas para averiguar qué está pasando con ellas.

https://www.postgresql.org/docs/9.2/static/using-explain.html

Joshua Smith
fuente
1
perfecto, lanzó una cola -f contra él
BozoJoe
3
Bueno, es difícil llamar a los archivos de registro .csv un "equivalente del generador de perfiles de SQL Server" ...
Feofilakt
31

Agregando a la respuesta de Joshua, para ver qué consultas se están ejecutando actualmente, simplemente emita la siguiente declaración en cualquier momento (por ejemplo, en la ventana de consulta de PGAdminIII):

SELECT datname,procpid,current_query FROM pg_stat_activity;

Salida de muestra:

     datname    | procpid | current_query
 ---------------+---------+---------------
  mydatabaseabc |    2587 | <IDLE>
  anotherdb     |   15726 | SELECT * FROM users WHERE id=123 ;
  mydatabaseabc |   15851 | <IDLE>
 (3 rows)
vladr
fuente
4
Con mi versión de PG (9.3), utilicé la siguiente consulta: SELECT datname, pid, usename, application_name, client_addr, query FROM pg_stat_activity; pg_stat_activity es una vista de la base de datos 'postgresql'
mrmuggles
3
SELECT client_addr, state_change, query FROM pg_stat_activity;
Dmitry Dyachkov
3
La longitud de la columna "consulta" es demasiado corta para mostrar consultas largas.
Dejan Janjušević
25

Descubrí pgBadger ( http://dalibo.github.io/pgbadger/ ) y es una herramienta fantástica que me salvó la vida muchas veces. Aquí hay un ejemplo de informe: http://dalibo.github.io/pgbadger/samplev4.html . Si lo abre y va al menú 'superior', puede ver las consultas más lentas y las consultas que consumen mucho tiempo. Luego puede pedir detalles y ver bonitos gráficos que le muestran las consultas por hora y si usa el botón de detalles, puede ver el texto SQL en una forma bonita. Entonces puedo ver que esta herramienta es gratuita y perfecta.

Giovanni Porcari
fuente
2
Muy buena herramienta. Usé
mrmuggles
5
Solo una nota, que la herramienta es solo para sistemas * nix, lo que apesta para los usuarios de Windows
Alex Klaus
+1 ya que el OP solicitó una herramienta como Sql Server Profiler, no opciones de configuración para extraer manualmente la información de rendimiento necesaria.
EAmez
17

Necesito ver las consultas enviadas a un servidor PostgreSQL

Como opción, si usa pgAdmin (en mi imagen es pgAdmin 4 v2.1). Puede observar las consultas a través de la pestaña "Panel de control": consulta pgadmin4 desde la aplicación, panel

Andrey Kotov
fuente
2
Esto no puede mostrar declaraciones SQL largas. El SQL se trunca.
Dejan Janjušević
0

Puede utilizar la extensión pg_stat_statements .

Si ejecuta la base de datos en la ventana acoplable, simplemente agregue este comando docker-compose.yml; de lo contrario, solo consulte las instrucciones de instalación para su configuración:

command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200

Y luego en la base de datos ejecute esta consulta:

CREATE EXTENSION pg_stat_statements;

Ahora para ver las operaciones que llevaron más tiempo ejecutar:

SELECT * FROM pg_stat_statements ORDER BY total_time/calls DESC LIMIT 10;

O juegue con otras consultas sobre esa vista para encontrar lo que está buscando.

Felipe Pereira
fuente