Mam kilka zapytań wywoływanych z aplikacji sieci Web C # .NET, które są dla mnie zawsze szybkie (jestem lokalnym administratorem na serwerze SQL), ale dla grupy użytkowników (grupa domen z wymaganymi uprawnieniami) zapytanie jest bardzo wolne moment, w którym upływa limit czasu w aplikacji.
Co spowodowałoby, że dokładnie to samo zapytanie działałoby inaczej dla różnych użytkowników?
Więcej informacji:
- Zapytanie to wbudowany SQL w kodzie C #, a nie procedura składowana
- Aplikacja korzysta z uwierzytelniania domeny, a ja i użytkownik uruchamiamy zapytanie za pośrednictwem aplikacji
- Wygląda na to, że problem dotyczy różnych planów i jeden został zapisany w pamięci podręcznej, dlatego był inny dla różnych użytkowników. Coś wpływa na pamięć podręczną, ponieważ teraz zapytanie jest dla mnie wolne przez aplikację i szybkie w SQL Server Management Studio.
sql-server
sql-server-2008
performance
t-sql
Supergibbs
źródło
źródło
exact same query
), nie powinno to być wąchanie parametrów (użytkownicy otrzymują zły plan dla niewłaściwych parametrów), ale użytkownicy otrzymują różne plany dla tego samego parametru (s). Może to być spowodowane ustawieniami, takimi jakquoted_identifier
iarithabort
, które można porównaćsys.dm_exec_sessions
dla szybkiego i powolnego użytkownika, lub może to być spowodowane tym, że mają różne domyślne schematy, a obiekty są przywoływane bez prefiksu schematu. Wciąż może być zaangażowane wąchanie parametrów (dlatego dlaczego jeden z nich ma zły plan).Odpowiedzi:
Jeśli parametry są takie same (zakładam, że o to chodzi
exact same query
), nie powinno to być wąchanie parametrów (użytkownicy otrzymują zły plan dla niewłaściwych parametrów), ale użytkownicy otrzymują różne plany dla tego samego parametru (s). Może to być spowodowane ustawieniami, takimi jakquoted_identifier
iarithabort
, które można porównaćsys.dm_exec_sessions
dla szybkiego i powolnego użytkownika, lub może to być spowodowane tym, że mają różne domyślne schematy, a obiekty są przywoływane bez prefiksu schematu. Wciąż może być zaangażowane wąchanie parametrów (dlatego dlaczego jeden z nich ma zły plan).źródło
Widziałem dwa powody tego: 1, wąchanie parametru 2, ustawienia połączenia są różne. Jeśli uruchomisz whoisactive , pokażą ci różne właściwości połączenia. Mam blog na ten temat, ale nie wyczyściłem z niej informacji specyficznych dla firmy. (nie mam jeszcze włączonego mojego bloga);)
źródło
Spróbuj: Określ schemat dla każdego EXEC i odwołania do tabeli. Np. EXEC dbo.MyProc
Mogą wystąpić konflikty (jak sugeruje Martin Smith - „ten sam domyślny schemat”?) Lub rekompilacja
źródło
To wydaje się być błędem w SQL Server. Ten błąd występuje w SQL Server 2008. Nie testowałem nowych wersji. Mogę zalogować się jako administrator i uruchomić to zapytanie i uzyskać odpowiedź w 0 sekund:
Następnie loguję się jako użytkownik z mniejszą liczbą uprawnień, uruchamiam dokładnie to samo zapytanie, a odpowiedź trwa 45 sekund.
Jest to konsekwentne w kółko. Jeśli odbijam się między moimi dwoma oknami zapytania, jednym dla administratora i jednym dla nie-administratora, nie-administrator zawsze zajmuje około 45 sekund, a administrator 0 sekund.
źródło
select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME
konsekwentnie zwraca dane natychmiast dla logowania innego niż SA, które nie ma żadnych praw do przyznania jawności.