Oh Dios mío, creo que los he visto a todos. La mayoría de las veces es un esfuerzo para solucionar los problemas de rendimiento por parte de alguien que es demasiado perezoso para resolver el problema de la CAUSA de esos problemas de rendimiento o incluso investigar si realmente hay un problema de rendimiento. En muchos de estos casos, me pregunto si no es solo el caso de esa persona que quiere probar una tecnología en particular y busca desesperadamente un clavo que se ajuste a su nuevo y brillante martillo.
Aquí hay un ejemplo reciente:
El arquitecto de datos viene a mí con una propuesta elaborada para particionar verticalmente una tabla clave en una aplicación bastante grande y compleja. Quiere saber qué tipo de esfuerzo de desarrollo sería necesario para adaptarse al cambio. La conversación fue así:
Yo: ¿Por qué estás considerando esto? ¿Cuál es el problema que estás tratando de resolver?
Él: la tabla X es demasiado amplia, la estamos dividiendo por razones de rendimiento.
Yo: ¿Qué te hace pensar que es demasiado ancho?
Él: El consultor dijo que hay demasiadas columnas para tener en una tabla.
Yo: ¿ Y esto está afectando el rendimiento?
Él: Sí, los usuarios han reportado ralentizaciones intermitentes en el módulo XYZ de la aplicación.
Yo: ¿Cómo sabes que el ancho de la tabla es la fuente del problema?
Él: Esa es la tabla de claves utilizada por el módulo XYZ, y es como 200 columnas. Debe ser el problema.
Yo (Explicando): Pero el módulo XYZ en particular usa la mayoría de las columnas de esa tabla, y las columnas que usa son impredecibles porque el usuario configura la aplicación para mostrar los datos que desea mostrar de esa tabla. Es probable que el 95% del tiempo terminemos uniendo todas las mesas de nuevo, lo que perjudicaría el rendimiento.
Él: El consultor dijo que es demasiado amplio y que debemos cambiarlo.
Yo: ¿Quién es este consultor? No sabía que contratamos a un consultor, ni hablaron con el equipo de desarrollo.
Él: Bueno, todavía no los hemos contratado. Esto es parte de una propuesta que ofrecieron, pero insistieron en que necesitábamos rediseñar esta base de datos.
Yo: Uh huh Entonces, el consultor que vende servicios de rediseño de bases de datos cree que necesitamos un rediseño de la base de datos ...
La conversación siguió y siguió así. Luego, volví a mirar la tabla en cuestión y determiné que probablemente podría reducirse con una simple normalización sin necesidad de estrategias de partición exóticas. Esto, por supuesto, resultó ser un punto discutible una vez que investigué los problemas de rendimiento (previamente no reportados) y los rastreé a dos factores:
- Faltan índices en algunas columnas clave.
- Unos pocos analistas de datos deshonestos que estaban bloqueando periódicamente las tablas de claves (incluida la "demasiado amplia") consultando la base de datos de producción directamente con MSAccess.
Por supuesto, el arquitecto todavía está presionando para una partición vertical de la mesa colgando del metaproblema "demasiado amplio". Incluso reforzó su caso al obtener una propuesta de otro consultor de bases de datos que pudo determinar que necesitábamos cambios importantes en el diseño de la base de datos sin mirar la aplicación o ejecutar ningún análisis de rendimiento.