Procedura che mostra durata/letture diverse in Profiler vs. SSMS


0

Ho un database che sta ricevendo un sacco di chiamate alla seguente procedura:

exec dbo.SM_SP_MAILEVENTNAMES 167260

In Profiler utilizzando la traccia TSQL_Duration queste chiamate si presentano come:

EventClass: RPC: Completed
Duration:  900 to 1500 ms
Reads:   8818 

Esecuzione della stessa query in Management Studio con Statistics I/O:

set statistics io on
exec dbo.SM_SP_MAILEVENTNAMES 167260

Esegue istantaneamente e ha il seguente output I/O:

Tabella "SM_MAIL_CONTACTS".Conteggio scansioni 0, letture logiche 29, letture fisiche 0, letture read-ahead 0, letture logiche lob 0, lob letture fisiche 0, letture lob read-ahead 0.
Tabella "SM_MAIL_EVENT_CONTACTS".Conteggio scansioni 13, letture logiche 68, letture fisiche 0, letture read-ahead 0, letture logiche lob 0, lob letture fisiche 0, letture lob read-ahead 0.
Tabella "SM_MATTER_EVENTS".Conteggio scansioni 1, letture logiche 3, letture fisiche 0, letture read-ahead 0, letture logiche lob 0, lob letture fisiche 0, letture lob read-ahead 0.

La query stessa restituisce circa 3 righe.Perché la disparità in quello che sto vedendo in Profiler e Management Studio?

  0

Forse le due esecuzioni stanno ottenendo piani diversi, forse perché [ci sono diverse impostazioni di set] (http://www.sommarskog.se/query-plan-mysteries.html), o [hai uno schema di default diverso] (http: //sqlblog.com/blogs/aaron_bertrand/archive/2009/10/11/bad-habits-to-kick-avoiding-the-schema-prefix.aspx) (dovresti davvero dire "exec dbo.SM_SP ...").Chi/cosa sta eseguendo l'istanza della procedura che viene acquisita per traccia? 18 nov. 142014-11-18 15:59:20

2

La differenza nelle letture logiche mi porta a credere che le due esecuzioni abbiano piani diversi.Questo potrebbe essere perché:

Puoi vedere se ci sono due o più piani diversi per la procedura che usano qualcosa di simile, che identificherà anche se ciò è causato da uno (o entrambi) dei due fattori più probabili per la scelta di piani diversi:

SELECT p.plan_handle, p.usecounts, p.size_in_bytes, 
    set_options = MAX(CASE a.attribute WHEN N'set_options' THEN a.value END),
    dflt_schema = MAX(CASE a.attribute WHEN N'user_id'   THEN a.value END)
FROM sys.dm_exec_cached_plans AS p
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t
CROSS APPLY sys.dm_exec_plan_attributes(p.plan_handle) AS a
WHERE t.objectid = OBJECT_ID(N'dbo.SM_SP_MAILEVENTNAMES')
AND a.attribute IN (N'user_id', N'set_options')
GROUP BY p.plan_handle, p.usecounts, p.size_in_bytes;
  0

Grazie, l'unico schema in uso su questo database è "dbo". 18 nov. 142014-11-18 16:21:16

  0

@Geoff dovresti * ancora * specificare. 18 nov. 142014-11-18 16:26:01

  0

e ho davvero modificato il post originale.Grazie per la modifica di questo ed eseguirò la tua richiesta il prima possibile.Apprezzo tutto il tuo aiuto. 18 nov. 142014-11-18 19:57:35

  0

Ciao Aaron, i risultati della query che hai fornito mostrano due opzioni set ** 251 ** per la query lenta dall'app e ** 4347 ** per la rapida esecuzione in studio di gestione. 19 nov. 142014-11-19 12:50:14

  0

@Geoff quindi questa è la differenza e perché stai ricevendo diversi piani.Puoi provare a sconfiggere questo svuotando quei due piani o aggiungendo OPTION (RECOMPILE) alla query, o passando attraverso le singole opzioni SET e vedere quali sono differenti (non posso fare il bin-disimballaggio nella mia testa, scusa). 19 nov. 142014-11-19 13:14:50