programing

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

newstyles 2023. 7. 8. 10:41

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

애플리케이션에 저장 프로시저가 많이 나오기 시작했습니다.대부분은 더 이상 사용되지 않는 사용자 정의 리포트용입니다.저장 프로시저가 실행된 마지막 날짜를 알려주는 SQL Server 2005의 시스템 뷰에 대해 실행할 수 있는 쿼리를 아는 사람이 있습니까?

아래 코드가 트릭을 수행해야 합니다(>= 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 조언을 참고하시기 바랍니다.여기서 절차를 찾으면 정확하다는 것을 확신할 수 있습니다.그렇지 않으면 알 수 없습니다. 실행되고 있지 않다고 단정할 수 없습니다.

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

하지만, 여러분이 할 수 있는 "좋은" 일들이 있습니다.

  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인 경우 코드를 리포트 데이터 세트와 일치시킬 수 있으면 리포트 실행을 위한 RS 데이터베이스를 마이닝할있습니다.

DMV는 SQL Server 다시 시작 시 재설정되므로 DMV에 의존할 수 없습니다.쿼리 캐시/잠금은 일시적이며 일정 시간 동안 유지되지 않습니다.

오, 지금 조심하세요!반짝이는 것은 모두 금이 아닙니다!모든 "stats" dm 뷰 및 함수는 이러한 유형의 문제를 가지고 있습니다.이들은 캐시에 있는 것에 대해서만 작동하며 캐시에 있는 것의 수명은 몇 분 만에 측정할 수 있습니다.이러한 방법을 사용하여 어떤 SP가 삭제 대상인지 결정할 경우 불과 몇 분 전에 사용된 SP를 삭제할 때 큰 타격을 입을 수 있습니다.

다음은 주어진 dm 보기에 대한 Books Online에서 발췌한 것입니다.

sys.dm _exec_messages_messages

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

sys.dm _exec_messages_messages

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

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

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 이상에서 Query Store를 사용하도록 설정한 경우 다음 쿼리를 사용하여 마지막 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') 

사용자:

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