Si de repente encuentra que es extremadamente lento para su software comunicarse con la base de datos, ¿cuál es el posible problema?

No dice qué RDBMS está utilizando (solo supongo que es un DBMS relacional), pero puedo decirle por experiencia que las limitaciones de MySQL, es decir, su capacidad de usar solo un índice para optimizar cualquier consulta dada , combinado con su uso de estadísticas de comportamiento de consultas históricas para seleccionar qué índice usar puede llevarlo a hacer una buena elección de índice durante días o semanas y luego “repentinamente” un día cuando las estadísticas han cambiado, elige un índice que es en realidad no es apropiado y los tiempos de consulta van por las nubes.

Además, si tiene una base de datos fragmentada, MySQL recopilará diferentes estadísticas sobre cada fragmento y luego podrá obtener respuestas rápidas en un fragmento y respuestas muy lentas en otro.

Si esto le está sucediendo, no es difícil solucionar el problema. Agregue una sugerencia USE INDEX a su consulta y tome la decisión de manos del optimizador de consultas risible de MySQL.

Lo primero es ejecutar un plan de explicación en la consulta que sea lento. Eso debería darte si la consulta está usando índices o no. Ejecute la consulta a través de la interfaz gráfica de usuario de su elección para ver cuántos datos se devuelven, quizás le falta un límite.

Luego examine la consulta en profundidad, ¿su tabla se une en el orden correcto? ¿Hay muchas subconsultas que podrían estar ralentizando las cosas? ¿La consulta ejecuta un escaneo completo de la tabla?

Después de eso, considere el medio ambiente. ¿Está almacenando en caché los resultados de la consulta en memcached (u otro caché)? De esa manera, ¿solo el primer usuario puede recibir el impacto inicial en los tiempos de espera?

¿Es lento para comunicarse o lento para que se ejecute una consulta particular o un conjunto de consultas?

Un conjunto muy diferente de cuestiones a tener en cuenta. Si todas las comunicaciones son lentas, observe su red de extremo a extremo. Asegúrese de que todos los puertos se comuniquen realmente a dúplex completo y a la misma velocidad. El peor de los casos en conmutadores muy antiguos en modo de detección automática es que a veces tienen un valor predeterminado de 10Mbit half-duplex. Eso realmente retrasará las cosas.

Si el rendimiento es bueno pero las consultas específicas son lentas, observe los índices que se usan (o no se usan) y vea si es necesario ejecutar las estadísticas de actualización.

More Interesting

Amazon, Facebook y Google prueban algunos de sus cambios de diseño front-end y back-end con un pequeño número de clientes antes de lanzarlos a todos. ¿Qué tipo de métodos y tecnología utilizan para hacer eso? ¿Es posible con Rails?

¿Qué teoría de la informática debería saber todo ingeniero de software?

¿Hay programadores que escriben código prácticamente libre de errores?

¿Es una buena idea adherirse estrictamente a Scrum?

¿Cuáles son los roles de un arquitecto de software?

¿Qué es el algoritmo de clasificación paralela de Preparata? ¿Alguien puede explicarlo en términos simples?

¿Para qué sirve MapReduce?

¿Es un MacBook esencial para cada desarrollador?

¿Lo que un programador se llama a sí mismo realmente hace una diferencia en términos de cuán habilidoso se percibe que es?

¿Cuál será la situación para los ingenieros de software para 2020, 2025, 2040? ¿La demanda aumentará o la IA escribirá mejor código que los humanos?

¿Qué tecnologías necesito saber para DevOps?

¿Cuál es la mejor manera de enviar datos en tiempo real a una aplicación móvil desde un servidor?

¿Es importante para un principiante escribir código claro y legible?

¿Qué debe entender todo informático o ingeniero de software acerca de la computación paralela?

¿Qué es diferente en la educación en informática en Rusia, que hace que los programadores rusos estén en la cima en los concursos de programación? ¿Es consecuencia de la educación centrada en la ingeniería en la antigua URSS?