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

Monitoreo dinámico de instancias de PostgreSQL usando pg_top

El monitoreo de PostgreSQL puede, a veces, ser como tratar de pelear con el ganado en una tormenta eléctrica. Las aplicaciones se conectan y emiten consultas con tanta rapidez que es difícil ver lo que está sucediendo o incluso obtener una buena visión general del rendimiento del sistema, aparte del típico desarrollador que se queja de "las cosas van lentas, ¡ayuda!".

En artículos anteriores, hemos discutido cómo llegar a la fuente cuando PostgreSQL está actuando lento, pero cuando la fuente es específicamente consultas, el monitoreo de nivel básico puede no ser suficiente para evaluar lo que sucede en un entorno activo en vivo.

Ingrese pg_top, un programa específico de PostgreSQL para monitorear la actividad en tiempo real en una base de datos, así como ver información básica para el host de la base de datos. Al igual que el comando 'top' de Linux, ejecutarlo lleva al usuario a una pantalla interactiva en vivo de la actividad de la base de datos en el host, que se actualiza automáticamente en intervalos.

Instalación

La instalación de pg_top se puede hacer de las formas generalmente esperadas:administradores de paquetes e instalación de código fuente. La versión más reciente a partir de este artículo es 3.7.0.

Administradores de paquetes

Según la distribución de Linux en cuestión, busque pgtop o pg_top en el administrador de paquetes, es probable que esté disponible en algún aspecto para la versión instalada de PostgreSQL en el sistema.

Distribuciones basadas en Red Hat:

# sudo yum install pg_top

Distribuciones basadas en Gentoo:

# sudo apt-get install pgtop

Fuente

Si lo desea, pg_top se puede instalar a través de la fuente del repositorio git de PostgreSQL. Esto proporcionará cualquier versión deseada, incluso versiones más nuevas que aún no se encuentran en los lanzamientos oficiales.

Características

Una vez instalado, pg_top funciona como una vista muy precisa en tiempo real de la base de datos que está monitoreando y al usar la línea de comando para ejecutar 'pg_top' se iniciará la herramienta de monitoreo interactiva de PostgreSQL.

La herramienta en sí puede ayudar a arrojar luz sobre todos los procesos actualmente conectados a la base de datos.

Ejecutando pg_top

Lanzar pg_top es lo mismo que el comando "top" de estilo unix/linux, junto con la información de conexión a la base de datos.

Para ejecutar pg_top en un host de base de datos local:

pg_top -h localhost -p 5432 -d severalnines -U postgres

Para ejecutar pg_top en un host remoto, se requiere el indicador -r o --remote-mode y la extensión pg_proctab instalada en el propio host:

pg_top -r -h 192.168.1.20 -p 5432 -d severalnines -U postgres

Qué hay en la pantalla

Al iniciar pg_top, vemos una pantalla con bastante información.

Salida estándar de pg_top en Linux

Promedio de carga:
Al igual que el comando superior estándar, este promedio de carga para intervalos de 1, 5 y 15 minutos.

Tiempo de actividad:
La cantidad total de tiempo que el sistema ha estado en línea desde el último reinicio.

Procesos:
El número total de procesos de base de datos conectados, con un número de cuántos se están ejecutando y cuántos están inactivos.

Estadísticas de la CPU:
Las estadísticas de la CPU, que muestran el porcentaje de carga para el usuario, el sistema y la inactividad, buena información y porcentajes de espera.

Memoria:
La cantidad total de memoria utilizada, libre, en búfer y en caché.

Actividad de la base de datos:
Las estadísticas de la actividad de la base de datos, como las transacciones por segundo, la cantidad de reversiones por segundo, los búferes leídos por segundo, los búferes visitados por segundo, la cantidad de filas leídas por segundo y las filas escritas por segundo.

Actividad de E/S de base de datos:
La actividad de entrada y salida en el sistema, que muestra cuántas lecturas y escrituras por segundo, así como la cantidad de lecturas y escrituras por segundo.

Estadísticas del disco de la base de datos:
El tamaño total del disco de la base de datos, así como la cantidad de espacio libre.

Intercambio:
La información sobre el espacio de intercambio utilizado, si corresponde.

Procesos:
Una lista de procesos conectados a la base de datos, incluido cualquier tipo de proceso interno de vacío automático. La lista incluye el pid, la prioridad, la buena cantidad, la memoria residente utilizada, el estado de la conexión, la cantidad de segundos de CPU utilizados, el porcentaje de CPU y el comando actual que está ejecutando el proceso.

Funciones interactivas útiles

Hay un puñado de funciones interactivas en pg_top a las que se puede acceder mientras se está ejecutando. Se puede encontrar una lista completa ingresando un ?, que abrirá una pantalla de ayuda con todas las diferentes opciones disponibles.

Información del planificador

E - Plan de ejecución
Ingresar E proporcionará un mensaje para un ID de proceso para el cual mostrar un plan de explicación. Esto es equivalente a ejecutar “EXPLAIN ;” en la base de datos manualmente.

A - EXPLAIN ANALYZE (ACTUALIZAR/ELIMINAR seguro)
Ingresar A proporcionará un mensaje para un ID de proceso para el cual mostrar un plan EXPLAIN ANALYZE. Esto es equivalente a ejecutar “EXPLAIN ANALYZE ;” en la base de datos manualmente.

Descargue 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 documento técnico

Información del proceso

Q - Mostrar la consulta actual de un proceso
Al ingresar Q, se le solicitará un ID de proceso para mostrar la consulta completa.

I:muestra estadísticas de E/S por proceso (solo Linux)
Al ingresar I, cambia la lista de procesos a una pantalla de E/S, mostrando cada proceso de lectura, escritura, etc. en el disco.

L:muestra los bloqueos retenidos por un proceso
Ingresar L proporcionará una solicitud de ID de proceso para mostrar los bloqueos retenidos. Esto incluirá la base de datos, la tabla, el tipo de bloqueo y si se ha otorgado o no el bloqueo. Útil para explorar procesos de larga ejecución o en espera.

Información de relación

R:muestra las estadísticas de la tabla de usuarios.
Al ingresar R, se muestran las estadísticas de la tabla, incluidos los escaneos secuenciales, los escaneos de índice, las INSERCIONES, las ACTUALIZACIONES y las ELIMINACIONES, todas relevantes para la actividad reciente.

X - Mostrar estadísticas de índice de usuario
Al ingresar X, se muestran estadísticas de índice que incluyen escaneos de índice, lecturas de índice y recuperaciones de índice, todas relevantes para la actividad reciente.

Clasificación

La visualización se puede ordenar mediante cualquiera de los siguientes caracteres.
M - Ordenar por uso de memoria
N - Ordenar por pid
P - Ordenar por uso de CPU
T - Ordenar por tiempo

Las siguientes son entradas especificadas después de presionar o, lo que permite ordenar el índice, la tabla y las páginas de estadísticas de E/S también.
o - Especifique el orden de clasificación (cpu, tamaño, resolución, tiempo, comando)
estadísticas de índice (idx_scan, idx_tup_fetch, idx_tup_read)
         estadísticas de tabla (seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del)
      , readscr i/o stats, sysc, rsys , escribe, cescribe, comando)

Conexión / Manipulación de consultas

k - eliminar procesos especificados
Ingresar k proporcionará un aviso para un proceso o una lista de procesos de base de datos para eliminar.

r - renice un proceso (solo base de datos local, solo raíz)
Ingresar r proporcionará un mensaje para un valor agradable, seguido de una lista de procesos para establecer ese nuevo valor agradable. Esto cambia la prioridad de procesos importantes en el sistema.

Ejemplo:“renice 1 7004”

Diferentes usos de pg_top

Uso reactivo de pg_top

El uso general de pg_top es el modo interactivo, lo que nos permite ver qué consultas se están ejecutando en un sistema que está experimentando problemas de lentitud, ejecutar planes de explicación en esas consultas, mejorar las consultas importantes para que se completen más rápido o eliminar cualquier consulta que cause una ralentización importante. . En general, permite que el administrador de la base de datos haga muchas de las mismas cosas que se pueden hacer manualmente en el sistema, pero de una forma más rápida y todo en uno.

Uso proactivo de pg_top

Si bien no es demasiado común, pg_top se puede ejecutar en "modo por lotes", lo que mostrará la información principal discutida en el estándar y luego saldrá. Esto se puede programar para que se ejecute en ciertos intervalos, luego se puede enviar a cualquier proceso personalizado que se desee, analizar y generar alertas en función de lo que el administrador desee recibir alertas. Por ejemplo, si la carga del sistema es demasiado alta, si hay un valor de transacciones por segundo superior al esperado, cualquier cosa que un programa creativo pueda resolver.

En general, existen otras herramientas para recopilar y generar informes sobre esta información, pero tener más opciones siempre es algo bueno, y al tener más herramientas disponibles, se pueden encontrar las mejores opciones.

Uso histórico de pg_top

Al igual que el uso anterior, el uso proactivo, podemos crear una secuencia de comandos de pg_top en un modo por lotes para registrar instantáneas de cómo se ve la base de datos a lo largo del tiempo. Esto puede ser tan simple como escribirlo en un archivo de texto con una marca de tiempo, o analizarlo y almacenar la fecha en una base de datos relacional para generar informes. Esto permitiría encontrar más información después de un incidente importante, como un bloqueo de la base de datos a las 4 a.m. Cuantos más datos estén disponibles, más probable será que se encuentren los problemas.

Más información

La documentación del proyecto es bastante limitada y la mayor parte de la información está disponible en la página de manual de Linux, que se encuentra ejecutando 'man pg_top'. La comunidad de PostgreSQL puede ayudar con preguntas o problemas a través de las listas de correo de PostgreSQL o la sala de chat IRC oficial que se encuentra en freenode, nombre de canal #postgresql.