Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum geht eine Datenbankabfrage in der Anwendung nur langsam?

Ich würde Parameter-Sniffing vermuten.

Der zwischengespeicherte Ausführungsplan, der für die Verbindung Ihrer Anwendung verwendet wird, kann aufgrund eines anderen set wahrscheinlich nicht von Ihrer SSMS-Verbindung verwendet werden Optionen, sodass ein neuer anderer Plan generiert wird.

Sie können die zwischengespeicherten Pläne für die gespeicherte Prozedur abrufen, indem Sie die folgende Abfrage verwenden. Vergleichen Sie dann, ob sie sich unterscheiden (z. B. führt der langsame eine Indexsuche und Lesezeichensuche an einer Stelle durch, an der der andere einen Scan durchführt?)

Use YourDatabase;

SELECT *
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
CROSS APPLY sys.dm_exec_query_plan(plan_handle) 
cross APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
where sys.dm_exec_sql_text.OBJECTID=object_id('YourProcName') 
         and attribute='set_options'