Ich habe einige Abfragen von einer C # .NET-Webanwendung aufgerufen, die für mich immer schnell sind (ich bin ein lokaler Administrator auf dem SQL Server), aber für eine Gruppe von Benutzern (Domänengruppe mit erforderlichen Berechtigungen) ist die Abfrage unglaublich langsam der Punkt, an dem es in der Anwendung abläuft.
Was würde dazu führen, dass genau dieselbe Abfrage für verschiedene Benutzer unterschiedlich ausgeführt wird?
Mehr Info:
- Die Abfrage ist Inline-SQL im C # -Code, keine gespeicherte Prozedur
- Die App verwendet die Domänenauthentifizierung und sowohl der Benutzer als auch ich führen die Abfrage über die App aus
- Es scheint, dass das Problem unterschiedliche Pläne sind und einer zwischengespeichert wurde, weshalb es für verschiedene Benutzer unterschiedlich war. Etwas wirkt sich auf den Cache aus, da die Abfrage jetzt für mich über die App langsam und in SQL Server Management Studio schnell ist.
sql-server
sql-server-2008
performance
t-sql
Supergibbs
quelle
quelle
exact same query
), sollte es sich nicht um Parameter-Sniffing handeln (Benutzer erhalten einen schlechten Plan für die falschen Parameter), sondern Benutzer erhalten unterschiedliche Pläne für denselben Parameter (s). Dies kann an Einstellungen wiequoted_identifier
und liegenarithabort
, die Siesys.dm_exec_sessions
für den schnellen und den langsamen Benutzer vergleichen können, oder daran, dass sie unterschiedliche Standardschemata haben und Objekte ohne das Schema-Präfix referenziert werden. Möglicherweise ist das Parameter-Sniffing weiterhin beteiligt (daher hat einer von ihnen einen schlechten Plan).Antworten:
Wenn die Parameter gleich sind (ich gehe davon aus, dass dies gemeint ist
exact same query
), sollte es sich nicht um Parameter-Sniffing handeln (Benutzer erhalten einen schlechten Plan für die falschen Parameter), sondern Benutzer erhalten unterschiedliche Pläne für denselben Parameter (s). Dies kann an Einstellungen wiequoted_identifier
und liegenarithabort
, die Siesys.dm_exec_sessions
für den schnellen und den langsamen Benutzer vergleichen können, oder daran, dass sie unterschiedliche Standardschemata haben und Objekte ohne das Schema-Präfix referenziert werden. Möglicherweise ist das Parameter-Sniffing weiterhin beteiligt (daher hat einer von ihnen einen schlechten Plan).quelle
Ich habe zwei Gründe dafür gesehen: 1, Parameter-Sniffing 2, Verbindungseinstellungen sind unterschiedlich. Wenn Sie whoisactive ausführen , werden Ihnen die verschiedenen Verbindungseigenschaften angezeigt . Ich habe tatsächlich einen Blog-Beitrag dazu, aber ich habe die unternehmensspezifischen Informationen nicht daraus entfernt. (noch habe ich mein Blog noch aktiviert);)
quelle
Versuchen Sie: Geben Sie das Schema für jede EXEC- und Tabellenreferenz an. ZB EXEC dbo.MyProc
Es kann zu Konflikten kommen (wie Martin Smith vorschlägt - "dasselbe Standardschema"?) Oder zu Neukompilierungen
quelle
Dies scheint ein Fehler in SQL Server zu sein. Ich habe diesen Fehler mit SQL Server 2008 festgestellt. Ich habe keine neuen Versionen getestet. Ich kann mich als Administrator anmelden und diese Abfrage ausführen und in 0 Sekunden eine Antwort erhalten:
Dann melde ich mich als Benutzer mit weniger Berechtigungen an, führe genau dieselbe Abfrage aus und die Antwort dauert 45 Sekunden.
Dies ist immer und immer wieder konsistent. Wenn ich zwischen meinen beiden Abfragefenstern hin und her hüpfe, eines für den Administrator und eines für den Nicht-Administrator, dauert der Nicht-Administrator immer ungefähr 45 Sekunden und der Administrator 0 Sekunden.
quelle
select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME
konsistent sofort Daten für eine Anmeldung ohne SA zurück, für die überhaupt keine expliziten Rechte gewährt wurden.