Edición Studio /

Métricas

Conexiones, transacciones, caché, tamaño de las tablas, consultas lentas, sesiones, bloqueos y uso de índices de una conexión, en el tiempo. Edición Studio.

En esta página

Abrirlas#

En la edición Studio, pasa a Avanzado y elige Métricas en la barra lateral. La pantalla tiene cinco vistas: Resumen, Tablas, Consultas, Actividad e Índices. La vista y el periodo quedan en la dirección.

Cómo se toman#

Gresbase toma muestras de una conexión mientras alguien la usa. La primera petición a una conexión arranca su muestreo, que lanza una consulta pequeña cada GRESBASE_METRICS_INTERVAL (10s por defecto). Para cuando la conexión lleva GRESBASE_POOL_IDLE_TIMEOUT (10m) sin usarse, así que una base que nadie mira no cuesta nada.

  • Cada muestra lee el tamaño de la base, las sesiones cliente por estado frente a max_connections, los contadores de pg_stat_database (commits, rollbacks, aciertos y lecturas de caché, ficheros temporales, deadlocks), las sesiones que esperan un bloqueo y el retraso de replicación.
  • Las tasas, como las transacciones por segundo, se calculan entre dos muestras. Si se reinician las estadísticas, vuelven a empezar.
  • El historial dura GRESBASE_METRICS_RETENTION (24h), en memoria. Los periodos largos se resumen en 240 puntos con la media.
  • GRESBASE_METRICS_ALWAYS=true toma muestras de la conexión de DATABASE_URL desde el arranque y no para nunca un muestreo empezado.
  • GRESBASE_METRICS_PERSIST=true conserva el historial entre reinicios en GRESBASE_DATA_DIR/metrics/<conexión>.json, que se escribe cada 30 muestras y al parar el muestreo. Las sesiones del modo libre no se guardan.

Las cuatro variables están en Variables de entorno.

Resumen#

Arriba, cuatro cifras: Tamaño de la base, Conexiones (las usadas frente a max_connections y cuántas ejecutan una consulta), Transacciones por segundo en la última muestra y Aciertos de caché, de media en el periodo.

Debajo, gráficas de conexiones por estado (Activas, Inactivas, Inactivas en transacción), commits y rollbacks por segundo, aciertos de caché y tamaño de la base. Periodo elige 15 minutos, 1 hora, 6 horas o 24 horas, y las gráficas se actualizan en directo con cada muestra.

El resumen avisa cuando los aciertos de caché bajan del 99 %, cuando está en uso el 80 % o más de max_connections y cuando el rol no ve las sesiones de otros roles. Justo después del primer uso dice que está tomando las primeras muestras: las gráficas se llenan mientras usas la conexión.

Tablas#

Las 500 tablas y vistas materializadas más grandes, con tamaño total, datos, índices y TOAST, filas vivas, filas muertas con su porcentaje, y el último vacuum y analyze. Las filas muertas estiman el bloat: el espacio que VACUUM puede recuperar.

Consultas#

Las 200 consultas de esta base que registra pg_stat_statements, con llamadas, tiempo total, tiempo medio y filas. Ordenar por las ordena por Tiempo total, Tiempo medio o Llamadas. Abrir en el editor SQL lleva la consulta al editor.

Reiniciar estadísticas vacía pg_stat_statements tras una confirmación. Reinicia todas las bases del servidor, no solo esta.

El servidor tiene que cargar pg_stat_statements y la extensión tiene que estar creada en la base. Si falta algo, la vista explica qué. Con un contenedor postgres, añade la línea command al servicio de la base y recréalo:

docker-compose.yml
services:
  db:
    image: postgres:17
    command: ["postgres", "-c", "shared_preload_libraries=pg_stat_statements"]

Después crea la extensión una vez en la base, como superusuario, desde el editor SQL o desde Extensiones:

SQL
CREATE EXTENSION pg_stat_statements;

Actividad#

Las sesiones cliente del servidor, actualizadas cada 5 segundos: identificador de proceso, rol, estado, cuánto lleva la consulta y la consulta. Arriba salen las consultas de más de un minuto. Las sesiones que abre Gresbase llevan la etiqueta gresbase.

Árbol de bloqueos enseña qué sesiones esperan y, bajo cada una, la sesión que la bloquea (pg_blocking_pids).

Cada sesión tiene dos botones, y los dos piden confirmación:

  • Cancelar consulta detiene la consulta en curso con un error y revierte su transacción. La sesión sigue conectada (pg_cancel_backend).
  • Terminar sesión cierra la conexión y revierte lo que no esté confirmado (pg_terminate_backend). La aplicación puede volver a conectarse.

La sesión que atiende tu propia petición no tiene botones. En modo solo lectura no los tiene ninguna.

Índices#

  • Índices sin usar: ninguna lectura desde que se reiniciaron las estadísticas. Quedan fuera los índices únicos y las claves primarias, porque imponen reglas aunque nadie los lea.
  • Índices duplicados: índices de una misma tabla que hacen lo mismo.
  • Tablas grandes leídas secuencialmente: tablas de 10.000 filas o más que se leen secuencialmente más veces que por índice.

Permisos#

Qué Necesita
Resumen, tablas, índices Cualquier rol. Sin pg_monitor (o pg_read_all_stats), las sesiones de otros roles cuentan como «otras» y la replicación no se ve.
Actividad Cualquier rol. Sin pg_monitor ni pg_read_all_stats, el estado de las sesiones de otros roles sale como oculto y su consulta vacía.
Cancelar consulta, terminar sesión Las sesiones de tu propio rol. Para las de otros roles, pg_signal_backend. La sesión de un superusuario solo la puede tocar otro superusuario.
Consultas pg_stat_statements cargada y creada. Para ver el texto de las consultas de otros roles, pg_read_all_stats o pg_monitor.
Reiniciar estadísticas Por defecto, solo los superusuarios pueden ejecutar pg_stat_statements_reset.

Un rol solo para vigilar:

SQL
GRANT pg_monitor TO gresbase;
GRANT pg_signal_backend TO gresbase;  -- solo para cancelar o terminar sesiones

Más en Seguridad y red.