Caso de estudio
Por qué su pantalla de lista principal deja de abrir de repente
La lista principal de un cliente dejó de abrir mientras todas las demás páginas funcionaban. La causa era un registro mucho más grande que el resto, y la misma falla estaba ocurriendo en silencio en una tarea en segundo plano.
Puntos clave
- Una lista que de repente deja de abrir suele tener detrás un registro demasiado grande, no un cambio que alguien hizo.
- Las bases de datos ordenan las filas completas, así que un solo registro más grande que la memoria permitida para el ordenamiento hace fallar toda la página.
- Una lista debería cargar solo lo que muestra; los documentos largos y los archivos pertenecen a la página que abre un solo elemento.
- La misma causa suele estar fallando en silencio en una tarea programada en segundo plano de la que nadie recibe alerta.
- Aumentar un límite de memoria mueve el problema al siguiente registro, más grande, en lugar de eliminarlo.
El equipo de un cliente abrió la lista principal de su sistema interno y la página mostró un error. Nadie había cambiado esa pantalla, y todas las demás páginas funcionaban. La causa era un solo registro que había crecido mucho más que los demás.
Lo que le cuesta al equipo una lista que no abre
La lista principal es donde un equipo encuentra, abre y termina su trabajo, así que cuando deja de abrir, todo el equipo se detiene con ella. En el caso de este cliente, esa lista guarda los elementos con los que trabaja el equipo, los más recientes arriba. La página que usaban sin pensarlo ahora mostraba un error y nada más, mientras todas las demás pantallas se comportaban como siempre.
Esa combinación, una sola pantalla rota y nada cambiado, es lo que hace que estas fallas parezcan un misterio. Según nuestra experiencia, vuelven, porque la falla crece con los datos y no con lo que haya hecho una persona. El mismo síntoma aparece en cualquier sistema que crece: la lista de una herramienta interna que se rompe, una lista del CRM que no abre, una pantalla de la que el equipo depende todo el día.
Por qué una página de lista del sistema que no carga suele deberse a un solo registro grande
Para mostrar primero los elementos más recientes, la base de datos ordena las filas, y las ordena completas. Una base de datos es el almacén donde un sistema interno guarda sus registros, y el ordenamiento ocurre cada vez que se piden registros en un orden determinado. Para un ordenamiento de este tipo, la base de datos reserva una cantidad fija de memoria como espacio de trabajo, y no pesa cada fila antes de empezar: cada fila entra completa al ordenamiento, con todo lo que contiene. Una fila más grande que ese espacio hace fallar toda la lista, por pequeñas que sean las demás.
Por eso el crecimiento en el tamaño de los registros rompe las cosas con la misma seguridad que el crecimiento en su cantidad. Agregar registros hace más lenta una lista; agregar un solo registro inusualmente grande puede impedir que abra del todo.
Lo que encontró nuestro ingeniero
El error venía de la base de datos y decía que se había quedado sin memoria para ordenar. Como se mostraban primero los elementos más recientes, las filas se estaban ordenando, y cada fila llevaba un campo pesado junto con el título y la fecha. Ese campo era un bloque largo de texto que la lista nunca mostraba.
Esos campos suelen ser pequeños. El equipo había empezado hacía poco a crear un nuevo tipo de elemento, y uno de ellos llevaba un campo mucho más largo que cualquier otro anterior. La base de datos reserva una cantidad fija de memoria de trabajo para un ordenamiento de este tipo, y esa fila ya no cabía, así que toda la lista falló. Aumentar la memoria de la base de datos solo habría movido el límite hasta el siguiente registro, más grande.
El punto de giro fue una pregunta sencilla: ¿la lista necesita ese campo? Muestra un título, un estado y una fecha, nada más.
Buscar el mismo error en otros lugares contó el resto de la historia. La misma falla estaba ocurriendo en silencio en una tarea en segundo plano, un trabajo que se ejecuta con un temporizador sin que nadie lo vigile. Nadie lo había visto. El equipo solo sabía de la pantalla que tenía delante.
Lo que cambiamos
Hicimos que la lista lea cada elemento sin el campo pesado, de modo que la página carga solo el título, el estado y la fecha. El campo se lee cuando alguien abre ese elemento, y solo entonces. También agregamos un índice, una estructura de búsqueda que mantiene los elementos en orden de su última modificación, para que mostrar primero lo más reciente no necesite ordenamiento alguno.
Poco después, la misma idea cubrió todo el sistema: salvo que se pidan campos específicos, una solicitud de estos elementos ahora deja fuera el campo pesado de forma predeterminada, incluidas las solicitudes de la tarea en segundo plano. Abrir un solo elemento sigue leyendo el campo completo. Una nueva revisión automática ahora lo detecta si la lista o la tarea vuelven a pedir el campo.
Lo que el negocio tiene ahora
Los cambios se publicaron en el sistema del cliente el mismo día. La lista abre de nuevo y la tarea en segundo plano vuelve a ejecutarse. Un elemento de cualquier longitud ya no puede romper ninguna de las dos, y abrir un solo elemento funciona como antes.
Lo que usted mismo puede revisar
- Pregunte a su desarrollador qué carga su pantalla de lista más usada por cada fila, y si carga algo que la pantalla nunca muestra.
- Pregunte si alguien se entera cuando falla una tarea en segundo plano, y cómo se enteraría hoy si una hubiera estado fallando en silencio.
- Si alguien sugiere aumentar un límite de memoria para que desaparezca un error, pregunte primero qué necesita realmente la pantalla; un límite más alto solo espera al siguiente registro, más grande.
- Cuando empiece un nuevo tipo de trabajo en su sistema, como documentos o archivos mucho más largos, pregunte si alguna pantalla podría atascarse por el tamaño de un solo elemento.
- No se quede solo en la pantalla de la que alguien se quejó. Pregunte si la misma falla está en tareas que nadie revisa.
Qué hacer ahora
Tome la lista que más usa su equipo y haga la pregunta que destrabó esta: qué necesita esta pantalla por cada fila, y qué está cargando de todos modos. Luego pida una forma de enterarse cuando falla una tarea en segundo plano, en lugar de descubrirlo por una pantalla rota. Rastrear una falla así hasta su causa es el tipo de trabajo que nuestros ingenieros hacen para los clientes, y por lo general empieza con una pregunta sencilla sobre lo que una página realmente está pidiendo.
Preguntas frecuentes
¿Cómo me entero si una tarea en segundo plano ha estado fallando en silencio?
Pregunte a quien cuida su sistema si las fallas de los trabajos programados quedan registradas en algún lugar y si alguien recibe una alerta. Si la respuesta es que nadie se enteraría, vale la pena corregirlo primero, porque un trabajo que falla no produce ningún síntoma visible hasta que alguien depende del resultado.
¿Por qué se rompió nuestra pantalla de lista si nadie cambió nada?
Porque cambiaron los datos, no la pantalla. Una lista que ordena sus filas hace que la base de datos tenga cada fila en memoria de trabajo, y un solo registro que crece más allá del espacio permitido basta para detener la página. La pantalla misma puede quedar intacta mucho tiempo antes de que eso ocurra.
¿Cómo puede un solo registro impedir que cargue toda una página?
La base de datos ordena todas las filas juntas, y no se salta las partes grandes de un registro al ordenar. Si una fila es más grande que la memoria reservada para ese ordenamiento, toda la operación falla, así que la página no tiene nada que mostrar. Que los demás registros sean pequeños no ayuda.
¿Deberíamos simplemente aumentar el límite de memoria de la base de datos?
Aumentar el límite puede hacer desaparecer el error por ahora, pero no responde por qué la página estaba cargando tanto. El siguiente registro más largo puede cruzar el nuevo límite, y la misma falla regresa. Es mejor preguntar qué necesita realmente la pantalla y cargar solo eso.
¿Qué debería cargar una pantalla de lista por cada fila?
Una lista debería cargar solo los campos que muestra, como un título, un estado y una fecha. El texto largo, los archivos o los detalles de producción pertenecen a la página que abre un solo elemento. Eso mantiene la lista rápida y evita que un registro grande la rompa.