Cómo funcionan los informes de resumen de rendimiento
Los informes de resumen de rendimiento son una herramienta integrada de AlloyDB Omni que registra y analiza los datos de rendimiento para ayudarte a identificar la causa de los problemas de rendimiento.
Los informes de resumen de rendimiento muestran métricas de la base de datos entre dos marcas de tiempo en un solo informe. Puede usar la información del informe de resumen del rendimiento para identificar problemas de rendimiento con su instancia del informe de resumen del rendimiento, como una disminución del rendimiento de la base de datos en determinados momentos del día o una disminución del rendimiento durante un periodo determinado.
Con el informe de resumen del rendimiento, puede comparar las métricas con un valor de referencia del rendimiento para obtener información valiosa sobre las métricas de rendimiento de la carga de trabajo, que puede usar para optimizar o solucionar problemas de rendimiento de la base de datos. Una línea de base es un conjunto personalizado de instantáneas de la base de datos que mide el rendimiento y el comportamiento estándar de una base de datos para una configuración y una carga de trabajo específicas.
Para obtener información sobre los eventos de espera en el informe de resumen del rendimiento, consulta la referencia del informe de resumen del rendimiento de la base de datos.
Roles obligatorios
Asegúrate de que tienes el rol pg_monitor
.
Este rol se asigna a los superusuarios, que pueden conceder pg_monitor
a otros usuarios.
Por ejemplo, postgres
es el superusuario de forma predeterminada. Puedes ejecutar GRANT pg_monitor TO my_user
como postgres
para permitir que my_user
use la herramienta de instantánea de rendimiento, tal como se describe en este documento.
Instalar el informe de resumen de rendimiento
perfsnap
es el nombre del esquema que contiene funciones SQL que permiten a los usuarios hacer capturas o generar informes. Este esquema forma parte de la extensión g_stats
de AlloyDB Omni. Usa el rol de superusuario para instalar el informe de resumen de rendimiento.
Para usar las APIs de perfsnap
, conéctate a cualquier base de datos en la que los usuarios quieran instalar la extensión y crea la extensión g_stats
con el siguiente comando:
CREATE EXTENSION IF NOT EXISTS g_stats;
Crear una captura de métricas del sistema
Crea una captura al principio y al final de la carga de trabajo que te interese. El intervalo de tiempo entre las dos copias permite que la carga de trabajo avance lo suficiente para que el sistema pueda acumular métricas que reflejen la carga de trabajo. Una vez que haya obtenido las métricas del informe de resumen de rendimiento, puede hacer otro conjunto de capturas y repetir el proceso.
- Conecta un cliente
psql
a una instancia de AlloyDB. Ejecuta
SELECT perfsnap.snap()
. El resultado es similar al siguiente:postgres=# select perfsnap.snap(); snap ------ 1 (1 row)
Ver una lista de las vistas generales
- Conecta un cliente
psql
a una instancia de AlloyDB. Ejecuta
SELECT * FROM perfsnap.g$snapshots
. El resultado tiene un aspecto similar al siguiente:postgres=# select * from perfsnap.g$snapshots; snap_id | snap_time | instance_id | node_id | snap_description | snap_type | is_baseline ---------+-------------------------------+-------------+---------+--------------------+-----------+------------- 1 | 2023-11-13 22:13:43.159237+00 | sr-primary | | Manual snapshot | Manual | f 2 | 2023-11-13 22:53:40.49565+00 | sr-primary | | Automatic snapshot | Automatic | f (2 rows)
Generar un informe de resumen
Para generar un informe que muestre la diferencia entre las instantáneas 1 y 2, por ejemplo, ejecute SELECT perfsnap.report(1,2)
.
La segunda instantánea de una operación diferencial no tiene por qué seguir inmediatamente a la primera. Sin embargo, asegúrate de capturar la segunda instantánea en el diferencial después de la primera.
El informe de resumen de rendimiento generado tiene un aspecto similar al siguiente ejemplo abreviado:
Ejemplo de informe de resumen de rendimiento
$ psql -d postgres -U alloydbsuperuser postgres=> select perfsnap.report(22, 23); report -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- PGSNAP DB Report for: Snapshot details -------------------------------------- Host i841-sr-primary-2a34f46e-06bc Release 14.12 Startup Time 2024-10-08 03:23:15+00 Snap Id Snap Time ------------ ---------- ------------------------ Begin Snap: 22 24.10.2024 04:33:56 (UTC) Automatic snapshot End Snap: 23 25.10.2024 04:38:56 (UTC) Automatic snapshot Elapsed: 1 day 00:04:59.979321 Database Cache sizes ~~~~~~~~~~~~~ Shared Buffers: 31 GB Block Size: 8192 Effective Cache Size: 25 GB WAL Buffers: 16384 Host CPU ~~~~~~~~~~ %User %Nice %System %Idle %WIO %IRQ %SIRQ %Steal %Guest ------- ------- ------- ------- ------- ------- ------- ------- ------- 1.07 0.22 0.91 97.40 0.09 0.00 0.31 0.00 0.00 Host Memory ~~~~~~~~~~~~ Total Memory: 63 GB Available Memory: 11 GB Free Memory: 726 MB Buffers Memory: 3706 MB Load profile (in bytes) ~~~~~~~~~~~~~~~~~~~~~~~ Per Second Per Transaction ------------ --------------- Redo size: 63083.64 4489.93 Logical reads: 1961.21 139.59 ... Response Time Profile (in s) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CPU time: 5399 ( 0.39%) Wait time: 1386906 ( 99.61%) Total time: 1392306 Backend Processes Wait Class Breakdown (in s) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IO 119.300 ( 98.91%) LWLock 1.305 ( 1.08%) IPC .010 ( 0.01%) Lock .000 ( 0.00%) Backend Processes Wait Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Event Class Waits Time (us) Avg (us) -------------------------------------- ------------- ------------- -------------- ------------- CPU 1995948632 WALInsert LWLock 1 6656 6656 Vacuum Information ~~~~~~~~~~~~~~~~~~~ Num Analyze operations: 1976 Num Vacuum operations: 3435 Per Database Information ~~~~~~~~~~~~~~~~~~~~~~~~~ Name Commits Rollbacks BlkRds Blkhits TempFiles TempBytes ------------------------- ------------- ------------- ------------- ------------- ------------- ------------- bench 27939 0 0 7823038 0 0 bytes postgres 39792 0 7 11089243 0 0 bytes Per Database DML & DQL Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Name Tuples returned Tuples fetched Tuples inserted Tuples updated Tuples deleted Index splits Index Only heap fetches HOT updates ------------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ------------------------- ---------------- bench 16119481 4843262 0 0 0 0 16 0 postgres 25415473 6327188 0 10 0 0 0 8 Per Database Conflict Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Name Lock Timeout Old Snapshot Buffer Pins Deadlock ------------------------- ------------- ------------- ------------- ------------- bench 0 0 0 0 postgres 0 0 0 0 Per Database Vacuum Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Name Frozen XID % Consumed Aggregate Vacuum Gap ------------------------- ------------- ------------- -------------------- bench 179460916 9.00% 20539084 postgres 179339239 9.00% 20660761 Per Database Sizing Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Conn. Name Collation Limit Tablespace DB Size Growth -------------------- ------------- ------- -------------------- ---------- ---------- bench C.UTF-8 -1 pg_default 80 GB 0 bytes postgres C.UTF-8 -1 pg_default 135 MB 0 bytes Backend Wait Event Histogram ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Event Class Waits <= 1us <= 2us <= 4us <= 8us <= 16us <= 32us <= 64us <= 128us <= 256us <= 512us -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- -------- WALInsert LWLock 1 0 0 0 0 0 0 0 0 0 0 Background Wait Event Histogram ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Event Class Waits <= 1us <= 2us <= 4us <= 8us <= 16us <= 32us <= 64us <= 128us <= 256us <= 512us -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- -------- WALInsert LWLock 542 107 174 39 113 93 8 1 1 0 1 Write Ahead Log (WAL) Statistics -------------------------------- Records Full Page Images Bytes Buffers Full Write Sync Write Time Sync Time ----------- ---------------- ----------- ------------ ----------- ----------- ----------- ----------- 2936305 100 805989345 0 0 0 0 0 Summary Stats (across all databases) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Name Value -------------------------------- ---------------------------------- Buffers evicted 0 Commits 1216693 ... Parameter Settings ~~~~~~~~~~~~~~~~~~~ Parameter Value --------------------------------- -------------------------------------------------------------- DateStyle ISO, MDY TimeZone UTC autovacuum on work_mem 4096 Columnar Engine available size Columnar Engine configured size ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14959MB 19293MB Columnar Engine Statistics ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ name count ---------------------------------------------------------- ------------ CU Populations/Refreshes 13197 CU Auto Refreshes 10975 ... Columnar Engine Ultra-fast Cache Statistics ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ultra-fast Cache Size (MB): 19200 Ultra-fast Cache Used Size (MB): 0 Ultra-fast Cache Block Size (MB): 80 ---------------------------------------------------- Created by G_STATS v1.0.100 ---------------------------------------------------- (xxx rows)
Para obtener información sobre los campos de los informes y las recomendaciones de optimización del rendimiento, consulta Recomendaciones de optimización del rendimiento de la base de datos. Para obtener más información sobre los eventos de espera en los informes de resumen de rendimiento, consulta la referencia del informe de resumen de rendimiento de la base de datos.
Eliminar una instantánea
Para poder eliminar las copias de seguridad que forman parte de una línea de base, primero debes borrarla .
Para eliminar una instantánea, ejecuta SELECT perfsnap.delete(n)
. Una vez que eliminas una instantánea, no puedes recuperarla.
Marcar una vista como referencia de rendimiento
Para marcar todas las capturas con IDs entre 1 y 3, por ejemplo, como referencia de rendimiento del sistema, ejecuta SELECT perfsnap.make_baseline(1, 3)
.
Borrar las métricas de rendimiento
Para borrar todas las líneas de base con IDs entre 1 y 3, por ejemplo, ejecuta
SELECT perfsnap.clear_baseline(1, 3)
.
Optimizar el rendimiento de la base de datos con los resultados del informe de resumen
Sigue estos pasos para optimizar el rendimiento de la base de datos de AlloyDB:
- Crea capturas de referencia cuando tu base de datos esté inactiva o cuando experimente una carga media.
- Inicia la carga de trabajo o la consulta cuyo rendimiento quieras mejorar.
- Cuando la carga de trabajo o la consulta alcancen el pico de uso de recursos, crea otro conjunto de instantáneas. Te recomendamos que uses el mismo intervalo en ambos informes.
- Compara los informes que has creado con ambos conjuntos de estadísticas y detecta los cambios que podrían mejorar el rendimiento. Para obtener más información sobre las recomendaciones de rendimiento, consulta Recomendaciones para optimizar el rendimiento de las bases de datos.
Recomendaciones para optimizar el rendimiento de la base de datos
En la siguiente tabla se enumeran las secciones del informe de resumen de rendimiento y las mejoras recomendadas para cada sección. Para obtener más información sobre las secciones del informe de resumen del rendimiento y los eventos de espera, consulta la referencia del informe de resumen del rendimiento de la base de datos.
Sección | Campo de informe | Descripción del campo del informe | Recomendaciones de optimización |
---|---|---|---|
Detalles de la captura | Detalles de la captura | Proporciona el host, la versión compatible con PostgreSQL y la hora en la que la máquina está activa. | N/A |
ID de captura | Muestra el ID y el momento de las copias de seguridad que se usan para crear este informe. | N/A | |
Información útil sobre el sistema | CPU del host | Detalles del uso de CPU del host. | Si la utilización de la CPU es superior al 80%, te recomendamos que cambies a un sistema con más CPUs virtuales. |
Memoria del host | Detalles del uso de la memoria del host. | Si la memoria libre es inferior al 15%, te recomendamos que aumentes el tamaño al siguiente disponible. | |
Cargar perfil | Enumera los contadores que ayudan a caracterizar tu carga de trabajo en términos de registro anticipado de escritura (WAL) generado, requisitos de E/S y gestión de conexiones. | Si las lecturas físicas son superiores a las lógicas, plantéate aumentar la capacidad al siguiente tamaño disponible para admitir un almacenamiento en caché de datos más grande. | |
Desglose del tiempo de respuesta y de la clase de espera | Desglose del tiempo que han dedicado los procesos de Postgres durante la ejecución de la carga de trabajo. | Céntrate en reducir el tiempo de espera de las operaciones de E/S si los procesos están principalmente en estado de espera, por ejemplo. | |
Información sobre la carga de trabajo de la base de datos | Información sobre la carga de trabajo de cada base de datos | Métricas clave de cada base de datos, como las confirmaciones, las reversiones, la proporción de aciertos e información sobre las tablas temporales y las operaciones de ordenación. | Si el número de rollbacks es elevado, te recomendamos que diagnostiques tu aplicación. |
Información de DML y DQL por base de datos | Contadores de operaciones de consulta. | Clasifica tu carga de trabajo como de lectura o de escritura. | |
Información sobre conflictos de bases de datos | Contadores de problemas habituales de aplicaciones y bases de datos. | Localiza los problemas de tu aplicación si hay un interbloqueo. | |
Información sobre el tamaño de la base de datos |
Muestra cuánto ha crecido la base de datos durante el intervalo entre dos snapshots. Este campo también muestra si la base de datos tiene límites de conexión establecidos. | Busca problemas en tu aplicación si el crecimiento de la base de datos es demasiado grande. | |
Información sobre aspiradoras | Información sobre aspiradoras | Detalles de las operaciones de E/S y los contadores de las operaciones de vacuum. | De forma predeterminada, AlloyDB realiza un proceso de limpieza adaptativo. Puedes anular algunos de los ajustes de vacío para adaptarlos a tu carga de trabajo. Por ejemplo, reduce las operaciones de vacío si se dedica demasiada E/S a estas solicitudes. |
Información de VACUUM por base de datos | Muestra la siguiente información:
|
Si la antigüedad del campo XID inactivo es demasiado alta o si el porcentaje de transacciones consumidas se acerca al 90%, considera la posibilidad de realizar un vacío. Si el espacio de vacío agregado disminuye, significa que Postgres aplicará un vacío para evitar que se produzca un envolvente. | |
Detalles de la espera de procesos de la base de datos | Información detallada sobre el backend y los procesos en segundo plano |
Detalles de todas las esperas de los procesos de backend y en segundo plano en el intervalo del informe. La información incluye el tiempo de espera acumulado, el tiempo de CPU y el tiempo medio por tipo de espera. | Para reducir el tiempo de espera de WALWrite, por ejemplo, aumenta el número de wal_buffers disponibles para la base de datos. |
Histograma detallado de eventos de espera de backend y en segundo plano | Se incluye de forma predeterminada en el informe de resumen de rendimiento. La lista contiene el histograma de eventos de espera de los procesos de backend y en segundo plano, que se dividen en 32 segmentos, desde 1 µs hasta más de 16 segundos. | Localiza los eventos de espera y determina si hay demasiados eventos de espera en el intervalo de tiempo de espera más amplio. Puede que haya un problema con demasiados eventos de espera o con cada tiempo de espera consumido. | |
Estadísticas varias | Estadísticas del registro de escritura anticipada (WAL) | Resumen de las estadísticas de WAL. | Si el tiempo de sincronización es demasiado largo, ajusta las marcas de la base de datos relacionada (GUC) para mejorar tu carga de trabajo. GUC es el subsistema de PostgreSQL que gestiona la configuración del servidor. |
Estadísticas de resumen (de todas las bases de datos) | Resumen de todas las operaciones de la base de datos que se producen durante el intervalo de la instantánea. | N/A | |
Ajustes de los parámetros | Ajustes de los parámetros | Parámetros de configuración de Postgres clave en el momento de la última instantánea. | Comprueba la configuración de los parámetros GUC (las marcas de la base de datos Postgres) para determinar si los valores no son los esperados o no son los recomendados. |
Limitaciones
Para evitar que se ocupe demasiado espacio, puedes crear manualmente un máximo de 2500 copias de un mismo volumen en una instancia. La inflación del espacio asegura que las copias de seguridad no ocupen demasiado espacio de almacenamiento en tu base de datos.
Si el número de copias supera el límite, AlloyDB Omni elimina todas las copias manuales que tengan más de 90 días. Para no superar el límite de las copias de seguridad, debes eliminar las copias de seguridad innecesarias antes de crear una nueva.
AlloyDB Omni limpia periódicamente las copias de seguridad manuales que tienen más de 90 días.
Siguientes pasos
- Consulte información sobre los eventos de espera en los informes de resumen de rendimiento.