IT TIP

SQL Server의 저장 프로 시저에 대한 마지막 실행 날짜

itqueen 2020. 11. 1. 19:07
반응형

SQL Server의 저장 프로 시저에 대한 마지막 실행 날짜


우리는 응용 프로그램에서 많은 저장 프로 시저를 얻기 시작했습니다. 대부분은 더 이상 사용되지 않는 사용자 정의 보고서 용입니다. 저장 프로 시저가 마지막으로 실행 된 날짜를 알려주는 SQL Server 2005의 시스템 뷰에서 실행할 수있는 쿼리를 아는 사람이 있습니까?


간단히 말해서, 아닙니다.

그러나 할 수있는 "좋은"일이 있습니다.

  1. 저장된 proc 이름으로 프로파일 러 추적 실행
  2. 각 프로세스마다 한 줄을 추가하십시오 (물론 표 만들기)
    • " INSERT dbo.SPCall (What, When) VALUES (OBJECT_NAME(@@PROCID), GETDATE()"
  3. 기간도 2 연장

할 수있는 "재미있는"일이 있습니다.

  1. 제거하고 누가 전화하는지 확인하십시오.
  2. 권리를 제거하고 누가 전화하는지 확인
  3. 추가 RAISERROR ('Warning: pwn3d: call admin', 16, 1), 전화하는 사람 확인
  4. 추가 WAITFOR DELAY '00:01:00', 전화하는 사람 확인

당신은 아이디어를 얻습니다. IT 지원의 검증 된 "누가 호출하는지"방법.

보고서가 Reporting Services 인 경우 코드를보고 DataSet에 일치시킬 수 있으면 보고서 실행에 대한 RS 데이터베이스마이닝 할 수 있습니다.

DMV는 SQL Server를 다시 시작할 때 재설정되기 때문에 어쨌든 의존 할 수 없습니다. 쿼리 캐시 / 잠금은 일시적이며 일정 시간 동안 지속되지 않습니다.


아래 코드는 트릭을 수행해야합니다 (> = 2008).

SELECT o.name, 
       ps.last_execution_time 
FROM   sys.dm_exec_procedure_stats ps 
INNER JOIN 
       sys.objects o 
       ON ps.object_id = o.object_id 
WHERE  DB_NAME(ps.database_id) = '' 
ORDER  BY 
       ps.last_execution_time DESC  

편집 1 : 아래 Jeff Modens의 조언을 참고하십시오.


오, 조심하세요! 반짝이는 모든 것은 금이 아닙니다! 모든 "stats"dm 뷰와 함수는 이런 유형의 문제를 가지고 있습니다. 캐시에있는 항목에 대해서만 작동하며 캐시에있는 항목의 수명은 몇 분 안에 측정 할 수 있습니다. 이러한 방법을 사용하여 어떤 SP가 드롭 후보인지 확인하면 몇 분 전에 사용 된 SP를 삭제할 때 상처를 입을 수 있습니다.

다음은 주어진 dm 뷰에 대한 온라인 설명서에서 발췌 한 것입니다.

sys.dm_exec_procedure_stats 캐시 된 저장 프로 시저에 대한 집계 성능 통계를 반환합니다. 뷰에는 저장 프로시 저당 하나의 행이 포함되며 저장 프로 시저가 캐시 된 상태로 유지되는 한 행의 수명이 유지됩니다. 저장 프로 시저가 캐시에서 제거되면 해당 행이이보기에서 제거됩니다.

sys.dm_exec_query_stats이 뷰에는 캐시 된 계획 내에서 쿼리 문당 하나의 행이 포함되며 행의 수명은 계획 자체에 연결됩니다. 계획이 캐시에서 제거되면 해당 행이이보기에서 제거됩니다.


sys.dm_exec_procedure_stats 에는 실행 함수, 제약 조건 및 프로 시저 등에 대한 정보가 포함되어 있습니다. 그러나 행의 수명에는 제한이 있습니다. 실행 계획이 캐시에서 제거되는 순간 항목이 사라집니다.

Use [yourDatabaseName]
GO
SELECT  
        SCHEMA_NAME(sysobject.schema_id),
        OBJECT_NAME(stats.object_id), 
        stats.last_execution_time
    FROM   
        sys.dm_exec_procedure_stats stats
        INNER JOIN sys.objects sysobject ON sysobject.object_id = stats.object_id 
    WHERE  
        sysobject.type = 'P'
    ORDER BY
           stats.last_execution_time DESC  

그러면 최근에 실행 된 절차 목록이 제공됩니다.

최근에 실행 된 특정 저장 프로 시저를 확인하려는 경우

SELECT  
    SCHEMA_NAME(sysobject.schema_id),
    OBJECT_NAME(stats.object_id), 
    stats.last_execution_time
FROM   
    sys.dm_exec_procedure_stats stats
    INNER JOIN sys.objects sysobject ON sysobject.object_id = stats.object_id 
WHERE  
    sysobject.type = 'P'
    and (sysobject.object_id = object_id('schemaname.procedurename') 
    OR sysobject.name = 'procedurename')
ORDER BY
       stats.last_execution_time DESC  

SQL Server 2016 이상에서 쿼리 저장소를 활성화하는 경우 다음 쿼리를 사용하여 마지막 SP 실행을 가져올 수 있습니다. 기록은 쿼리 저장소 구성에 따라 다릅니다.

SELECT 
      ObjectName = '[' + s.name + '].[' + o.Name  + ']'
    , LastModificationDate  = MAX(o.modify_date)
    , LastExecutionTime     = MAX(q.last_execution_time)
FROM sys.query_store_query q 
    INNER JOIN sys.objects o
        ON q.object_id = o.object_id
    INNER JOIN sys.schemas s
        ON o.schema_id = s.schema_id
WHERE o.type IN ('P')
GROUP BY o.name , + s.name 

이것은 2005에서 잘 작동합니다 (계획이 캐시에있는 경우)

USE YourDb;

SELECT qt.[text]          AS [SP Name],
       qs.last_execution_time,
       qs.execution_count AS [Execution Count]
FROM   sys.dm_exec_query_stats AS qs
       CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE  qt.dbid = DB_ID()
       AND objectid = OBJECT_ID('YourProc') 

You should also be wary of any stored procs or objects that are only 'periodically' for example a SP that runs close to EOFY may be vital - just because it hasn't been run in almost a year doesn't mean it isn't required. Certainly as a guideline use DMVs (though they only show history since last server restart) however don't use this alone.


I use this:

use YourDB;

SELECT 
    object_name(object_id), 
    last_execution_time, 
    last_elapsed_time, 
    execution_count
FROM   
     sys.dm_exec_procedure_stats ps 
where 
      lower(object_name(object_id)) like 'Appl-Name%'
order by 1

참고URL : https://stackoverflow.com/questions/595742/last-run-date-on-a-stored-procedure-in-sql-server

반응형