Saltear al contenido principal

Desarrollo vs Producción. Resultados diferentes entre ambientes

¿Desarrollo vs Producción? Sería millonario recibiendo 1$ por cada vez que escuché la frase:

…pero, es que funcionaba en Desarrollo

¿Cuántas veces hemos desarrollado un programa, probado hasta el cansancio y cuando llega a Producción no funciona, o funciona exageradamente más lento de lo que funcionaba cuando lo creamos? Suena a película de terror o a una especie de “juro que mi perro se comió la tarea”.

desarrollo-vs-produccion

¿Puede realmente un código idéntico responder de diferente manera en diferentes equipos?

La respuesta que esperamos oir tal vez no esta, pero la verdad es que sí existe esta posibilidad.

No es tan común que suceda en ambientes similares pero ¿qué podría influir para que esto suceda así?

Hardware diferente

La mayoría de las veces los ambientes de Desarrollo son provistos con menor cantidad de recursos que Producción. (Por lo que no tiene ningún sentido que en Desarrollo funcione más rápido ¿verdad?)

Configuraciones del SQL Server diferentes

Me encontré con casos donde los servidores de Producción contaban con un “tuning” aplicado que “no era necesario para Desarrollo” (según sus administradores), donde variaban el Cost Threshold for Parallelism, los Fill Factor, el Max Degree or Parallelism, el uso máximo de memoria u otros.

Menor cantidad de información

Justamente porque a veces tenemos pocos recursos en ambiente de Desarrollo, suelen entregarse bases de datos reducidas y así no tenemos la noción del tamaño que representa Producción.

Información sensible o confidencial

Que el ambiente de Desarrollo tenga datos de prueba, ofuscados, enmascarados, despersonalizados o como quieran llamarlos; pero finalmente cambiados.

Tipo de Pruebas en Desarrollo

Cuando las pruebas son solo funcionales y verificamos que los programas hacen lo que tienen que hacer, suelen considerarse como terminados. Aunque digamos a todos nuestros colegas alrededor que prueben nuestro programa al mismo tiempo, muchas veces no podríamos simular un escenario como el de Producción.

Entonces, ¿cuál es la diferencia?

La verdad es que cualquier diferencia que afecte la forma de trabajo de los algoritmos de estimación de SQL Server, podría afectar en los resultados de nuestras ejecuciones.

  • Los Planes de Ejecución, se generan basados en las estadísticas internas de los objetos como cantidad de registros, selectividad del contenido, tipos de datos.
  • El tipo de procesamiento que generan las consultas también se basa en el grado de paralelismo que requieren en función a las estimaciones del punto anterior. El cambio de configuraciones relacionadas al procesamiento influirá en estas estimaciones.
  • Toda obtención de datos en SQL Server se lleva a memoria y ellos pueden ser reutilizada del buffer cache. Esto puede ser afectado desde diferentes puntos de vista.
    • Si tenemos menos memoria RAM en un servidor, menos información puede ir al cache.
    • Si tenemos limitado el uso máximo de memoria, la cantidad de datos en cache dependerá del tamaño del buffer.
    • El acceso a memoria es aleatorio por concepto, por lo que también dependeremos de cuántas operaciones requieren de ella.
  • Acá también entra en juego lo que está en el Plan Cache de Memoria.
  • También dependeremos de la concurrencia en nuestras ejecuciones. A veces obtenemos datos de una tabla rápidamente, pero
    • ¿qué pasa cuando cientos o miles de consultas piden datos de la misma tabla?
    • ¿qué pasa cuando piden datos de esa tabla mientras otro proceso la actualiza? ¿Son los “bloqueos”?

Entonces, ¿qué debo hacer?

No olvides la importancia de estas diferencias y en ambientes de Desarrollo SIEMPRE realiza pruebas de estrés y concurrencia.

Las pruebas en Desarrollo deben ser hechas en un ambiente lo más parecido posible a un escenario de Producción.

Es importante la coordinación entre los administradores de Producción con los encargados de los desarrollos. Si ambos mantienen configuraciones diferentes de sus servidores, podemos también llegar a resultados diferentes.

Cuando se llega a un punto en el que el análisis debe ser más profundo, podemos empezar comparando los planes de ejecución que se generan en Desarrollo vs Producción y entender dónde y por qué tienen diferencias. A veces incluso debemos llegar a comparar los datos con los que estamos trabajando para comprender cómo se generan estos planes de ejecución.

Pablo Javier Fernández

www.datoptim.com
I love working on SQL Server Performance Tuning and finding the origin of the problems. Music and SQL Server passionate.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Close search

Carrito

Volver arriba