J'ai quelques requêtes appelées à partir d'une application Web C # .NET qui sont toujours rapides pour moi (je suis un administrateur local sur SQL Server) mais pour un groupe d'utilisateurs (groupe de domaine avec les autorisations requises), la requête est incroyablement lente à le point qu'il expire dans l'application.
Qu'est-ce qui ferait que la même requête exacte s'exécuterait différemment pour différents utilisateurs?
Plus d'informations:
- La requête est SQL en ligne dans le code C #, pas une procédure stockée
- L'application utilise l'authentification de domaine et l'utilisateur et moi-même exécutons la requête via l'application
- Il semble que le problème réside dans différents plans et que l'un ait été mis en cache, c'est pourquoi il était différent pour différents utilisateurs. Quelque chose affecte le cache car maintenant la requête est lente pour moi via l'application et rapide dans SQL Server Management Studio.
sql-server
sql-server-2008
performance
t-sql
Supergibbs
la source
la source
exact same query
), cela ne devrait pas être un reniflement de paramètres (les utilisateurs obtiennent un mauvais plan pour le ou les mauvais paramètres), mais les utilisateurs obtiennent plutôt des plans différents pour le même paramètre (s). Cela peut être dû à des paramètres tels quequoted_identifier
etarithabort
, que vous pouvez comparersys.dm_exec_sessions
pour l'utilisateur rapide et l'utilisateur lent, ou cela peut être dû au fait qu'ils ont différents schémas par défaut et que les objets sont référencés sans le préfixe de schéma. Le reniflage de paramètres peut encore être impliqué (d'où la raison pour laquelle l'un d'eux a un mauvais plan).Réponses:
Si les paramètres sont les mêmes (je suppose que c'est ce que l'on veut dire
exact same query
), cela ne devrait pas être un reniflement de paramètres (les utilisateurs obtiennent un mauvais plan pour le ou les mauvais paramètres), mais les utilisateurs obtiennent plutôt des plans différents pour le même paramètre (s). Cela peut être dû à des paramètres tels quequoted_identifier
etarithabort
, que vous pouvez comparersys.dm_exec_sessions
pour l'utilisateur rapide et l'utilisateur lent, ou cela peut être dû au fait qu'ils ont différents schémas par défaut et que les objets sont référencés sans le préfixe de schéma. Le reniflage de paramètres peut encore être impliqué (d'où la raison pour laquelle l'un d'eux a un mauvais plan).la source
j'ai vu deux raisons à cela: 1, reniflement des paramètres 2, les paramètres de connexion sont différents. Si vous exécutez whoisactive , il vous montrera les différentes propriétés de connexion. J'ai en fait un article de blog à ce sujet, mais je n'ai pas nettoyé les informations spécifiques à l'entreprise. (je n'ai pas encore activé mon blog);)
la source
Essayez: Spécifiez le schéma sur chaque EXEC et référence de table. Par exemple, EXEC dbo.MyProc
Il pourrait y avoir des conflits (comme le suggère Martin Smith - «même schéma par défaut»?) Ou des recompilations
la source
Cela semble être un bogue dans SQL Server. Je rencontre ce bogue avec SQL Server 2008. Je n'ai pas testé de nouvelles versions. Je peux me connecter en tant qu'administrateur et exécuter cette requête et obtenir une réponse en 0 secondes:
Ensuite, je me connecte en tant qu'utilisateur avec moins d'autorisations, exécute exactement la même requête et la réponse prend 45 secondes.
C'est constant encore et encore. Si je rebondis entre mes deux fenêtres de requête, une pour l'administrateur et une pour le non-administrateur, le non-administrateur prend toujours environ 45 secondes et l'administrateur prend 0 seconde.
la source
select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME
renvoie systématiquement des données immédiatement pour une connexion non SA sans aucun droit explicitement accordé.