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.
sql-server
sql-server-2008
performance
t-sql
Supergibbs
fuente
fuente
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 comoquoted_identifier
yarithabort
, que puede compararsys.dm_exec_sessions
para 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)Respuestas:
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 comoquoted_identifier
yarithabort
, que puede compararsys.dm_exec_sessions
para 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).fuente
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);)
fuente
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
fuente
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:
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.
fuente
select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME
devuelve 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.