Back to BlogCómo un CTO Detecta Consultas Lentas Antes de que Finanzas Escale el Problema
Analytics8 min read

Cómo un CTO Detecta Consultas Lentas Antes de que Finanzas Escale el Problema

NeonEdge es una plataforma iGaming nativa en cripto con sede en Tallinn, Estonia, construida en torno a juegos de crash con equidad demostrable y soporte multicadena en ETH, Tron, Polygon y SOL. La plataforma atiende a aproximadamente quince mil usuarios activos mensuales y gestiona cerca de $5M por semana en gross gaming revenue. Es un equipo ágil y técnicamente ambicioso — dos ingenieros son responsables de toda la infraestructura de datos — y Priya Desai, CTO y Directora de Datos, es la persona a la que tanto producto como finanzas llaman cuando algo tarda más de lo esperado.

Productos utilizados: Query Performance Analytics, Infrastructure Monitor, Cost Optimization

20 minutos | tiempo total de investigación

3 | consultas problemáticas identificadas desde cero

12x | velocidad media tras desplegar las optimizaciones


Desafío

Las quejas llegaron en el mismo periodo de cuarenta y ocho horas, desde dos direcciones distintas. El equipo de producto abrió un hilo en Slack diciendo que los informes de actividad de jugadores se sentían lentos — "a veces haces clic, esperas y te rindes." Finanzas fue más directa: el informe semanal de conciliación de GGR había empezado a agotarse a mitad de carga y el CFO había terminado capturando pantallazos de una página a medio renderizar antes de que crasheara. Sin códigos de error, sin fallos evidentes — solo lentitud que había cruzado silenciosamente de molesta a rota.

El kit de diagnóstico estándar de Priya para este tipo de problema no era rápido. Rastrear la latencia de consultas en un stack de datos multicadena implicaba correlacionar logs de tres servicios separados, revisar manualmente la utilización de recursos del clúster y reconstruir qué transformación upstream añadía tiempo a qué informe downstream. En un buen día con los logs correctos ya disponibles, esto llevaba entre dos y tres horas. En un mal día — el tipo en que la consulta lenta solo aparece bajo carga — podía extenderse toda la tarde.

El problema estructural era que el stack de datos de NeonEdge había crecido de forma orgánica. Las decisiones de ingeniería tempranas — sensatas con cinco mil MAU — no se habían revisado cuando la plataforma superó los quince mil. Nadie había tomado la decisión deliberada de omitir índices ni de escribir un escaneo completo de tabla en un informe central; simplemente había ocurrido, gradualmente, mientras el equipo estaba enfocado en lanzar funcionalidades en lugar de auditar los patrones de acceso a datos.

"Somos un equipo de datos de dos personas gestionando infraestructura para quince mil usuarios y cinco millones por semana en GGR. No me puedo permitir pasar un día entero buscando una consulta lenta. Necesito el cuello de botella en mi pantalla en veinte minutos, o el problema se queda para el siguiente sprint."

— Priya Desai, CTO, NeonEdge


Solución

Priya abrió Gaming Mind AI y describió el síntoma en términos sencillos: los informes son lentos, nadie sabe qué consulta es la culpable y el problema lleva dos días escalando. Gaming Mind se conectó a la telemetría de infraestructura de NeonEdge y comenzó con la pregunta diagnóstica más directa: qué consultas están consumiendo más tiempo de ejecución en el stack en este momento.

Así se desarrolló la investigación:


Priya: "Los informes son lentos en general. ¿Por dónde empiezo?"

Ranking Nombre de Consulta Tiempo Medio de Ejecución Tiempo p99 Ejecuciones/Día Solicitante % del Tiempo Total de Consultas
1 Informe de Conciliación GGR 41,2 seg 68,4 seg 4 Finanzas 24%
2 Informe de Actividad de Jugadores 31,0 seg 54,1 seg 8 Producto 22%
3 Informe de Cohortes de Jugadores 28,3 seg 47,6 seg 6 Producto / CRM 12%
4 Atribución de Ingresos de Afiliados 5,8 seg 11,2 seg 12 Marketing 4%
5 Resumen de Usuarios Activos Diarios 5,1 seg 9,7 seg 24 Ops 4%
6 Conciliación de Liquidaciones por Cadena 4,9 seg 9,1 seg 6 Finanzas 3%
7 Actualización de Puntuación de Riesgo de Abandono 4,4 seg 8,3 seg 2 CRM 2%
8 Snapshot de Saldo de Cartera 3,8 seg 7,2 seg 48 Ops 2%
9 Informe de Utilización de Bonos 3,2 seg 6,4 seg 4 Producto 1%
10 Embudo de Nuevos Registros 2,9 seg 5,8 seg 24 Marketing 1%
(todas las demás) — < 2,0 seg < 4,0 seg — Varios 25%
Total top 3 ~100 seg combinados 58%
Total top 10 71%

⚠️ Gaming Mind flags: Las 3 consultas principales representan el 58% del tiempo total de ejecución de consultas. La distribución es llamativamente desigual — las consultas 1–3 promedian entre 28 y 41 segundos cada una, mientras que las consultas 4–10 promedian menos de 6 segundos combinadas. Corregir las 3 primeras reducirá el tiempo total de consultas en un 58% estimado sin tocar nada más.

La primera respuesta de Gaming Mind fue un ranking de latencia que cubría los siete días anteriores de ejecución de consultas. Las diez consultas más lentas representaban el 71% del tiempo total de ejecución, pero la distribución era llamativamente desigual — las tres peores promediaban entre 28 y 41 segundos cada una, mientras que las posiciones cuatro a diez promediaban menos de seis segundos combinadas. Gaming Mind señaló las tres primeras como las únicas que valía la pena investigar de inmediato: corregirlas reduciría el tiempo total de consultas en un 58% estimado sin tocar nada más. Priya tenía su punto de partida en menos de noventa segundos.


Priya: "Cuéntame sobre la más lenta."

Consulta: Informe de Conciliación GGR

Etapa Operación Filas Escaneadas Filas de Salida Tiempo de Etapa Tiempo Acumulado
1 Escaneo completo de tabla — transaction_ledger 84.200.000 84.200.000 28,4 seg 28,4 seg
2 Filtro: registros de esta semana 84.200.000 312.400 6,1 seg 34,5 seg
3 Join: metadatos de cadena 312.400 312.400 2,8 seg 37,3 seg
4 Agregación: GGR por cadena + tipo de juego 312.400 48 1,9 seg 39,2 seg
5 Formatear salida 48 48 2,0 seg 41,2 seg
Diagnóstico Detalle
Rango de fechas de datos escaneado Desde el lanzamiento de la plataforma (18 meses) hasta la fecha
Rango de fechas requerido Solo la semana actual
Filtro de fecha aplicado antes del escaneo No
Clasificación del patrón de acceso Escaneo histórico sin filtrar
Severidad 🔴 Alta — antipatrón de rendimiento conocido en arquitecturas de ledger de alta inserción
Causa raíz Falta predicado WHERE de fecha antes del escaneo de tabla — decisión de diseño de hace 18 meses nunca revisada

⚠️ Gaming Mind flags: El Informe de Conciliación GGR — exactamente la consulta de la que se quejó Finanzas — está realizando un escaneo completo de tabla a lo largo de 18 meses de historial de transacciones para responder una pregunta que solo necesita la semana actual. Aplicar un filtro de fecha antes del escaneo es la única corrección necesaria. Esta es la causa raíz del timeout del CFO de Finanzas.

La peor consulta era el informe de conciliación GGR — exactamente de lo que se había quejado Finanzas. Gaming Mind desglosó su plan de ejecución etapa por etapa: un escaneo completo de tabla estaba tocando cada fila del ledger de transacciones, incluidos registros históricos que se remontaban al lanzamiento de la plataforma, cada vez que el informe se ejecutaba. La consulta no tenía ningún filtro de fecha aplicado antes del escaneo, lo que significaba que procesaba casi dieciocho meses de historial de transacciones para responder una pregunta que solo necesitaba la semana actual. Gaming Mind clasificó esto como un patrón de acceso de alta severidad y lo denominó escaneo histórico sin filtrar — un antipatrón de rendimiento conocido en arquitecturas de ledger de alta inserción. La causa raíz era una decisión de diseño tomada dieciocho meses atrás que nadie había revisado.


Priya: "¿Qué ocurre con la segunda?"

Consulta: Informe de Actividad de Jugadores

Etapa Operación Filas de Entrada Filas de Salida Tiempo de Etapa Tiempo Acumulado
1 Escaneo: player_sessions 2.100.000 2.100.000 4,2 seg 4,2 seg
2 Join: game_events (amplio, antes del filtro) 2.100.000 18.700.000 12,8 seg 17,0 seg
3 Join: wallet_activity 18.700.000 18.700.000 7,1 seg 24,1 seg
4 Filtro: segmento de jugador + rango de fechas 18.700.000 480.000 4,6 seg 28,7 seg
5 Agregación + formato 480.000 920 2,3 seg 31,0 seg
Diagnóstico Detalle
Etapa cuello de botella Etapa 2 — el join se expande antes de que el filtro lo reduzca
Pico del conjunto de resultados intermedios 18.700.000 filas (~3x el tamaño necesario)
Causa El orden del join coloca el join amplio antes del filtro más restrictivo
Corrección Aplicar filtro de segmento de jugador + rango de fechas antes del join con game_events
Tamaño intermedio estimado tras la corrección ~6.200.000 filas
Tiempo de ejecución estimado tras la corrección < 5 seg
Reducción de memoria ~66%

⚠️ Gaming Mind flags: El join del Informe de Actividad de Jugadores se expande antes de filtrar — produciendo un conjunto de resultados intermedios casi 3x más grande de lo necesario. Invertir dos pasos en la secuencia del join (aplicando primero el filtro más restrictivo) reducirá el consumo de memoria intermedia en aproximadamente dos tercios y llevará el tiempo de ejecución de 31 segundos a menos de 5.

La segunda consulta problemática alimentaba el informe de actividad de jugadores que había señalado el equipo de producto. Gaming Mind identificó un join multietapa que se expandía antes de filtrar — procesando un conjunto de resultados intermedios amplio a su tamaño máximo antes de reducirlo por segmento de jugador y rango de fechas. El orden del join producía tablas intermedias casi tres veces más grandes de lo necesario. Gaming Mind anotó la etapa exacta donde el conjunto de resultados se disparaba y estimó que invertir dos pasos en la secuencia del join — aplicando primero el filtro más restrictivo — reduciría el consumo de memoria intermedia en aproximadamente dos tercios y llevaría el tiempo de ejecución de treinta y un segundos a menos de cinco.


Priya: "¿Y la tercera?"

Consulta: Informe de Cohortes de Jugadores

Columna Índice Individual Existente Parte de Índice Compuesto Cardinalidad Tiempo Empleado en Resolver la Intersección
chain_identifier Sí No Baja (4 valores) —
registration_date Sí No Alta (540 días) —
game_category Sí No Media (12 valores) —
chain_identifier + registration_date + game_category No No — ~19 seg por ejecución
Diagnóstico Detalle
Tipo de índice faltante Índice compuesto en (chain_identifier, registration_date, game_category)
Método de resolución actual Intersección manual en tiempo de consulta
Tiempo de ejecución estimado con índice compuesto < 3 seg
Consultas en la plataforma que usan esta combinación de columnas 14 consultas distintas
Consultas adicionales aceleradas al añadir 1 índice compuesto 13
Severidad 🔴 Alta — corrección única, impacto en toda la plataforma

⚠️ Gaming Mind flags: Las tres columnas que aparecen en cada versión de esta consulta — chain_identifier, registration_date y game_category — están indexadas individualmente pero nunca como compuesto. Añadir un índice compuesto eliminará el trabajo de intersección manual y acelerará el informe de cohortes más otras 13 consultas de la plataforma simultáneamente.

La tercera consulta lenta era el informe de cohortes de jugadores, utilizado semanalmente tanto por producto como por el equipo CRM. Gaming Mind detectó una brecha en la cobertura de índices: tres columnas que aparecían juntas en cada versión de esta consulta — identificador de cadena, fecha de registro y categoría de juego — estaban indexadas individualmente pero nunca como compuesto. Cada ejecución resolvía la intersección manualmente en tiempo de consulta, realizando trabajo que un único índice compuesto habría eliminado por completo. Gaming Mind señaló que esta combinación de columnas aparecía en catorce consultas distintas en toda la plataforma, lo que significaba que añadir un único índice aceleraría el informe de cohortes y otras trece consultas simultáneamente.


Priya: "Muéstrame el consumo de recursos del clúster mientras estas están ejecutándose."

Utilización de Recursos a 14 Días — Ventanas de Informes Programados en Pico

Fecha Ventana de Informe Pico CPU Pico Memoria Pico I/O Consultas Lentas Concurrentes ¿Cascada en Cola?
Día 1 09:00–09:45 74% 71% 68% 1 No
Día 2 09:00–09:45 78% 76% 72% 1 No
Día 3 09:00–09:45 81% 79% 75% 2 No
Día 4 09:00–09:45 76% 74% 71% 1 No
Día 5 09:00–09:45 82% 89% 84% 2 Sí
Día 6 09:00–09:45 77% 75% 73% 1 No
Día 7 09:00–09:45 79% 77% 74% 1 No
Día 8 09:00–09:45 83% 89% 85% 2 Sí
Día 9 09:00–09:45 75% 73% 70% 1 No
Día 10 09:00–09:45 84% 91% 87% 2 Sí
Días 11–14 09:00–09:45 72–78% 70–76% 67–73% 0–1 No

Resumen de Riesgos

Métrica Valor
Techo de memoria durante ejecuciones concurrentes de consultas lentas 89–91%
Eventos de cascada en los últimos 10 días 3
Detonante de cascada Conciliación GGR + Actividad de Jugadores ejecutándose concurrentemente
Clasificación de riesgo 🔴 Riesgo de estabilidad del clúster

⚠️ Gaming Mind flags: Cada pico de utilización de CPU e I/O coincide con las ejecuciones programadas de informes. En 3 ocasiones en los últimos 10 días, la ejecución concurrente de los informes de Conciliación GGR y Actividad de Jugadores empujó la memoria por encima del 89%, desencadenando retrasos en la cola que se propagaron en cascada a otras cargas de trabajo — incluido el timeout del CFO de Finanzas. No es solo un problema de consultas lentas. Es un riesgo de estabilidad del clúster.

Gaming Mind superpuso las tres ventanas de consultas lentas sobre el mapa de calor de recursos del clúster de NeonEdge de las últimas dos semanas. El patrón era inconfundible: cada pico en la utilización de CPU e I/O coincidía con ejecuciones programadas de informes, y el clúster estaba alcanzando casi su capacidad máxima de memoria durante la ejecución concurrente de las dos primeras consultas. En tres ocasiones en los últimos diez días, la ejecución concurrente de la conciliación GGR y los informes de actividad de jugadores había empujado la utilización de memoria por encima del 89%, desencadenando retrasos en la cola de consultas que se propagaron en cascada a otras cargas de trabajo — incluido el timeout de Finanzas que había experimentado el CFO. No era solo un problema de consultas lentas. Era un riesgo de estabilidad del clúster.


Priya: "¿Cómo priorizo estas tres correcciones? ¿Cuál hago primero?"

Corrección Consulta Speedup Estimado Esfuerzo de Implementación Riesgo de Despliegue Consultas Impactadas Orden Recomendado
Añadir índice compuesto (chain_id + reg_date + game_cat) Informe de Cohortes ~9x Bajo (< 1 h) Muy bajo 14 consultas 1.º — desplegar hoy
Reescribir orden del join (filtrar antes de expandir) Informe de Actividad de Jugadores ~6x Medio (3–4 h) Bajo (probar en staging) 1 consulta 2.º — desplegar tras staging
Añadir predicado de fecha antes del escaneo de tabla Conciliación GGR ~12x Medio (2–3 h) Medio (dependencia de horario de Finanzas) 1 consulta + elegibilidad de caché 3.º — próxima ventana de mantenimiento de Finanzas

Detalle de Puntuación

Corrección Puntuación Speedup Puntuación Esfuerzo Puntuación Riesgo Puntuación Amplitud de Impacto Puntuación Total de Prioridad
Índice compuesto 3/5 5/5 5/5 5/5 18/20
Reescritura del join 4/5 3/5 4/5 2/5 13/20
Predicado de fecha 5/5 3/5 3/5 3/5 14/20

⚠️ Gaming Mind flags: Desplegar primero el índice compuesto — menor riesgo, más rápido de implementar, mayor impacto positivo en 14 consultas de la plataforma. La reescritura del join GGR tiene el mayor speedup individual (12x estimado) pero requiere validación en staging con los parámetros exactos del informe de Finanzas. La corrección del escaneo de tabla debe coordinarse con la ventana de mantenimiento de Finanzas antes del despliegue.

Gaming Mind produjo una matriz de prioridades que puntuaba cada corrección en cuatro dimensiones: speedup estimado, complejidad de implementación, riesgo de despliegue y amplitud del impacto downstream. El índice compuesto fue clasificado primero — menor riesgo, más rápido de desplegar y el mayor impacto positivo en las catorce consultas afectadas de la plataforma. La reescritura del join GGR fue clasificada segunda: mayor speedup individual con una mejora estimada de doce veces, pero requiriendo pruebas cuidadosas contra los parámetros exactos del informe de Finanzas antes del despliegue. La corrección del escaneo de tabla sin filtrar fue clasificada tercera — también de alto impacto, pero implicando un cambio de filtro de fecha a un informe que Finanzas ejecutaba en un horario semanal fijo, lo que significaba coordinar una ventana de despliegue. Gaming Mind recomendó desplegar primero el índice, probar la reescritura del join en staging y programar la corrección del escaneo de tabla para la próxima ventana de mantenimiento de Finanzas.


Priya: "¿Cuál es el speedup total estimado si corrijo las tres?"

Rendimiento Proyectado Post-Optimización

Consulta Antes Después Speedup
Informe de Conciliación GGR 41,2 seg 3,4 seg ~12x
Informe de Actividad de Jugadores 31,0 seg 4,8 seg ~6x
Informe de Cohortes de Jugadores 28,3 seg 3,1 seg ~9x
Tiempo medio combinado de generación de informes 45,0 seg < 4,0 seg > 11x

Margen de Recursos del Clúster

Métrica Antes de las Correcciones Después de las Correcciones Cambio
Utilización de memoria (ejecuciones concurrentes de informes) 89% (techo) ~34% -55pp
Eventos de cascada en cola por 10 días 3 0 (proyectado) Eliminado
Riesgo de timeout del informe del CFO Activo Ninguno Eliminado

Beneficio Secundario — Caché de Conciliación GGR

Detalle Valor
Elegibilidad de caché post-corrección Sí (el predicado de fecha habilita el pre-cómputo)
Reducción estimada del coste de cómputo mensual ~60%
Módulo que detecta este beneficio Cost Optimization

⚠️ Gaming Mind flags: Las tres correcciones combinadas proyectan reducir el tiempo medio de generación de informes de 45 segundos a menos de 4 — una reducción de más del 90%. La memoria del clúster durante los picos de ejecuciones programadas caerá del 89% a ~34%, eliminando por completo el riesgo de cascada en cola. La corrección de conciliación GGR también desbloquea la elegibilidad de caché por pre-cómputo, con una reducción proyectada del gasto de cómputo de ese informe de aproximadamente el 60% mensual.

Gaming Mind modeló el efecto combinado. Las tres correcciones juntas proyectaban reducir el tiempo medio de generación de informes de cuarenta y cinco segundos a menos de cuatro — una reducción de más del noventa por ciento. Se esperaba que la utilización de memoria del clúster durante los picos de ejecuciones programadas cayera del techo actual del 89% a alrededor del 34%, eliminando por completo el riesgo de cascada en cola. La proyección también señaló un beneficio secundario: con el escaneo de tabla sin filtrar resuelto, el informe de conciliación GGR pasaría a ser elegible para caché por pre-cómputo, lo que el módulo de Cost Optimization de Gaming Mind estimaba que reduciría el gasto de cómputo de ese informe en aproximadamente el sesenta por ciento mensual.

"Entré esperando pasar la tarde en archivos de log. Gaming Mind tenía las tres consultas clasificadas, perfiladas y priorizadas en veinte minutos. Incluso me dijo el orden en que corregirlas. Solo necesitaba escribir el código."

— Priya Desai


Resultados

Investigación completada en 20 minutos desde cero

Priya no tenía dashboards preconfigurados para el rendimiento de consultas ni ningún incidente abierto desde el que rastrear. Gaming Mind extrajo la telemetría, clasificó a los culpables y produjo una lista de correcciones ordenada para el despliegue en una única conversación. Cero archivos de log abiertos, cero tickets de soporte creados, cero ingenieros retirados de otros trabajos.

Tres causas raíz identificadas en tres tipos de problema distintos

Cada consulta lenta tenía una causa estructuralmente distinta — un escaneo histórico sin filtrar, un orden de join subóptimo y un índice compuesto faltante. Gaming Mind diagnosticó las tres y explicó cada una en términos sencillos que Priya podía comunicar directamente al equipo de ingeniería sin traducción. La investigación reveló problemas que se habían ido acumulando durante meses, no solo los síntomas reportados en las cuarenta y ocho horas anteriores.

Speedup medio de 12x tras desplegar las correcciones

El índice compuesto entró en producción esa misma tarde. La reescritura del join superó las pruebas de staging antes del final del día y se desplegó a la mañana siguiente. La corrección del escaneo de tabla se coordinó con Finanzas y se desplegó en la siguiente ventana de mantenimiento. Tras los tres cambios, el tiempo medio de generación de informes cayó de cuarenta y cinco segundos a tres segundos y cuarenta y dos centésimas — una mejora de doce veces medida contra la propia telemetría de la plataforma.

Riesgo de estabilidad del clúster eliminado antes de convertirse en incidente

El techo de utilización de memoria — que había estado silenciosamente cerca del 89% durante las ejecuciones concurrentes de informes — cayó al 34% tras las correcciones. Los tres eventos de cascada que habían ocurrido en los diez días anteriores eran la señal de alerta temprana de un clúster que se acercaba al fallo bajo carga. Gaming Mind detectó este riesgo en el análisis del mapa de calor de recursos; sin él, el siguiente incidente probablemente habría sido una interrupción total de informes durante una sesión de fin de semana de alto tráfico.

Coste de cómputo mensual proyectado a caer un 60% para el informe de conciliación

El módulo de Cost Optimization señaló la elegibilidad post-corrección del informe de conciliación GGR para caché por pre-cómputo. El equipo de Priya implementó la capa de caché dos semanas después de las correcciones iniciales, y la factura de infraestructura del mes siguiente para esa carga de trabajo de informe llegó al treinta y ocho por ciento del nivel base anterior — ligeramente mejor de lo proyectado.

"El clúster estaba a tres malos domingos de una interrupción real y no lo sabíamos. La investigación de rendimiento encontró las consultas lentas, pero el mapa de calor de recursos encontró el riesgo de estabilidad. Esa es la parte que realmente me asustó — y la parte de la que más me alegra que la hayamos detectado antes de que nos pillara a nosotros."

— Priya Desai, CTO, NeonEdge

Want to see how Gaming Mind AI can help your operation?

Get a Demo