Seguimiento del uso del procedimiento almacenado

19

Además de usar SQL Server Profiler, ¿hay alguna forma de rastrear qué procedimientos almacenados se están utilizando, o al menos cuándo se ejecutaron por última vez?

DForck42
fuente
44
Siempre puedes mirar el caché del plan. SQL Server no rastrea estas cosas para siempre porque los metadatos se vuelven grandes y caros rápidamente.
JNK

Respuestas:

17

Puede buscar en el caché del plan para tener una idea bastante buena del uso del procedimiento almacenado. Tome esta consulta, por ejemplo:

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

Esto le proporcionará los usecountsprocedimientos almacenados que se almacenan en caché correspondientes SomeDB.

Nota: el caché del plan contiene los planes de ejecución. Esta retención de estos planes tiene muchos factores involucrados. Si bien esto le dará una buena idea de lo que se está utilizando y con qué frecuencia, definitivamente no se trata del total acumulado de procedimientos almacenados y con qué frecuencia / cuándo se ejecutaron.

Referencia de BOL sobre el caché del plan

Thomas Stringer
fuente
44
Recuerde que esto solo le dice que el sp se ha ejecutado bastante recientemente y no le brinda información sobre los procesos que no están aquí. Cosas como los procedimientos detrás de los informes trimestrales se ejecutan con poca frecuencia, pero se están utilizando. Básicamente, esto solo te da una lista para investigar en las aplicaciones que golpean tu base de datos.
HLGEM
1
@HLGEM Precisamente. He tratado de aclarar ese punto en mi respuesta.
Thomas Stringer el
¿Es posible hacer esto para un rango de fecha y hora específico? (por ejemplo, último día / mes, etc.)
Jose Parra
Tenga en cuenta que esta consulta no devolverá una fila para un procedimiento almacenado que ha sido alterado y no ejecutado después.
Axel2D
10

Puede echar un vistazo a esto y también contiene información last_execution_timede cada procedimiento almacenado.

    SELECT DB_NAME(database_id)
    ,OBJECT_NAME(object_id,database_id)
    ,cached_time
    ,last_execution_time
    ,execution_count
FROM sys.dm_exec_procedure_stats
Sai Chaitanya M
fuente
Hay una advertencia a este tho. Estas estadísticas solo se mantienen desde la última ejecución de la base de datos. Estoy ocupado escribiendo un trabajo que lo archivará en una tabla una vez al día.
earthling42
@ earthling42, ¿alguna vez escribiste un trabajo que lo archivara en una mesa todos los días?
Alex Chung
@ Alex Chung: desafortunadamente, nunca llegué a eso. Se trasladó a proyectos que no son de MS-SQL poco después de la fecha de esta publicación. No debería ser demasiado difícil? Me gustaría tratar de resolverlo contigo si estás interesado.
earthling42