rendimiento - pg_stat_activity postgresql
Herramienta de monitoreo de rendimiento PostgreSQL (7)
Bueno, lo primero que debe hacer es probar todas sus consultas desde psql usando "explicar" y ver si hay escaneos secuenciales que se pueden convertir a escaneos de índice agregando índices o reescribiendo la consulta.
Aparte de eso, estoy tan interesado en las respuestas a esta pregunta como usted.
Estoy configurando una aplicación web con un back-end de FreeBSD PostgreSQL. Estoy buscando alguna herramienta / técnica de optimización del rendimiento de la base de datos.
pgfouine funciona bastante bien para mí. Y parece que hay un puerto FreeBSD para eso.
He usado pgtop un poco. Es bastante crudo, pero al menos puedo ver qué consulta se está ejecutando para cada ID de proceso.
Intenté pgfouine, pero si recuerdo, es una herramienta fuera de línea.
También agrupo el archivo psql.log y establezco los criterios de registro en un nivel en el que puedo ver las consultas con problemas.
#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements
# and their durations, > 0 logs only
# statements running at least this time.
También uso EMS Postgres Manager para hacer trabajo administrativo general. No hace nada por usted, pero facilita la mayoría de las tareas y hace que revisar y configurar su esquema sea más simple. Me parece que al usar una GUI, es mucho más fácil para mí detectar inconsistencias (como un índice faltante, criterios de campo, etc.). Es solo uno de los dos programas que estoy dispuesto a usar VMWare en mi Mac para usar.
Echa un vistazo a Lightning Admin, tiene una GUI para capturar declaraciones de registro, no es perfecta, pero funciona muy bien para la mayoría de las necesidades. http://www.amsoftwaredesign.com
Munin es bastante simple pero eficaz para obtener tendencias de cómo la base de datos evoluciona y se desempeña a lo largo del tiempo. En el kit estándar de Munin, usted puede, entre otras cosas, controlar el tamaño de la base de datos, el número de bloqueos, el número de conexiones, los escaneos secuenciales, el tamaño del registro de transacciones y las consultas de larga ejecución.
Fácil de configurar y para empezar, y si es necesario, puede escribir su propio plugin con bastante facilidad.
Consulte los últimos complementos de postgresql que se envían con Munin aquí:
http://munin-monitoring.org/browser/branches/1.4-stable/plugins/node.d/
DBTuna http://www.dbtuna.com/postgresql_monitor.php ha comenzado recientemente a soportar el monitoreo de PostgreSQL. Lo utilizamos extensamente para la supervisión de MySQL, por lo que si proporciona lo mismo para Postgres, entonces debería ser una buena opción para usted también.
La optimización de la base de datos suele ser una combinación de dos cosas
- Reducir el número de consultas a la base de datos
- Reduzca la cantidad de datos que deben examinarse para responder consultas
La reducción de la cantidad de consultas normalmente se realiza almacenando en caché datos no volátiles / menos importantes (por ejemplo, "¿Qué usuarios están en línea" o "¿Cuáles son las últimas publicaciones de este usuario?") Dentro de la aplicación (si es posible) o en un externo - más eficiente - datastore (memcached, redis, etc.). Si tiene información que es muy pesada para escribir (por ejemplo, contadores de visitas) y no necesita semántica ACID , también puede pensar en moverla de la base de datos de Postgres a tiendas de datos más eficientes.
Optimizar el tiempo de ejecución de la consulta es más complicado: esto puede equivaler a crear índices especiales (o índices en primer lugar ), cambiar (posiblemente desnormalizar) el modelo de datos o cambiar el enfoque fundamental que toma la aplicación cuando se trata de trabajar con la base de datos. Véase, por ejemplo, la paginación hecha por Markus Winand sobre el modo de hablar de Postgres sobre cómo repensar el concepto de paginación para que sea más eficiente en las bases de datos.
Medición de consultas por el camino lento
Pero para comprender qué consultas se deben analizar primero, se necesita saber con qué frecuencia se ejecutan y cuánto tiempo se ejecutan en promedio.
Un enfoque para esto es registrar todas las consultas (o "lentas") incluyendo su tiempo de ejecución y luego analizar el registro de consultas. Una buena herramienta para esto es pgfouine
que ya se mencionó anteriormente en esta discusión, desde entonces ha sido reemplazada por pgbadger
que está escrita en un lenguaje más amigable, es mucho más rápida y se mantiene de forma más activa.
Tanto pgfouine
como pgbadger
sufren el hecho de que necesitan habilitar el registro de consultas, lo que puede ocasionar un impacto notorio en la base de datos o problemas de espacio en el disco además de que analizar el registro con la herramienta puede llevar bastante tiempo. y no le dará información actualizada sobre lo que está pasando en la base de datos.
Acelerando con extensiones
Para abordar estas deficiencias, ahora hay dos extensiones que rastrean el rendimiento de las consultas directamente en la base de datos: pg_stat_statements
(que solo es útil en la versión 9.2 o posterior) y pg_stat_plans
. Ambas extensiones ofrecen la misma funcionalidad básica: realizar un seguimiento de la frecuencia con la que se ha ejecutado una "consulta normalizada" (cadena de consulta menos todos los literales de expresión) y cuánto tiempo tomó en total. Debido al hecho de que esto se hace mientras la consulta se ejecuta realmente, esto se hace de una manera muy eficiente, la sobrecarga medible fue inferior al 5% en puntos de referencia sintéticos.
Dar sentido a los datos
La lista de consultas en sí es muy "seca" desde una perspectiva de información. Se ha trabajado en una tercera extensión que trata de abordar este hecho y ofrece una mejor representación de los datos llamada pg_statsinfo
(junto con pg_stats_reporter
), pero es un poco de una empresa para ponerlo en funcionamiento.
Para ofrecer una solución más conveniente a este problema, comencé a trabajar en un proyecto comercial que se centra en pg_stat_statements
y pg_stat_plans
y aumenta la información recopilada por muchos otros datos extraídos de la base de datos. Se llama pganalyze
y puede encontrarlo en https://pganalyze.com/ .
Para ofrecer una descripción concisa de herramientas y proyectos interesantes en el área de Monitoreo de Postgres, también comencé a compilar una lista en el Wiki de Postgres que se actualiza regularmente.