Tracciamento dell'utilizzo della procedura memorizzata


19

Oltre a utilizzare SQL Server Profiler, esiste un modo per tenere traccia delle procedure memorizzate utilizzate o almeno quando sono state eseguite l'ultima volta?


4
Puoi sempre consultare la cache del piano. SQL Server non tiene traccia di queste cose per sempre perché i metadati diventano rapidamente grandi e costosi.
JNK,

Risposte:


17

È possibile cercare nella cache del piano per avere una buona idea dell'utilizzo della Stored Procedure. Prendi questa query, ad esempio:

select
    db_name(st.dbid) as database_name,
    object_name(st.objectid) as name,
    p.size_in_bytes / 1024 as size_in_kb,
    p.usecounts,
    st.text
from sys.dm_exec_cached_plans p
cross apply sys.dm_exec_sql_text(p.plan_handle) st
where p.objtype = 'proc'
and st.dbid = db_id('SomeDatabase')
order by p.usecounts desc

Ciò fornirà usecountsle procedure memorizzate memorizzate nella cache pertinenti SomeDB.

Nota: la cache del piano contiene i piani di esecuzione. Questa conservazione di questi piani ha molti fattori coinvolti. Considerando che questo ti darà una buona idea di ciò che viene utilizzato e con quale frequenza, sicuramente non è il totale corrente delle stored procedure e con quale frequenza / quando sono state eseguite.

Riferimento BOL sulla cache del piano


4
Ricorda che questo ti dice solo che lo sp è stato eseguito abbastanza di recente e non ti dà informazioni sui proc non qui. Cose come i proc dietro i rapporti trimestrali sono poco frequenti ma vengono utilizzate. Quindi in sostanza, questo ti dà solo un elenco per la ricerca nelle applicazioni che colpiscono il tuo db.
HLGEM,

1
@HLGEM Precisamente. Ho cercato di chiarire questo punto nella mia risposta.
Thomas Stringer,

È possibile farlo per un intervallo di data e ora specifico? (ad es. ultimo giorno / mese, ecc.)?
Jose Parra,

Si noti che questa query non restituirà una riga per una procedura memorizzata che è stata modificata e non eseguita dopo.
Axel2D,

10

Puoi dare un'occhiata a questo così come contiene informazioni last_execution_timesu ogni procedura memorizzata.

    SELECT DB_NAME(database_id)
    ,OBJECT_NAME(object_id,database_id)
    ,cached_time
    ,last_execution_time
    ,execution_count
FROM sys.dm_exec_procedure_stats

C'è un avvertimento per questo. Queste statistiche vengono mantenute solo dall'ultima esecuzione del database. Sono impegnato a scrivere un lavoro che lo archivierà su un tavolo una volta al giorno.
earthling42,

@ earthling42, hai mai scritto un lavoro che lo ha archiviato su un tavolo ogni giorno?
Alex Chung

@Alex Chung - sfortunatamente non ci sono mai riuscito. Spostato in progetti non MS-SQL poco dopo la data di questo post. Non dovresti essere troppo duro? Sarei felice di provare a risolverlo con te se sei interessato.
terrestre42
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.