Personaje con datos sobredimensionados One character with oversized data (inventory, mail, buffs)
ID de la causa pt-heavy-char · Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Infraestructura de BD (Equipo de infraestructura)
Un personaje con miles de objetos o correos acumulados, o con listas de amigos o de bloqueados y buffs fuera de lo normal, tiene varias veces más datos que cargar al conectarse, que guardar y que anunciar a su alrededor. Va lento solo con ese personaje, sin importar la conexión.
Por qué Un personaje antiguo o las recompensas de eventos acumulan miles de elementos en el inventario o el buzón → Efecto En cada conexión, cambio de zona o guardado se lee y escribe todo eso en la BD, y la información de equipamiento y buffs que se envía a los de alrededor también es grande → En pantalla Solo ese personaje tiene cargas de entrada largas y tirones al abrir el inventario o el correo. Si el servidor espera el guardado en el hilo del juego, los de alrededor también sufren una pausa breve
Al conectar o tras un mantenimiento, Al hacer ciertas acciones, Al moverse o cambiar de zona
Responsable
Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Infraestructura de BD (Equipo de infraestructura)
Tareas (Equipo de desarrollo)
Poner límites de almacenamiento al inventario y al correo y limpiar automáticamente los correos antiguos, cargar por partes solo lo necesario, guardar solo lo que cambió y fuera del hilo del juego.
Tareas (Equipo de infraestructura)
Buscar en el log de consultas lentas las consultas lentas que se repiten con el mismo personaje y pasarlas al equipo de desarrollo, entregar la lista de personajes con más filas de objetos y de correo.
Cifras de referencia
Si cada objeto es una fila en la BD, un personaje con 5,000 objetos lee 5,000 filas cada vez que se conecta. Decenas de veces más que un personaje normal.
En el gráfico
Alto solo en algunos · Tiempo de conexión y de guardado por personaje, filas leídas de la BD por personaje
Dónde mirar
Buscar en el log de consultas lentas de la BD (MySQL slow query log, PostgreSQL log_min_duration_statement) las lecturas y guardados lentos que se repiten con el mismo ID de personaje, y sacar la lista de personajes con más filas en las tablas de objetos y de correo
Se confirma si
Las consultas lentas se concentran en unos pocos ID de personaje, esos personajes tienen decenas de veces más filas de objetos y de correo que la media, y van igual de lentos desde otra computadora y otra conexión
Se descarta si
Si otros personajes de la misma cuenta u otros jugadores también van lentos, apunta a los servidores de BD o a los bloqueos. Si ese personaje va bien desde otra computadora, apunta al entorno del jugador
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)
Para saber más
Si con el mismo personaje va igual de lento desde otra computadora y otra conexión, mientras los demás personajes de la misma cuenta van bien, hay que sospechar de los datos del personaje. Por eso el reporte debe incluir siempre el nombre del personaje.
Fuentes
Extraneous Fetching antipatternMicrosoft Azure Traer más datos de los necesarios aumenta la carga de E/S y vuelve lentas las respuestas