2011-02-10 26 views
20

¿Cómo uso SQL Server Tuning Advisor para producir recomendaciones basadas en consultas de Entity Framework? Entity Framework utiliza sp_executesql 'query' en lugar de ejecutar la consulta y Tuning Advisor no reconoce estas consultas. Pude obtener el texto de consulta manualmente, pero esto solo funcionará para escenarios muy simples. ¿Cómo lo hago de forma automática?Entity Framework y SQL Server Tuning Advisor

ACTUALIZACIÓN

¿Ayudaría si salvo la información de perfil en una tabla y luego ejecutar alguna aplicación que se tira "sp_executesql" y sólo mantener el texto de la consulta y el uso de estos nuevos datos para ejecutar Asistente para la optimización?

+0

Me gusta esta pregunta. También se debe solicitar en MS Connect, porque el generador actual de SQL no es muy bueno y este es solo uno de muchos problemas. –

+1

Todavía estoy teniendo problemas con esto. He intentado todas las sugerencias a continuación. Difícil encontrar buena información sobre el tema también ... – eatfrog

Respuesta

0

Utilice el Analizador de SQL para capturar una sesión completa de consultas. Cuando haya terminado, puede guardar los resultados del generador de perfiles y ejecutar todo a través del Asesor de ajuste de SQL Server. Según mi experiencia, esto ofrece resultados mucho mejores que la optimización basada en consultas individuales y, en muchos sentidos, es más fácil y más realista ya que puede usar el generador de perfiles para capturar consultas del uso real de la aplicación.

EDIT:

Gracias por traer más atención a la cuestión específica que estás preguntando acerca. No me di cuenta de que estaba diciendo que el Tuning Advisor no entiende sp_executesql porque eso simplemente no es verdad. Puede ejecutar tantas consultas como desee a través del sp_executesql y capturarlas en un perfil y luego ejecutar ese perfil a través de Tuning Advisor y le dará recomendaciones.

Para estar seguro, acabo de hacerlo con MS SQL Server 2008 R2. Creé una tabla sin índices, ejecuté un montón de consultas a través del sp_executesql, las capté en el Analizador de SQL y luego ejecuté el rastreo resultante a través de Tuning Advisor. Tuning Advisor dio las recomendaciones adecuadas para las consultas integradas en sp_executesql.

La versión exacta de Database Engine Tuning Advisor es 10.50.1600.1, ejecutándose contra Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) 22 de abril de 2011 19:23:43 Copyright (c) Microsoft Corporation Developer Edition (64 bits) en Windows NT 6.1 (Build 7601: Service Pack 1).

+0

No creo que entiendas la pregunta. El problema es que EF emite comandos sp_executesql, que el asesor de ajuste no comprende. – Craig

+0

@ Craig, tienes razón, no entendí, pero eso es porque la premisa no es cierta. La pregunta es qué hacer, ya que Tuning Advisor no entiende 'sp_executesql', pero Tuning Advisor realmente entiende' sp_executesql' fine usando el procedimiento que describí anteriormente. –

+0

Creo que si está analizando la salida del Analizador de SQL Server, registre declaraciones individuales y no solo lotes y creo que obtendrá el resultado correcto que necesita para hacer recomendaciones. –

5

Parece que el problema es este. Si crea un seguimiento utilizando el Analizador de SQL de la plantilla "Ajuste", no incluye los eventos correctos. El Asesor de ajuste de motor de base de datos no comprende las declaraciones sp_executsql de los eventos completados por lotes. Informa en el registro de ajuste "El evento no hace referencia a ninguna tabla" con una identificación de categoría de "S008".

Al capturar su rastreo, debe agregar el evento "SQL: StmtCompleted" en la sección TSQL también.

+1

No he encontrado esta solución para funcionar tampoco. –

2

Jeff Walker me señaló en la dirección correcta - pero su respuesta fue incompleta (aunque estoy seguro de saber la respuesta completa y simplemente no explica completamente)

en la selección de sucesos para SQL Profiler servidor:

Retire el registro de RPC: completado bajo procedimientos almacenados - este es el elemento que va mal con el marco de la entidad

Expandir a todos los eventos y ADD SP: StmtCompleted bajo el procedimiento almacenado con el fin de obtener la consultas int o el rastro.

Parece que funciona para mí.

Microsoft Entity Framework People (y personas de perfil) Esto es realmente cojo. Solía ​​funcionar.

6

Sé que este tema es un poco frío. Pero como estaba teniendo el mismo problema y encontré una solución mejor:

Cambiar los eventos capturados es una forma de hacerlo, pero ya hay una "plantilla" que registra todo lo que necesita el asesor de ajuste del servidor SQL.

Si selecciona la plantilla "tuning", eliminará y agregará efectivamente la captura de eventos citada por Doug, pero también otra.

Puede encontrar más información sobre la plantilla here

Para activar esta plantilla, en las ventanas "nueva traza", seleccione la plantilla correspondiente (no me lo creo, que ya estaba allí): New trace properties

Una vez que lo hizo, se puede comprobar la selección de eventos, que ha ya lo que se necesita: Trace event selection

que adicionalmente desactivado el RPCCompleted, ya que no tengo procedimiento almacenado

Espero que ayude a algunas personas;)

Cuestiones relacionadas