Todos los productos
Search
Centro de documentos

ApsaraDB RDS:Performance Insight

Última actualización: Sep 03, 2026

Performance Insight le ayuda a identificar qué tablas e índices soportan la mayor carga, qué sentencias SQL consumen más tiempo de CPU o de bloqueo, y cómo se comporta su E/S a lo largo del tiempo. Esto le permite aislar la causa raíz de las consultas lentas sin necesidad de hacer suposiciones.

Esta función recopila dos tipos de datos:

  • Estadísticas de objetos: registra la actividad de lectura y escritura a nivel de tabla e índice. Se almacena en TABLE_STATISTICS y INDEX_STATISTICS dentro de la base de datos information_schema.

  • Punto de rendimiento: registra los tiempos por sentencia en tres dimensiones (CPU, bloqueos y E/S). Se almacena en events_statements_summary_by_digest_supplement dentro de la base de datos performance_schema.

Flujo de trabajo de diagnóstico recomendado:

  1. Consulte las estadísticas de objetos para identificar qué tablas o índices presentan la mayor actividad.

  2. Consulte los datos del punto de rendimiento para encontrar las sentencias SQL que generan dicha carga. Compare CPU_TIME con ELAPSED_TIME para clasificar el cuello de botella como limitado por CPU, por bloqueos o por E/S.

  3. Consulte las estadísticas de E/S para correlacionar los picos de lectura y escritura con ventanas de tiempo específicas.

Requisitos previos

Antes de empezar, asegúrese de que:

  • Su instancia RDS ejecute MySQL 8.0 o MySQL 5.7 con una versión menor del motor 20190915 o posterior.

Para comprobar la versión menor del motor, vaya a la página Basic Information en la consola de ApsaraDB RDS. En la sección Configuration Information, busque el botón Upgrade Kernel Version. Si aparece el botón, haga clic en él para ver y actualizar la versión menor del motor. Si el botón no aparece, la instancia ya se encuentra en la última versión menor del motor. Para obtener más detalles, consulte Update the minor engine version.

Uso de estadísticas de objetos

Las estadísticas de objetos permiten detectar tablas con alta actividad e índices poco utilizados. Este es un punto de partida para decidir dónde enfocar la optimización de consultas.

Paso 1: Comprobar que las estadísticas de objetos están habilitadas

Ejecute la siguiente consulta para confirmar que OPT_TABLESTAT y OPT_INDEXSTAT tienen el valor ON:

mysql> SHOW VARIABLES LIKE "opt_%_stat";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| opt_indexstat | ON    |
| opt_tablestat | ON    |
+---------------+-------+

Paso 2: Consultar estadísticas de tablas

TABLE_STATISTICS registra la actividad de lectura y escritura por tabla. Utilícela para identificar tablas con un número inesperadamente alto de lecturas o modificaciones de filas; estas son candidatas para la optimización de consultas o el ajuste de índices.

mysql> SELECT * FROM TABLE_STATISTICS LIMIT 10;
+--------------+--------------+-----------+--------------+------------------------+---------------+--------------+--------------+
| TABLE_SCHEMA | TABLE_NAME   | ROWS_READ | ROWS_CHANGED | ROWS_CHANGED_X_INDEXES | ROWS_INSERTED | ROWS_DELETED | ROWS_UPDATED |
+--------------+--------------+-----------+--------------+------------------------+---------------+--------------+--------------+
| mysql        | db           |         2 |            0 |                      0 |             0 |            0 |            0 |
| mysql        | engine_cost  |         2 |            0 |                      0 |             0 |            0 |            0 |
| mysql        | proxies_priv |         1 |            0 |                      0 |             0 |            0 |            0 |
| mysql        | server_cost  |         6 |            0 |                      0 |             0 |            0 |            0 |
| mysql        | tables_priv  |         2 |            0 |                      0 |             0 |            0 |            0 |
| mysql        | user         |         7 |            0 |                      0 |             0 |            0 |            0 |
| test         | sbtest1      |      1686 |          142 |                    184 |           112 |           12 |           18 |
| test         | sbtest10     |      1806 |          125 |                    150 |           105 |            5 |           15 |
| test         | sbtest100    |      1623 |          141 |                    182 |           110 |           10 |           21 |
| test         | sbtest11     |      1254 |          136 |                    172 |           110 |           10 |           16 |
+--------------+--------------+-----------+--------------+------------------------+---------------+--------------+--------------+

Columnas de TABLE_STATISTICS

Columna

Descripción

TABLE_SCHEMA

Nombre de la base de datos

TABLE_NAME

Nombre de la tabla

ROWS_READ

Número de filas leídas de la tabla

ROWS_CHANGED

Número de filas modificadas en la tabla

ROWS_CHANGED_X_INDEXES

Número de filas modificadas mediante índices

ROWS_INSERTED

Número de filas insertadas en la tabla

ROWS_DELETED

Número de filas eliminadas de la tabla

ROWS_UPDATED

Número de filas actualizadas en la tabla

Paso 3: Consultar estadísticas de índices

INDEX_STATISTICS registra cuántas filas se leen a través de cada índice. Un índice con un recuento bajo de ROWS_READ en relación con la actividad de su tabla es candidato para eliminación, ya que quitar índices no utilizados reduce la sobrecarga de escritura.

mysql> SELECT * FROM INDEX_STATISTICS LIMIT 10;
+--------------+--------------+------------+-----------+
| TABLE_SCHEMA | TABLE_NAME   | INDEX_NAME | ROWS_READ |
+--------------+--------------+------------+-----------+
| mysql        | db           | PRIMARY    |         2 |
| mysql        | engine_cost  | PRIMARY    |         2 |
| mysql        | proxies_priv | PRIMARY    |         1 |
| mysql        | server_cost  | PRIMARY    |         6 |
| mysql        | tables_priv  | PRIMARY    |         2 |
| mysql        | user         | PRIMARY    |         7 |
| test         | sbtest1      | PRIMARY    |      2500 |
| test         | sbtest10     | PRIMARY    |      3007 |
| test         | sbtest100    | PRIMARY    |      2642 |
| test         | sbtest11     | PRIMARY    |      2091 |
+--------------+--------------+------------+-----------+

Columnas de INDEX_STATISTICS

Columna

Descripción

TABLE_SCHEMA

Nombre de la base de datos

TABLE_NAME

Nombre de la tabla

INDEX_NAME

Nombre del índice

ROWS_READ

Número de filas leídas a través de este índice

Uso del punto de rendimiento

El punto de rendimiento registra los tiempos por sentencia en events_statements_summary_by_digest_supplement (en la base de datos performance_schema). Cada fila corresponde a un resumen de sentencia y desglosa el tiempo de ejecución en tres dimensiones:

  • CPU: tiempo total transcurrido y tiempo de CPU consumido por la sentencia.

  • Bloqueos: tiempo dedicado a esperar bloqueos de metadatos, bloqueos de transacciones, mutex y bloqueos de lectores-escritores.

  • E/S: tiempo y volumen de lecturas y escrituras en archivos de datos, escrituras en archivos de registro, lecturas de registros binarios, lecturas de registros redo y lecturas asíncronas de registros redo.

Utilice estas dimensiones para clasificar los cuellos de botella: si CPU_TIME es cercano a ELAPSED_TIME, la sentencia está limitada por CPU. Si SERVER_LOCK_TIME o TRANSACTION_LOCK_TIME es alto, la sentencia está limitada por bloqueos. Si DATA_READ_TIME o DATA_WRITE_TIME predomina, la sentencia está limitada por E/S.

Paso 1: Comprobar que el punto de rendimiento está habilitado

Ejecute la siguiente consulta para verificar las variables del punto de rendimiento:

mysql> SHOW VARIABLES LIKE "%performance_point%";
+---------------------------------------+-------+
| Variable_name                         | Value |
+---------------------------------------+-------+
| performance_point_dbug_enabled        | OFF   |
| performance_point_enabled             | ON    |
| performance_point_iostat_interval     | 2     |
| performance_point_iostat_volume_size  | 10000 |
| performance_point_lock_rwlock_enabled | ON    |
+---------------------------------------+-------+
Si estas variables no aparecen, la instancia no cumple con los requisitos de versión indicados en Requisitos previos .

Paso 2: Consultar datos de rendimiento de sentencias SQL

Consulte events_statements_summary_by_digest_supplement para obtener datos de rendimiento por sentencia. Ordene por ELAPSED_TIME para encontrar las sentencias más lentas y luego inspeccione las columnas de desglose. Así podrá identificar qué dimensión (CPU, bloqueos o E/S) representa la mayor parte del tiempo.

mysql> SELECT * FROM events_statements_summary_by_digest_supplement LIMIT 10;
+--------------------+----------------------------------+-------------------------------------------+--------------+
| SCHEMA_NAME        | DIGEST                           | DIGEST_TEXT                               | ELAPSED_TIME | ......
+--------------------+----------------------------------+-------------------------------------------+--------------+
| NULL               | 6b787dd1f9c6f6c5033120760a1a82de | SELECT @@`version_comment` LIMIT ?        |          932 |
| NULL               | 2fb4341654df6995113d998c52e5abc9 | SHOW SCHEMAS                              |         2363 |
| NULL               | 8a93e76a7846384621567fb4daa1bf95 | SHOW VARIABLES LIKE ?                     |        17933 |
| NULL               | dd148234ac7a20cb5aee7720fb44b7ea | SELECT SCHEMA ( )                         |         1006 |
| information_schema | 2fb4341654df6995113d998c52e5abc9 | SHOW SCHEMAS                              |         2156 |
| information_schema | 74af182f3a2bd265678d3dadb53e08da | SHOW TABLES                               |         3161 |
| information_schema | d3a66515192fcb100aaef6f8b6e45603 | SELECT * FROM `TABLE_STATISTICS` LIMIT ?  |         2081 |
| information_schema | b3726b7c4c4db4b309de2dbc45ff52af | SELECT * FROM `INDEX_STATISTICS` LIMIT ?  |         2384 |
| information_schema | dd148234ac7a20cb5aee7720fb44b7ea | SELECT SCHEMA ( )                         |          129 |
| test               | 2fb4341654df6995113d998c52e5abc9 | SHOW SCHEMAS                              |          342 |
+--------------------+----------------------------------+-------------------------------------------+--------------+

Columnas de events_statements_summary_by_digest_supplement

Columna

Descripción

Unidad

SCHEMA_NAME

Nombre de la base de datos

—

DIGEST

Cadena hash de 64 bytes derivada de DIGEST_TEXT

—

DIGEST_TEXT

Forma normalizada de la sentencia SQL

—

ELAPSED_TIME

Tiempo total de ejecución

Microsegundos

CPU_TIME

Tiempo de CPU consumido durante la ejecución

Microsegundos

SERVER_LOCK_TIME

Tiempo dedicado a esperar bloqueos de metadatos en el servidor

Microsegundos

TRANSACTION_LOCK_TIME

Tiempo dedicado a esperar bloqueos de transacciones de almacenamiento

Microsegundos

MUTEX_SPINS

Número de ciclos de mutex activados

—

MUTEX_WAITS

Número de esperas en ciclo activadas por mutex

—

RWLOCK_SPIN_WAITS

Número de esperas en ciclo activadas por bloqueos de lectores-escritores

—

RWLOCK_SPIN_ROUNDS

Número de vueltas que el hilo en segundo plano ejecutó en ciclos de espera de bloqueos de lectores-escritores

—

RWLOCK_OS_WAITS

Número de esperas del sistema operativo activadas por bloqueos de lectores-escritores

—

DATA_READS

Número de lecturas desde archivos de datos

—

DATA_READ_TIME

Tiempo dedicado a leer archivos de datos

Microsegundos

DATA_WRITES

Número de escrituras en archivos de datos

—

DATA_WRITE_TIME

Tiempo dedicado a escribir en archivos de datos

Microsegundos

REDO_WRITES

Número de escrituras en archivos de registro

—

REDO_WRITE_TIME

Tiempo dedicado a escribir en archivos de registro

Microsegundos

LOGICAL_READS

Número de lecturas lógicas de páginas

—

PHYSICAL_READS

Número de lecturas físicas de páginas

—

PHYSICAL_ASYNC_READS

Número de lecturas físicas asíncronas de páginas

—

Consulta de estadísticas de E/S

IO_STATISTICS (en la base de datos information_schema) registra la actividad de lectura y escritura a intervalos regulares. Utilícela para correlacionar los picos de E/S con ventanas de tiempo donde observó degradación del rendimiento; por ejemplo, para relacionar un pico en DATA_READ con un periodo de respuestas lentas en las consultas.

mysql> SELECT * FROM IO_STATISTICS LIMIT 10;
+---------------------+-----------+----------------+
| TIME                | DATA_READ | DATA_READ_TIME | ......
+---------------------+-----------+----------------+
| 2019-08-08 09:56:53 |        73 |            983 |
| 2019-08-08 09:56:57 |         0 |              0 |
| 2019-08-08 09:59:17 |         0 |              0 |
| 2019-08-08 10:00:55 |      4072 |          40628 |
| 2019-08-08 10:00:59 |         0 |              0 |
| 2019-08-08 10:01:09 |       562 |           5800 |
| 2019-08-08 10:01:11 |       606 |           6910 |
| 2019-08-08 10:01:13 |       609 |           6875 |
| 2019-08-08 10:01:15 |       625 |           7077 |
| 2019-08-08 10:01:17 |       616 |           5800 |
+---------------------+-----------+----------------+

Columnas de IO_STATISTICS

Columna

Descripción

Unidad

TIME

Marca de tiempo del intervalo

—

DATA_READ

Número de operaciones de lectura de datos

—

DATA_READ_TIME

Tiempo total dedicado a leer datos

Microsegundos

DATA_READ_MAX_TIME

Tiempo máximo de una sola operación de lectura

Microsegundos

DATA_READ_BYTES

Total de datos leídos

Bytes

DATA_WRITE

Número de operaciones de escritura de datos

—

DATA_WRITE_TIME

Tiempo total dedicado a escribir datos

Microsegundos

DATA_WRITE_MAX_TIME

Tiempo máximo de una sola operación de escritura

Microsegundos

DATA_WRITE_BYTES

Total de datos escritos

Bytes