La consulta es lenta para ciertos usuarios

11

Tengo un par de consultas llamadas desde una aplicación web C # .NET que siempre son rápidas para mí (soy un administrador local en SQL Server) pero para un grupo de usuarios (grupo de dominio con los permisos requeridos), la consulta es increíblemente lenta el punto se agota en la aplicación

¿Qué causaría que la misma consulta se ejecute de manera diferente para diferentes usuarios?

Más información:

  • La consulta es SQL en línea en el código C #, no un procedimiento almacenado
  • La aplicación usa autenticación de dominio y tanto el usuario como yo ejecutamos la consulta a través de la aplicación
  • Parece que el problema es planes diferentes y uno fue almacenado en caché, por eso fue diferente para diferentes usuarios. Algo está afectando el caché porque ahora la consulta es lenta para mí a través de la aplicación y rápida en SQL Server Management Studio.
Supergibbs
fuente
2
Verifique las siguientes preguntas . Puede encontrar que está en la misma situación. Digamos que primero prueba este y este otro .
Marian
3
¿Cuáles son los tipos de espera (sys.dm_os_waiting_tasks) en las consultas lentas y también cuáles son los planes de ejecución reales de cada uno (su rápido, su lento)?
Thomas Stringer
2
De acuerdo con los comentarios anteriores. Mi primer pensamiento sería el olfateo de parámetros también. Verificar si los planes son diferentes debería ser el primer paso.
Martin Smith
44
Si los parámetros son los mismos (supongo que eso es lo que se entiende por exact same query), no debería ser la detección de parámetros (los usuarios obtienen un mal plan para los parámetros incorrectos), sino que los usuarios obtienen diferentes planes para el mismo parámetro (s) Podría deberse a configuraciones como quoted_identifiery arithabort, que puede comparar sys.dm_exec_sessionspara el usuario rápido y el usuario lento, o podría deberse a que tienen diferentes esquemas predeterminados y se hace referencia a objetos sin el prefijo de esquema. El rastreo de parámetros aún puede estar involucrado (de ahí que uno de ellos tenga un mal plan)
Aaron Bertrand
1
RE: Su edición ¿tiene el mismo esquema predeterminado que los otros usuarios? ¿Ya capturó los planes de ejecución para carreras lentas y rápidas?
Martin Smith

Respuestas:

5

Si los parámetros son los mismos (supongo que eso es lo que se entiende por exact same query), no debería ser la detección de parámetros (los usuarios obtienen un mal plan para los parámetros incorrectos), sino que los usuarios obtienen diferentes planes para el mismo parámetro (s) Podría deberse a configuraciones como quoted_identifiery arithabort, que puede comparar sys.dm_exec_sessionspara el usuario rápido y el usuario lento, o podría deberse a que tienen diferentes esquemas predeterminados y se hace referencia a objetos sin el prefijo de esquema. El rastreo de parámetros aún puede estar involucrado (de ahí que uno de ellos tenga un mal plan).

Aaron Bertrand
fuente
3

He visto dos razones para esto: 1, detección de parámetros 2, la configuración de conexión es diferente. Si ejecuta whoisactive , le mostrará las diferentes propiedades de conexión. De hecho, tengo una publicación de blog sobre esto, pero no he limpiado la información específica de la compañía. (ni he habilitado mi blog todavía);)

Rottengeek
fuente
0

Prueba: especifique el esquema en cada EXEC y referencia de tabla. Por ejemplo, EXEC dbo.MyProc

Podría haber conflictos (como sugiere Martin Smith: ¿'mismo esquema predeterminado'?) O recompilaciones

Kip Bryan
fuente
0

Esto parece ser un error en SQL Server. Experimento este error con SQL Server 2008. No he probado nuevas versiones. Puedo iniciar sesión como administrador y ejecutar esta consulta y obtener una respuesta en 0 segundos:

select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME

Luego inicio sesión como usuario con menos permisos, ejecuto exactamente la misma consulta y la respuesta tarda 45 segundos.

Esto es consistente una y otra vez. Si reboto hacia adelante y hacia atrás entre mis dos ventanas de consulta, una para el administrador y otra para el no administrador, el no administrador siempre tarda unos 45 segundos y el administrador tarda 0 segundos.

Rob Kraft
fuente
Como se preguntó en los comentarios a la pregunta: ¿ambos usuarios tienen la misma base de datos predeterminada y las consultas se ejecutan en la misma base de datos? Y, ¿puede señalar algún tipo de documentación que indique que se trata de un error, o es su opinión? No digo que te equivocas, solo buscas algo más allá de una anécdota.
RDFozz
El problema que identificó en su respuesta parece no ser repetible en SQL Server 2008. select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAMEdevuelve datos de forma consistente de forma inmediata para un inicio de sesión que no sea SA y que no tiene derechos otorgados explícitamente.
Max Vernon