sql >> Base de Datos >  >> RDS >> PostgreSQL

Ajuste de PostgreSQL:aspectos clave para impulsar el rendimiento

PostgreSQL y rendimiento

El rendimiento es uno de los requisitos clave en el diseño de la arquitectura de software y ha sido el foco de atención de los desarrolladores de PostgreSQL desde sus inicios, como también se muestra en la siguiente confirmación de las fuentes Git de PostgreSQL:

commit d31084e9d1118b25fd16580d9d8c2924b5740dff
Author: Marc G. Fournier <[email protected]>
Date:   Tue Jul 9 06:22:35 1996 +0000

   Postgres95 1.01 Distribution - Virgin Sources

[...]

diff --git a/src/backend/access/heap/stats.c b/src/backend/access/heap/stats.c
new file mode 100644
index 0000000000..d41d01ac1b
--- /dev/null
+++ b/src/backend/access/heap/stats.c
@@ -0,0 +1,329 @@
+/*-------------------------------------------------------------------------
+ *
+ * stats.c--
+ *    heap access method debugging statistic collection routines
+ *
+ * Copyright (c) 1994, Regents of the University of California

[...]

+ * Also note that this routine probably shouldn't have to exist, and does
+ * screw up the call graph rather badly, but we are wasting so much time and
+ * system resources being massively general that we are losing badly in our
+ * performance benchmarks.
+ */

PostgreSQL logra rendimiento mediante la implementación de varias características:

  • Varios tipos de índice
  • Planificador y optimizador de consultas que puede aprovechar los sistemas multiprocesadores
  • MVCC
  • División de tablas

Selección del entorno

Con las muchas opciones disponibles hoy en día surgen muchas preguntas:

  • ¿En las instalaciones o en la nube?
  • ¿Metal desnudo o virtualizado?
  • ¿Hardware de marca o construir uno propio?
  • ¿Cómo afectan las funciones de bajo nivel de PostgreSQL o fsync al rendimiento del hardware?
  • ¿Disco local o almacenamiento compartido?
  • ¿Qué ajustes del sistema operativo deben configurarse?

Una vez más, la wiki de PostgreSQL es un muy buen punto de partida para todo lo relacionado con el rendimiento.

¿Cuáles son las cosas clave que hay que buscar?

Dado que hay mucha literatura sobre varios aspectos del ajuste del rendimiento y el diseño del sistema de PostgreSQL (pista:busque xfs en la página), este blog no pretende ser una inmersión profunda en ninguno de los temas ya discutidos, sino más bien una La perspectiva del administrador de sistemas sobre dónde comenzar cuando el enfoque principal es evitar la contención de recursos. También señalaré muchas referencias que abordan temas específicos con más detalle. El asesoramiento de expertos en todas las áreas críticas para el rendimiento de PostgreSQL está disponible a través de las numerosas empresas que ofrecen servicios profesionales.

¡Comencemos!

Recopilación de información

Suponiendo una instalación predeterminada y sabiendo que PostgreSQL no intenta estar bien ajustado desde el primer momento y que incluso puede haber algunas peculiaridades, este paso implica configurar las herramientas de monitoreo necesarias.

Un buen monitoreo es fundamental para comprender la aplicación y poder rastrear rápidamente los recursos afectados, y esto es particularmente cierto para los proveedores de la nube donde el acceso al host de la base de datos puede no estar disponible para ejecutar puntos de referencia para CPU o E/S:

Fig.1:SlideShare, Jignesh Shah, mejores prácticas con PostgreSQL administrado en la nube

Reacción a las alertas de rendimiento del sistema

Las herramientas de monitoreo generarán gráficos y alertarán sobre los indicadores de rendimiento del sistema:

UPC:

  • Alerta:un uso elevado indica una consulta de ejecución prolongada.
    • Impacto:tiempo de respuesta de la aplicación.
    • Acción:revise las métricas de las estadísticas de la base de datos para identificar las consultas que necesitan ajuste.

E/S:

  • Alerta:número alto o lecturas.
    • Impacto:tiempo de respuesta de la aplicación.
    • Acción:agregue otra réplica de lectura. Revise las métricas de estadísticas de la base de datos para identificar consultas de ejecución prolongada.
  • Alerta:número elevado de escrituras.
    • Impacto:tiempo de respuesta de la aplicación.
    • Acción:ajuste los parámetros GUC shared_buffers, work_mem y maintenance_work_mem. Sintonice el punto de control y asegúrese de que el vacío automático esté ajustado correctamente. Si PostgreSQL está instalado en su propio hardware, configure los espacios de tabla y/o considere la fragmentación, pero comprenda las advertencias sobre la fragmentación.

Memoria:

  • Alerta:alto uso de memoria.
    • Impacto:rendimiento de E/S.
    • Acción:revise las métricas de las estadísticas de la base de datos para identificar las consultas que necesitan ajuste.

Red:

  • Alerta:latencia alta. Por lo general, este es un problema de DBaaS.
    • Impacto:clientes, replicación.
    • Acción:reubique los hosts de la base de datos más cerca de los servidores front-end.
  • Alerta:número elevado de conexiones.
    • Impacto — Clientes.
    • Acción:considere usar el sondeo de conexión.

Indicadores de rendimiento interno de la base de datos

Las vistas pg_* son la ventana al rendimiento del motor de la base de datos, y las aplicaciones de administración de PostgreSQL se han escrito para ayudar a correlacionar la gran cantidad de información que de otro modo estaría disponible a través de varias consultas SQL. Existen extensiones adicionales y, a menudo, están integradas o disponibles como complementos.

El uso de tales herramientas simplifica la tarea de DBA y garantiza que se sigan las mejores prácticas al instalar y configurar el clúster de la base de datos.

Estadísticas de la base de datos

Las herramientas de monitoreo como ClusterControl usan estadísticas de actividad de la base de datos para ayudar al DBA con el ajuste del rendimiento:

Fig.2:Varios nueves, puntos clave para monitorear en PostgreSQL:análisis de su carga de trabajoDescargue el documento técnico hoy Administración y automatización de PostgreSQL con ClusterControlObtenga información sobre lo que necesita saber para implementar, monitorear, administrar y escalar PostgreSQLDescargar el Whitepaper

Ajuste de consultas

A partir de la versión 9.5, PostgreSQL incluye mejoras considerables en el rendimiento de las consultas, como índices BRIN y consultas paralelas:

Fig.3:2ndQuadrant, Thomas Vondra, mejoras de rendimiento en PostgreSQL 9.5 (y posteriores)

Bloqueo

El control de concurrencia está dedicado un capítulo completo en la documentación de PostgreSQL. Utilice las herramientas de supervisión para recibir alertas cuando la cantidad de bloqueos o la duración del bloqueo exceda el umbral y resuelva el problema buscando índices faltantes, revisando el código de la aplicación o cambiando a sondeo de conexión.

Carga a granel

synchronous_commit se puede desactivar durante las importaciones de datos de gran tamaño. Se analizan más opciones en la sección de documentación de PostgreSQL Cómo llenar una base de datos.

Conclusión

El ajuste del rendimiento de PostgreSQL es una tarea compleja. La complejidad proviene de los muchos ajustes disponibles, lo cual es un fuerte argumento a favor de PostgreSQL. No existe una bala de plata para resolver los problemas de rendimiento, sino que son los detalles de la aplicación los que finalmente dictan los requisitos de ajuste. Por lo tanto, las herramientas de monitoreo pueden ayudar a obtener información sobre el rendimiento en relación con el rendimiento del sistema y además permiten identificar las áreas específicas de PostgreSQL que necesitan ajuste, así como las consultas SQL que requieren optimización. Además, los sistemas de administración de bases de datos pueden ayudar con la configuración y administración de PostgreSQL para garantizar que se sigan las mejores prácticas.