sixty

para qué sirve

Una página, decenas de llamadas a la base de datos

Una página de listado que antes iba rápida ahora tarda un segundo o dos, y empeora según crece la lista. Cada consulta individual parece correcta cuando la compruebas. Diez elementos van bien; cien, no.

Por qué cuesta verlo

Esto es un N+1, y nace dentro de un render: algo obtiene una lista y luego obtiene un registro relacionado por cada elemento. Cada consulta es genuinamente rápida, por eso medir el tiempo por petición no lo detecta y por eso sobrevive a la revisión — el código se lee perfectamente sensato. Lo único que está mal es el número.

Suele llegar con una refactorización antes que con una funcionalidad. Mover una petición dentro de un componente que se renderiza una vez por fila es un cambio de una línea y convierte una consulta en tantas como filas tengas.

Qué hace Sixty al respecto

Las llamadas a la base de datos se cuentan por render y se comparan entre versiones, así que el hallazgo es «esta operación hacía una consulta por render y ahora hace catorce, desde este despliegue» en vez de un número de latencia que tienes que interpretar. Los frames de la pila vienen con él, así que el render responsable queda nombrado.

Esas pruebas van a tu agente de código por MCP: la consulta, los frames, los recuentos de antes y después, y qué llamadas hijas explican el cambio.

Qué no hace

Contar llamadas por render necesita un agente de servidor, y lo hay para Node, Python, Go, Ruby y PHP — pero solo Node lo consigue sin que se lo pidas. Su transformación de compilación abre un span por función asíncrona exportada por su cuenta; en el resto marcas el código que merece la pena medir (un decorador en Python, dos líneas en Go, un módulo incluido en Ruby, una llamada en PHP) y la atribución es la misma después. Java, .NET, Rust y Elixir no tienen agente ninguno. La mitad del navegador funciona con cualquier backend pero solo ve lo que la propia página pide.

OpenTelemetry

¿Ya tienes OpenTelemetry?

Conserva tu collector y exportadores actuales. Sixty puede ingerir sus trazas conectadas y métricas útiles del runtime para inferir regresiones por versión; los agentes nativos aportan más detalle de funciones y drivers cuando existen.

Conecta tu OpenTelemetry Collector →

Relacionado

Descubre qué hizo tu último cambio.

Iniciar sesión
N+1 en Next.js: una página que hace decenas de consultas — Sixty