Saltar al contenido
Telemetry
Fiabilidad de la base de datos receta SQL

Detectar patrones de consulta de base de datos N+1

Detecta huellas digitales de bases de datos repetidas muchas veces dentro de una solicitud de aplicación.

Intermediodatabase_request_query_eventsRevisado 2026-07-28Probado con Apache DataFusion 45.2.0

Revisado por el equipo de producto Telemetry en . Compatibilidad con SQL, contrato de eventos, resultados sintéticos y advertencias operativas. Revisar los estándares y la propiedad

Pregunta respondida

¿Qué combinaciones de ruta y consulta se repiten sospechosamente dentro de una solicitud?

El comportamiento N+1 es un problema de correlación: una consulta puede ser rápida e inofensiva globalmente pero repetirse excesivamente dentro de solicitudes individuales. Este patrón cuenta cada huella digital por solicitud antes de resumir las rutas afectadas.

Contrato de evento

Campos que espera la consulta

CampoTipoPor que existe
timestamp_utcTimestampHora de finalización de la consulta en UTC.
request_idUtf8Identificador de correlación de solicitud limitada.
route_templateUtf8Ruta de aplicación estable.
query_fingerprintUtf8Forma de consulta normalizada sin parámetros.
sequence_in_requestInt64Orden de consulta dentro de la solicitud.
duration_msFloat64Duración de la operación de la base de datos.
environmentUtf8Entorno de implementación.
DataFusionSQL

Copiar la consulta

sql
WITH queries_per_request AS (
  SELECT
    route_template,
    query_fingerprint,
    request_id,
    COUNT(*) AS executions_in_request
  FROM database_request_query_events
  WHERE timestamp_utc >= now() - INTERVAL '24 hours'
    AND environment = 'production'
  GROUP BY route_template, query_fingerprint, request_id
)
SELECT
  route_template,
  query_fingerprint,
  COUNT(*) AS requests,
  SUM(CASE WHEN executions_in_request >= 5 THEN 1 ELSE 0 END)
    AS requests_with_repeats,
  AVG(executions_in_request) AS average_executions_per_request,
  MAX(executions_in_request) AS maximum_executions_in_request
FROM queries_per_request
GROUP BY route_template, query_fingerprint
ORDER BY requests_with_repeats DESC, route_template;

Esta consulta de solo lectura se planifica y ejecuta en una tabla escrita vacía con Apache DataFusion 45.2.0. El resultado de la muestra determinista es sintético y se revisa por separado; valide tipos de campos, umbrales y definiciones comerciales con sus propios datos. Lea la metodología de prueba.

Resultado de la consulta

Consultas repetidas dentro de las solicitudes.

La ruta de pago repite la huella digital de la línea de pedido al menos cinco veces en dos solicitudes.

route_templatequery_fingerprintrequestsrequests_with_repeatsaverage_executions_per_requestmaximum_executions_in_request
/api/checkoutSELECT line_items BY order_id3246
/api/profileSELECT user WITH preferences3011

Salida de ejemplo sintético. Ejecute la consulta con su propio esquema de eventos y umbrales antes de utilizarla para decisiones operativas.

Repeated queries inside requests: gráfico estático de valores sintéticos de requests_with_repeats del resultado del ejemplo Detect N+1 Database Query Patterns
SVG indexable de la salida del ejemplo determinista. Descárguelo para ver un artículo, un runbook o una revisión de diseño con atribución.

Reproducir el ejemplo

Descargar el accesorio público

El paquete JSON incluye el contrato de evento escrito, reproducible filas de entrada, SQL exacto, resultado esperado, notas de revisión y versión del motor. El CSV contiene el resultado mostrado.

Cómo funciona el SQL

  1. 1La consulta interna establece la repetición a nivel de solicitud antes de cualquier agregación a nivel de ruta.
  2. 2Una huella digital controlada agrupa operaciones parametrizadas equivalentes sin conservar los valores SQL sin formato.
  3. 3Tanto la prevalencia como la repetición en el peor de los casos se preservan, de modo que una solicitud extrema no parece sistémica.

Casos extremos para decidir

  • Elija un umbral que se ajuste al comportamiento intencional de paginación y procesamiento por lotes.
  • El trabajo asíncrono necesita un identificador de correlación que sobreviva al traspaso de la solicitud al trabajador.
  • Los eventos de consulta de muestreo pueden ocultar recuentos de repeticiones exactos; utilice muestreo con reconocimiento de rastros o documente la estimación.

Panel recomendado

  • Barras: requests_with_repeats por ruta y huella dactilar
  • Tendencia: ejecuciones promedio por solicitud por lanzamiento
  • Enlace de seguimiento: secuencia de consulta para un request_id seleccionado

Guía de alerta

Prefiera una alerta de regresión de publicación cuando la prevalencia de consultas repetidas aumente materialmente, en lugar de paginar en una sola solicitud.

Leer configuración de alerta

Pon la receta a trabajar

Instrumentación y guías relacionadas.

Continuar el análisis

Ejecútelo en eventos reales.

Crea una tabla, adapta los campos y guarda el resultado.

Comience gratis, envíe eventos estructurados y utilice el resultado de la consulta como un gráfico, un widget de panel compartido o una entrada de alerta.

Obtén una clave API