Los planes de consulta cambian el rendimiento peor en SQL Server 2014

10

Recientemente actualizamos nuestro servidor de SQL Server 2008R2 a SQL Server 2014. Tenemos una consulta que funcionó bien en 2008R2 pero ahora en 2014 funciona increíblemente mucho más lento y tiene un mal plan de ejecución.

He hecho varias pruebas ...

  1. Cambie el DB 2014 al modo de compatibilidad 2008/2012.
  2. Probar la consulta usando Paginación.

Ambos resultados dieron como resultado que la consulta se ejecutara igual que rápido y que SQL Server 2008R2.

¿Por qué el plan es tan malo y la consulta se ejecuta tanto tiempo en SQL Server 2014?

Estimación Actual

Esta imagen muestra 2 consultas, una con número de rown de la forma en que se ejecutó en 2008R2, y luego la segunda es la corrección con paginación. Ambos se ejecutaron en 2014, ambos muy diferentes, pero en 2008 vemos el mismo rendimiento que si usáramos la paginación en 2014.

Jeff
fuente

Respuestas:

7

Esto no es un problema, es por diseño y se considera una mejora del rendimiento.

Si sus consultas no se ejecutan como se espera, deberá abordar esto en el código de su base de datos / aplicación.

Puede forzar el antiguo estimador de carnalidad usando el indicador de traza 9481 en el servidor, sesión o nivel de consulta (usando OPTION (QUERYTRACEON 9481)). Esto lo forzará sin importar el nivel de compatibilidad de la base de datos.

También hay un montón de información que el equipo de CSS publicó aquí .

Una publicación más detallada sobre el Cardanility Estimator y los cambios en torno a ese proceso en SQL Server 2014, incluye un ejemplo.

Paul White 9
fuente
Eso suena como una pésima excusa para que algo salió mal
dvdmn