Postgres: ¿Cómo puedo ver todas las declaraciones SQL ejecutadas por el servidor de la base de datos?

23

Estoy en el proceso de revisar cada declaración SQL que una aplicación hace contra la base de datos, por razones de rendimiento. ¿Hay una manera fácil de registrar todas las declaraciones ejecutadas por el servidor de base de datos PostgreSQL? Gracias.

Jin Kim
fuente
En la siguiente explicación se explica cómo ver la consulta actual en ejecución tutorialdba.com/2016/11/pgstatactivity-view-explanation-in.html
nijam

Respuestas:

27

La opción de configuración que está buscando es log_statement = "all"(si solo desea las declaraciones), o log_min_statement_duration = <some number>si solo está buscando consultas "lentas" (para algún valor de "lento"). Consulte http://www.postgresql.org/docs/current/static/runtime-config-logging.html para obtener más detalles sobre la configuración de registro.

womble
fuente
1
El registro de todas las declaraciones es un asesino de rendimiento (como se indica en los documentos oficiales). Sin embargo, 8.4 tiene una buena característica de obtener explain analyzeuna consulta lenta en el empate que se ejecutó, es posible que desee comenzar a probar con esto ya que 8.4 aún no se ha lanzado, pero es una buena opción saber que sucedió en el momento de la ejecución , si la salida de analizar explicar está bien es probable que esté ejecutando en problemas con I / o o límites de CPU, pero al menos sabrás que no es la propia consulta
serverhorror
55
Realmente me gusta la opción log_statement = 'mod'. Solo muestra crea, actualiza y elimina, y omite todas las declaraciones de selección. Genial si estás tratando de descubrir qué código está modificando algún campo.
Don Kirkby el
5

El auto_explainmódulo es muy útil para esto. No solo registrará las declaraciones, registrará sus planes de ejecución e incluso puede registrar las declaraciones ejecutadas dentro de las funciones PL / PgSQL. El impacto en el rendimiento es bastante bajo a menos que habilite el análisis, en cuyo caso incurrirá en un poco de sobrecarga de tiempo para todas las consultas.

Ver auto_explainen la documentación.

Craig Ringer
fuente
Tenga en cuenta que "auto_explain" es un módulo, por lo que no se ejecuta en las bases de datos de AWS RDS Postgres :(
johntellsall
1
@johntellsall RDS admite auto_explain, está en su lista de módulos bendecidos. Consulte la documentación en docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Craig Ringer
3

Por supuesto, puede detectar las consultas más lentas usted mismo, pero le aconsejo que use pgFouine , un analizador de registros PostgreSQL. Es fácil de instalar y realmente útil.

Ejemplos de informes: aquí y aquí .

Severe_admin
fuente
Utilicé pgFouine en un proyecto e identifiqué varios lugares donde un índice ayudaría mucho.
Paul Tomblin