Sidebar

Muchas veces nos sucede que cuando estamos desarrollando un proyecto en nuestro ambiente de desarrollo todo funciona perfectamente, pero a la hora de liberarse a producción comienzan los problemas, los planes de ejecución no son iguales y esto provoca que en desarrollo el proceso que tardaba 5 segundos en producción esta tardando 1 minutos. Nos preguntamos como puede ser posible si los servidores son iguales. Esta articulo nos da unos tips para poder corregir este problema.

Antes que nada cuando nos dicen que el ambiente es idéntico, es obvio que no lo es, algo esta generando planes de ejecución distintos a los de desarrollo. Generalmente lo más fácil para poder igualar los ambientes sería pasar un respaldo de producción a desarrollo y realizar algunas pruebas, pero que pasa si tu base de datos de producción es de 100GB, no seria muy rápido el estar pasando un respaldo y recuperarlo en desarrollo nos podría llevar más de un día realizar esa actividad.
A continuación se muestran las causas por las que un plan de ejecución puede ser distinto de un servidor a otro. Realiza estas pruebas en tus ambientes y seguramente encontraras la diferencia.
  • El número de registros que contienen las tablas son prácticamente los mismos. Los planes de ejecución pueden variar mucho si el tamaño de los datos varia.
  • Los dos servidores tienen los mismos service packs, es muy común que el optimizador de consultas de SQL genera un plan de ejecución distinto para cada service pack, generalmente el último service pack nos va a dar el mejor plan de ejecución.
  • La distribución de los datos son los mismos, es decir que el contenido de los datos sea igual ya puedes tener el mismo número de registros pero cada registro es distinto con el otro servidor.
  • Uno de los planes de ejecución se genera en paralelo y el otro en serie? Es muy difícil comparar planes de ejecución que utilizan muchos CPU’s contra planes de ejecución que utilizan un solo CPU, en primera porque los planes de ejecución son distintos y el echo de que uno de ellos este en paralelo no significa que sea un mejor plan de ejecución que el que esta en serie.
  • Las tablas contienen los mismos índices.
  • Las estadísticas están iguales para todas las tablas incluidas en el query.
  • Las estadísticas están actualizadas para las tablas involucradas en la vista.
  • La fragmentación de las tablas involucradas en el query es igual o similar en los dos servidores
Espero que esto te pueda ayudar a encontrar el problema de performance en tu equipo.