Tenho algumas consultas chamadas de um aplicativo Web C # .NET que são sempre rápidas para mim (eu sou um administrador local no SQL Server), mas para um grupo de usuários (grupo de domínio com permissões necessárias), a consulta é incrivelmente lenta para o ponto de tempo limite no aplicativo.
O que faria com que exatamente a mesma consulta fosse executada de maneira diferente para usuários diferentes?
Mais informações:
- A consulta é SQL embutido no código C #, não um procedimento armazenado
- O aplicativo usa autenticação de domínio e o usuário e eu executamos a consulta pelo aplicativo
- Parece que o problema é de planos diferentes e um foi armazenado em cache; é por isso que foi diferente para usuários diferentes. Algo está afetando o cache, porque agora a consulta é lenta para mim por meio do aplicativo e rápida no SQL Server Management Studio.
sql-server
sql-server-2008
performance
t-sql
Supergibbs
fonte
fonte
exact same query
), não deve ser o sniffing de parâmetros (os usuários obtêm um plano ruim para o (s) parâmetro (s) errado (s)), mas os usuários estão recebendo planos diferentes para o mesmo parâmetro (s) Pode ser por causa de configurações comoquoted_identifier
earithabort
, que você pode compararsys.dm_exec_sessions
para o usuário rápido e o usuário lento, ou porque eles têm esquemas padrão diferentes e objetos são referenciados sem o prefixo do esquema. A detecção de parâmetros ainda pode estar envolvida (daí o motivo de um deles ter um plano ruim).Respostas:
Se os parâmetros forem os mesmos (suponho que seja para isso
exact same query
), não deve ser o sniffing de parâmetros (os usuários obtêm um plano ruim para o (s) parâmetro (s) errado (s)), mas os usuários estão recebendo planos diferentes para o mesmo parâmetro (s) Pode ser por causa de configurações comoquoted_identifier
earithabort
, que você pode compararsys.dm_exec_sessions
para o usuário rápido e o usuário lento, ou porque eles têm esquemas padrão diferentes e objetos são referenciados sem o prefixo do esquema. A detecção de parâmetros ainda pode estar envolvida (daí o motivo de um deles ter um plano ruim).fonte
Eu vi duas razões para isso: 1, parâmetro sniffing 2, as configurações de conexão são diferentes. Se você executar o whoisactive , ele mostrará as diferentes propriedades da conexão. Na verdade, tenho um post sobre isso, mas não limpei as informações específicas da empresa. (nem habilitei meu blog ainda);)
fonte
Tente: Especifique o esquema em todas as referências de tabela e EXEC. Por exemplo, EXEC dbo.MyProc
Pode haver conflitos (como sugere Martin Smith - 'mesmo esquema padrão'?) Ou recompilar
fonte
Isso parece ser um erro no SQL Server. Sinto esse erro com o SQL Server 2008. Não testei novas versões. Posso fazer login como administrador, executar esta consulta e obter uma resposta em 0 segundos:
Depois, efetuo login como um usuário com menos permissões, executo exatamente a mesma consulta e a resposta leva 45 segundos.
Isso é consistente repetidamente. Se eu alternar entre minhas duas janelas de consulta, uma para o administrador e outra para o não administrador, o não administrador sempre leva cerca de 45 segundos e o administrador leva 0 segundos.
fonte
select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME
Retorna dados imediatamente de forma consistente para um logon não-SA que não possui direitos garantidos explicitamente.