InfraGuard

Conceptos de ajuste de BD: bloqueos, caché, índices, checkpoint, memoria

Resume los conceptos de rendimiento de BD que enseñan los popovers educativos al pasar el cursor por la pantalla Servicio ▸ Base de datos (7 causas de espera de bloqueo de fila, acierto de caché del buffer pool, uso de índices, presión de checkpoint/redo, volcado de páginas sucias).

Resumen — qué hace

Servicio ▸ Base de datos se conecta directamente a los recolectores de BD registrados (access=database) y muestra métricas de carga y de estructura en vivo. En lugar de limitarse a listar números, adjunta un popover educativo diseñado a cada métrica clave (espera de bloqueo, tasa de acierto de caché, uso de índices, checkpoint, páginas sucias), de modo que aprenda «por qué este valor es malo / cómo lo corrijo» justo donde lo está viendo.

Este artículo resume los conceptos que enseñan esos popovers. El léxico completo reside con una única fuente en los propios popovers en vivo (resources/lang/{ko,en}/dbmon.php, la clave edu), así que en una situación real pase el cursor por la métrica para leer su detalle específico del contexto.

La pantalla es el monitor (qué va mal ahora), el popover es la formación sobre la causa (por qué / cómo) y la instantánea real de la configuración vive en parámetros de instancia ([param] · nginx / my.cnf / sysctl). Lea los tres juntos para pasar de diagnóstico → evidencia → acción.

Cuándo usarlo

Disposición

Dónde se enganchan los popovers educativos:

Ubicación Métrica Qué enseña el popover
Pie de tarjeta, derecha · distintivo Cache Tasa de acierto de caché (buffer pool) La fórmula de cálculo + 4 formas de elevarla
Pie de tarjeta, derecha · distintivo Index Uso de índices La fórmula de cálculo + 5 formas de aumentar los aciertos de índice
Carga de concurrencia · lock Espera media de bloqueo de fila (ms) Las 7 causas del aumento de la espera de bloqueo (por frecuencia)
Cabecera / detalle de memoria · Checkpoint … % of redo Antigüedad del checkpoint Qué significa la presión del log de redo y cómo leer sus subidas y bajadas
Detalle (plegable) · Gestión de memoria Páginas sucias · serie temporal de checkpoint Superposición de umbrales LWM/MAX + anotaciones de episodios de volcado

El propio cuerpo de la tarjeta resume dos ejes de carga:

El análisis de esquema inferior (plegable) muestra el tamaño total, los esquemas mayores, las tablas más grandes y la mezcla de motores (ajeno a los conceptos de ajuste, procedente de information_schema).

Cómo se usa

  1. En una tarjeta de BD, localice la métrica problemática (distintivo rojo/amarillo o un valor alto).
  2. Pase el cursor por la etiqueta o el distintivo de esa métrica para abrir el popover contextual: aparecen la causa, la fórmula y el cómo hacerlo.
  3. Despliegue Detalles para inspeccionar la serie temporal de gestión de memoria con las ondas de sucias/checkpoint y las líneas de corte de los umbrales.
  4. Aplique en la BD de destino la palanca de configuración que señale el popover (por ejemplo innodb_buffer_pool_size, añadir un índice), o contrástela con el valor actual en parámetros de instancia.

A continuación tiene una referencia resumida de cada concepto (el popover en vivo es la fuente autorizada).

Espera de bloqueo de fila — 7 causas

Tiempo medio que InnoDB esperó para adquirir un bloqueo de fila (ms). Cuanto mayor, más contención. Por frecuencia:

# Causa Idea
1 Transacciones que retienen bloqueos demasiado tiempo Tras BEGIN … UPDATE …, un commit tardío (API externa, tiempo de reflexión del usuario, una consulta lenta) pone en cola a todas las transacciones que esperan esa fila. La más frecuente.
2 Contención sobre filas calientes Muchas transacciones actualizan LA MISMA fila (contador, stock, fila de resumen/acumulado, secuencia) → se serializan y las esperas se acumulan.
3 UPDATE/DELETE sin índice Si el WHERE no puede usar un índice, InnoDB bloquea muchas más filas o rangos de los necesarios → bloquea transacciones no relacionadas. En la práctica, la causa número 1 oculta.
4 Bloqueos de hueco / next-key Bajo REPEATABLE READ, los bloqueos de rango también bloquean los huecos entre filas, impidiendo los INSERT. Patrón de UPDATE por rango + INSERT concurrente.
5 DML por lotes grandes Un solo UPDATE/DELETE que toca decenas de miles de filas retiene muchos bloqueos durante mucho tiempo.
6 Poseedor lento del bloqueo Si la consulta que retiene el bloqueo es lenta por E/S o CPU, mantiene los bloqueos más tiempo: la tasa creciente de consultas lentas y el aumento de las esperas de bloqueo van de la mano.
7 Comprobaciones de clave ajena Actualizar una tabla que referencia una FK toma bloqueos compartidos sobre las filas padre, lo que suma a la espera.

En esta pantalla, la causa 3 (UPDATE sin índice) es el motor oculto número 1 de los picos de espera de bloqueo. Lea la sección TRANSACTIONS de SHOW ENGINE INNODB STATUS junto con la puntuación de uso de índices.

Tasa de acierto de caché (buffer pool de InnoDB)

Alta cuando la mayoría de las lecturas se sirven desde memoria (el buffer pool) y no desde disco.

hit ratio = 1 − Δinnodb_buffer_pool_reads / Δinnodb_buffer_pool_read_requests
Grado Umbral
Excelente ≥ 99,5%
Bueno ≥ 98%
Aceptable ≥ 90%

Cómo elevarla (resumen): aumente innodb_buffer_pool_size (regla empírica: 50–75% de la RAM) · reduzca los escaneos completos para no contaminar el buffer pool · reduzca el conjunto de trabajo (evite columnas no usadas, separe BLOB grandes, archive) · use innodb_buffer_pool_instances para recortar la contención y vuelque/recargue el buffer pool al reiniciar.

Uso de índices

Proporción de lecturas que encontraron filas por índice frente a lecturas que escanearon hasta la fila siguiente.

index usage = Δhandler_read_key / (Δhandler_read_key + Δhandler_read_rnd_next)
Grado Umbral
Excelente ≥ 90%
Bueno ≥ 70%
Aceptable ≥ 40%

Cómo elevarlo (resumen): use EXPLAIN para encontrar escaneos completos (type=ALL) y ordenaciones en fichero, y luego indexe las columnas de WHERE/JOIN/ORDER BY · construya índices compuestos empezando por la columna más selectiva (regla del prefijo por la izquierda) · no anule los índices con funciones o conversiones sobre la columna (WHERE DATE(col)=… → use un rango) · use índices de cobertura · elimine índices duplicados o sin uso.

Antigüedad del checkpoint (presión del log de redo)

Cuánto ha avanzado el log de redo más allá del último checkpoint (bytes) = los cambios aún no volcados a los ficheros de datos y el trabajo que InnoDB reproduciría tras una caída. El % of redo de la cabecera es la distancia hasta el precipicio de la tormenta de volcado.

Estado % of redo Significado
Seguro < 50% Los cambios se vuelcan a tiempo
Vigilar 50 – 75% La escritura supera al volcado; el volcado forzado se acerca
Riesgo ≥ 75% Cerca del umbral de volcado asíncrono/síncrono: el volcado forzado arriesga latencia y tormentas de E/S

Cómo leerlo: sube = escrituras > volcado (el redo se llena) · baja = el volcado se ha puesto al día (sano) · diente de sierra = acumular ↔ volcar, un ritmo normal. Cerca del 75%, considere un buffer pool más grande o un innodb_log_file_size mayor.

Volcado de páginas sucias (gestión de memoria)

Páginas del buffer pool modificadas pero aún no escritas a disco. El valor apropiado son los propios umbrales de volcado del servidor (innodb_max_dirty_pages_pct = MAX, innodb_max_dirty_pages_pct_lwm = LWM). Los expertos: las páginas sucias deberían oscilar por debajo del LWM.

Estado Condición Significado
Sano (good) Oscila por debajo del umbral (diente de sierra sano) La BD no sufre durante los volcados
Precaución (warn) Por encima de la marca de agua baja (zona previa al volcado) Vigile la presión de escritura y el retraso del checkpoint
En riesgo (crit) Ha alcanzado el umbral MAX Volcado agresivo → picos de latencia / tormentas de E/S (aumente el buffer pool o el log de redo)

La serie temporal de gestión de memoria superpone las líneas de corte LWM/MAX sobre las páginas sucias y marca los episodios de expulsión y volcado. Las métricas de la derecha muestran además Pending writes y Row-lock avg.

Fuentes de datos

Los contadores y el almacenamiento reales a los que remiten los conceptos educativos:

Concepto Contador / estado de origen Nota
Espera de bloqueo SHOW GLOBAL STATUS · information_schema.processlist Calcula la cola; requiere el privilegio PROCESS
Tasa de acierto de caché Innodb_buffer_pool_reads / _read_requests Delta entre muestras
Uso de índices Handler_read_key / Handler_read_rnd_next Delta entre muestras
Checkpoint · sucias Estado de InnoDB (antigüedad de checkpoint · páginas sucias · pendientes) Serie temporal de gestión de memoria
QPS · lentas Questions · Slow_queries (acumulados) Delta → se derivan QPS y tasa de lentas

Umbrales de estado de la tarjeta (degraded) (valores por defecto de OpsPolicy::dbThresholds(); ajústelos en Política de operaciones):

Condición Umbral por defecto Etiqueta de motivo
Saturación de conexiones conn_pct ≥ 80% saturación de conexiones
threads_running ≥ 40 alta concurrencia
waiting (cola) ≥ 5 cola de consultas
slow_qps ≥ 1/s tasa de consultas lentas

Acceso

Resolución de problemas y preguntas frecuentes

P. Backlog muestra «own connections only». Contar las consultas en cola en todo el servidor requiere el privilegio PROCESS en la cuenta de BD. Sin él solo se cuentan sus propias conexiones. Consulte sql/infr_db_monitor_grant.sql (se recomienda una cuenta de monitorización dedicada).

P. Las puntuaciones de caché o índices aparecen vacías (N/A). Las métricas derivadas se calculan como el delta entre dos muestras. Si el recolector acaba de arrancar o los contadores se han reiniciado (un reinicio del servidor), la primera muestra no produce puntuación: espere al siguiente ciclo.

P. Una tarjeta aparece como stale (sin muestra reciente). En modo economy la recolección se omite cuando no hay ningún usuario en la consola. Al entrar, ensureFresh(45s) toma una muestra inmediata, pero si el planificador va retrasado la tarjeta puede degradarse brevemente a pending. Para recolección permanente, ponga el modo de recolección de BD en always en Política de operaciones.

P. ¿Cómo traduzco o edito el texto de los popovers? El léxico educativo reside en un único lugar: la clave edu de resources/lang/{ko,en}/dbmon.php (fuente única). El resto de idiomas recurre a en.

P. ¿Cómo acoto de verdad la causa de una espera de bloqueo? En la BD de destino, inspeccione SHOW ENGINE INNODB STATUS (TRANSACTIONS · LATEST DETECTED DEADLOCK) e information_schema.INNODB_TRX / data_locks, y contrástelo con la tabla de 7 causas de arriba.

Relacionado

데이터베이스 화면의 원인 교육 팝오버
데이터베이스 화면의 원인 교육 팝오버