Cómo funcionan los informes de instantáneas de rendimiento
Los informes de instantáneas de rendimiento son una herramienta integrada de AlloyDB Omni que captura y analiza los datos de rendimiento para ayudarte a identificar la causa de los problemas de rendimiento.
Los informes de instantáneas de rendimiento muestran las métricas de la base de datos entre dos marcas de tiempo en un solo informe. Puedes usar la información del informe de instantáneas de rendimiento para identificar problemas de rendimiento con tu instancia de informe de instantáneas de rendimiento, como una disminución del rendimiento de la base de datos durante ciertas horas del día o una disminución del rendimiento durante un período determinado.
Con el informe de instantáneas de rendimiento, comparas las métricas con un modelo de referencia de rendimiento para obtener estadísticas sobre las métricas de rendimiento de la carga de trabajo, que puedes usar para optimizar o solucionar problemas de rendimiento de la base de datos. Un modelo de referencia es un conjunto personalizado de instantáneas de la base de datos que miden 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 instantáneas de rendimiento, consulta Referencia del informe de instantáneas de rendimiento de la base de datos.
Roles obligatorios
Asegúrate de tener el rol pg_monitor.
Este rol se otorga a los superusuarios, que luego pueden otorgar 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 como se describe en este documento.
Instala el informe de instantáneas de rendimiento
perfsnap es el nombre del esquema que contiene funciones de SQL que permiten a los usuarios capturar instantáneas 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 instantánea 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;
Crea una instantánea de las métricas del sistema
Crea una instantánea al principio y al final de la carga de trabajo que te interesa. El intervalo de tiempo entre las dos instantáneas permite que la carga de trabajo progrese lo suficiente para que el sistema pueda acumular métricas que reflejen la carga de trabajo. Después de obtener las métricas del informe de instantáneas de rendimiento resultante, puedes tomar otro conjunto de instantáneas y repetir el proceso.
- Conecta un cliente de
psqla una instancia de AlloyDB. Ejecuta
SELECT perfsnap.snap(). El resultado es similar al siguiente:postgres=# select perfsnap.snap(); snap ------ 1 (1 row)
Visualiza una lista de instantáneas
- Conecta un cliente de
psqla una instancia de AlloyDB. Ejecuta
SELECT * FROM perfsnap.g$snapshots. El resultado es 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)
Genera un informe de instantánea
Para generar un informe que capture la diferencia entre las instantáneas 1
y 2, por ejemplo, ejecuta SELECT perfsnap.report(1,2).
No es necesario que la segunda instantánea de una operación diferencial siga inmediatamente a la primera. Sin embargo, asegúrate de capturar la segunda instantánea en el diferencial después de la primera instantánea.
El informe de instantánea de rendimiento generado es similar al siguiente ejemplo abreviado:
Ejemplo de informe de instantánea de rendimiento
$ psql -d postgres -U postgres
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 informes y las recomendaciones de optimización del rendimiento, consulta Recomendaciones para optimizar el rendimiento de la base de datos. Para obtener más información sobre los eventos de espera en los informes de instantáneas de rendimiento, consulta Referencia del informe de instantáneas de rendimiento de la base de datos.
Borrar una instantánea
Antes de borrar las instantáneas que forman parte de un modelo de referencia existente, debes borrarlo .
Para borrar una instantánea, ejecuta SELECT perfsnap.delete(n). Después de borrar una instantánea, no podrás recuperarla.
Cómo marcar una instantánea como modelo de referencia de rendimiento
Para marcar todas las instantáneas con IDs entre 1 y 3, por ejemplo, como un modelo de referencia del rendimiento del sistema, ejecuta SELECT perfsnap.make_baseline(1, 3).
Modelos de referencia de rendimiento claros
Por ejemplo, para borrar todas las referencias con IDs entre 1 y 3, ejecuta
SELECT perfsnap.clear_baseline(1, 3).
Optimiza el rendimiento de la base de datos con los resultados del informe de instantáneas
Sigue estos pasos para optimizar el rendimiento de la base de datos de AlloyDB:
- Crea instantáneas de referencia cuando la base de datos esté inactiva o cuando experimente una carga promedio.
- Inicia la carga de trabajo o la consulta cuyo rendimiento deseas mejorar.
- Cuando la carga de trabajo o la consulta alcancen el uso máximo de recursos, crea otro conjunto de instantáneas. Te recomendamos que uses el mismo intervalo para ambos informes.
- Compara los informes que creaste con ambos conjuntos de instantáneas y, luego, identifica 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 la base de datos.
Recomendaciones para optimizar el rendimiento de la base de datos
En la siguiente tabla, se enumeran las secciones del informe de instantánea de rendimiento y las mejoras recomendadas para cada sección del informe. Para obtener más información sobre las secciones del informe de instantáneas de rendimiento y los eventos de espera, consulta la referencia del informe de instantáneas de rendimiento de la base de datos.
| Sección | Campo del informe | Descripción de los campos del informe | Recomendaciones de optimización |
|---|---|---|---|
| Detalles de la instantánea | Detalles de la instantánea | Proporciona el host, la versión de actualización compatible con PostgreSQL y la hora en que la máquina está en funcionamiento. | N/A |
| ID de instantánea | Enumera el ID y el momento de las instantáneas que se usan para crear este informe. | N/A | |
| Estadísticas del sistema | CPU del host | Detalles del uso de CPU del host. | Si el uso de CPU es superior al 80%, te recomendamos que te cambies a un sistema con más CPUs virtuales. |
| Memoria del host | Detalles del uso de memoria del host. | Si la memoria libre es inferior al 15%, te recomendamos que aumentes al siguiente tamaño disponible. | |
| Cargar perfil | Enumera los contadores que ayudan a caracterizar tu carga de trabajo en términos de almacenamiento de registros de escritura anticipada (WAL) generados, requisitos de E/S y administración de conexiones. | Si las lecturas físicas son más altas que las lógicas, considera escalar verticalmente al siguiente tamaño disponible para admitir un almacenamiento en caché de datos más grande. | |
| Desglose del tiempo de respuesta y la clase de espera | Desglose del tiempo que los procesos de Postgres dedicaron durante la ejecución de la carga de trabajo. | Por ejemplo, enfoca el ajuste en acortar la espera de E/S si los procesos están, en su mayoría, en un estado de espera. | |
| Información de la carga de trabajo de la base de datos | Información de la carga de trabajo por base de datos | Métricas clave para cada base de datos, incluidas las confirmaciones, las reversiones, la tasa de aciertos y la información sobre las tablas temporales y las operaciones de ordenamiento. | Si las reversiones son altas, considera diagnosticar tu app. |
| Información de DML y DQL por base de datos | Son contadores para las operaciones de consulta. | Califica tu carga de trabajo como de lectura o escritura intensiva. | |
| Información sobre conflictos de bases de datos | Contadores de problemas comunes de aplicaciones y bases de datos. | Localiza problemas en tu aplicación si hay un interbloqueo. | |
| Información sobre el tamaño de la base de datos |
Muestra cuánto creció la base de datos durante el intervalo entre dos instantáneas. En este campo, también se muestra si la base de datos tiene límites de conexión establecidos. | Ubica los problemas en tu aplicación si el crecimiento de la base de datos es demasiado grande. | |
| Información sobre la aspiradora | Información sobre la aspiradora | Detalles de E/S y contadores para operaciones de limpieza. | De forma predeterminada, AlloyDB realiza una limpieza adaptable. Puedes anular algunos de los parámetros de configuración de vacuum para que se adapten a tu carga de trabajo. Por ejemplo, reduce las operaciones de limpieza 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 congelado es demasiado alta o si el porcentaje de transacciones consumidas se acerca al 90%, considera realizar una limpieza. Si la brecha de vacuum agregada disminuye, esto indica que Postgres aplicará un vacuum para evitar el wraparound. | |
| Detalles de la espera de los procesos de la base de datos | Información detallada sobre el backend y los procesos en segundo plano |
Son los detalles de todas las esperas por procesos en segundo plano y de backend en el intervalo del informe. La información incluye el tiempo de espera acumulado, el tiempo de CPU y el tiempo promedio por tipo de espera. | Para disminuir la espera en WALWrite, por ejemplo, aumenta la cantidad de
wal_buffers disponibles para la base de datos. |
| Histograma detallado de eventos de espera en segundo plano y de backend | Esto se incluye en el informe de instantánea de rendimiento de forma predeterminada. La lista contiene el histograma de eventos de espera para los procesos en segundo plano y de backend, que se dividen en 32 buckets, de 1 μs a más de 16 s. | Ubica los eventos de espera y determina si hay demasiados eventos de espera en el bucket de tiempo de espera más grande. Es posible 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 experimentas demasiado tiempo de sincronización, ajusta las marcas de base de datos relacionadas (GUC) para mejorar tu carga de trabajo. GUC es el subsistema de PostgreSQL que controla la configuración del servidor. |
| Estadísticas de resumen (en todas las bases de datos) | Es un resumen de todas las operaciones de la base de datos que se producen durante el intervalo de la instantánea. | N/A | |
| Configuración del parámetro | Configuración del parámetro | Son los parámetros clave de configuración de Postgres en el momento de la instantánea final. | Verifica la configuración de los parámetros de GUC (las marcas de la base de datos de Postgres) para determinar si los valores no son los esperados o no se recomiendan. |
Limitaciones
Para evitar el aumento excesivo de espacio, puedes crear de forma manual un máximo de 2,500 instantáneas en una instancia. La expansión de espacio garantiza que las instantáneas no ocupen demasiado espacio de almacenamiento en tu base de datos.
Si la cantidad de instantáneas supera el límite, AlloyDB Omni borra todas las instantáneas manuales que tengan más de 90 días. Para mantenerte dentro del límite de instantáneas, debes limpiar las instantáneas innecesarias antes de tomar una nueva.
AlloyDB Omni limpia de forma periódica las instantáneas manuales que tienen más de 90 días.
¿Qué sigue?
- Obtén información sobre los eventos de espera en los informes de instantáneas de rendimiento.