Pregunta

Estoy configurando una aplicación web con un back-end FreeBSD PostgreSQL.Estoy buscando alguna herramienta/técnica de optimización del rendimiento de la base de datos.

¿Fue útil?

Solución

página funciona bastante bien para mí.Y parece que hay un Puerto FreeBSD para ello.

Otros consejos

La optimización de la base de datos suele ser una combinación de dos cosas.

  1. Reducir el número de consultas a la base de datos.
  2. Reducir la cantidad de datos que deben analizarse para responder consultas

La reducción de la cantidad de consultas generalmente se realiza almacenando en caché datos no volátiles/menos importantes (p. ej."¿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 almacén de datos externo, más eficiente (memcached, redis, etc.).Si tiene información que requiere mucha escritura (p. ej.contadores de visitas) y no necesita ÁCIDO-semántica, también puede pensar en trasladarla de la base de datos de Postgres a almacenes 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 adopta la aplicación cuando se trata de trabajar con la base de datos.Véase por ejemplo el Paginación realizada al estilo Postgres. hablar por Markus Winand sobre cómo repensar el concepto de paginación para hacerlo más eficiente en la base de datos

Medición de consultas de forma lenta

Pero para comprender qué consultas se deben analizar primero, es necesario saber con qué frecuencia se ejecutan y durante cuánto tiempo se ejecutan en promedio.

Un enfoque para esto es registrar todas las consultas (o "lentas"), incluido su tiempo de ejecución, y luego analizar el registro de consultas.Una buena herramienta para esto es pgfouine que ya se ha mencionado anteriormente en esta discusión, desde entonces ha sido reemplazado por pgbadger que está escrito en un lenguaje más amigable, es mucho más rápido y se mantiene de manera más activa.

Ambos pgfouine y pgbadger sufren por el hecho de que necesitan habilitar el registro de consultas, lo que puede causar un impacto notable en el rendimiento de la base de datos o causarle problemas de espacio en el disco, además del hecho de que analizar el registro con la herramienta puede llevar bastante tiempo y no lo hará. brindarle información actualizada sobre lo que sucede en la base de datos.

Acelerarlo con extensiones

Para abordar estas deficiencias, ahora existen dos extensiones que rastrean el rendimiento de las consultas directamente en la base de datos: pg_stat_statements (que sólo 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" determinada (cadena de consulta menos todos los literales de expresión) y cuánto tiempo tardó en total.Debido al hecho de que esto se hace mientras se ejecuta la consulta, esto se hace de una manera muy eficiente, la sobrecarga medible fue inferior al 5 % en las pruebas comparativas sintéticas.

Dar sentido a los datos

La lista de consultas en sí es muy "seca" desde el punto de vista de la información.Se ha trabajado en una tercera extensión que intenta abordar este hecho y ofrecer una representación más agradable de los datos llamada pg_statsinfo (junto con pg_stats_reporter), pero es un poco complicado 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 lo puedes encontrar en https://pganalyze.com/.

Para ofrecer una descripción general concisa de herramientas y proyectos interesantes en el área de Monitoreo de Postgres, también comencé a compilar una lista en el Wiki Postgres que se actualiza periódicamente.

He usado pgtop un poco.Es bastante sencillo, pero al menos puedo ver qué consulta se está ejecutando para cada ID de proceso.

Probé pgfouine, pero si mal no recuerdo, es una herramienta fuera de línea.

También sigo el archivo psql.log y configuro los criterios de registro a un nivel en el que pueda ver las consultas problemáticas.

#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 realizar trabajos de administración general.No hace nada por usted, pero facilita la mayoría de las tareas y simplifica la revisión y configuración de su esquema.Encuentro que cuando uso una GUI, me resulta mucho más fácil detectar inconsistencias (como un índice faltante, criterios de campo, etc.).Es sólo uno de los dos programas que estoy dispuesto a utilizar VMWare en mi Mac.

Munin es bastante simple pero efectivo para obtener tendencias sobre cómo evoluciona y funciona la base de datos a lo largo del tiempo.En el kit estándar de Munin puede, entre otras cosas, monitorear 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 duración.

Fácil de configurar y comenzar y, si es necesario, puede escribir su propio complemento con bastante facilidad.

Consulte los últimos complementos de PostgreSQL que se incluyen con Munin aquí:

http://munin-monitoring.org/browser/branches/1.4-stable/plugins/node.d/

Bueno, lo primero que debe hacer es probar todas sus consultas desde psql usando "explicar" y ver si hay escaneos secuenciales que se puedan convertir en escaneos de índice agregando índices o reescribiendo la consulta.

Aparte de eso, estoy tan interesado en las respuestas a esta pregunta como usted.

Consulte 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

DBTuna http://www.dbtuna.com/postgresql_monitor.php Recientemente ha comenzado a admitir la monitorización de PostgreSQL.Lo usamos ampliamente para el monitoreo de MySQL, por lo que si proporciona lo mismo para Postgres, entonces también debería ser una buena opción para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top