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 조언을 참고하시기 바랍니다.여기서 절차를 찾으면 정확하다는 것을 확신할 수 있습니다.그렇지 않으면 알 수 없습니다. 실행되고 있지 않다고 단정할 수 없습니다.
간단히 말해서, 아닙니다.
하지만, 여러분이 할 수 있는 "좋은" 일들이 있습니다.
- 저장된 proc 이름을 사용하여 프로파일러 추적 실행
- 각 프로세스에 줄 추가(과정 표 작성)
- "
INSERT dbo.SPCall (What, When) VALUES (OBJECT_NAME(@@PROCID), GETDATE()
"
- "
- 기간도 포함하여 2를 연장합니다.
여러분이 할 수 있는 "재미있는" 것들이 있습니다.
- 제거하고, 누가 전화하는지 확인합니다.
- 권한 제거, 호출자 확인
- 더하다
RAISERROR ('Warning: pwn3d: call admin', 16, 1)
누가 전화하는지 보다 - 더하다
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
'programing' 카테고리의 다른 글
TSC(TypeScript Compiler)를 사용하여 Node.js ES6(ESM) 모듈을 해결하는 방법.TSC가 올바른 파일-ext를 내보내지 않습니다. (0) | 2023.07.13 |
---|---|
T-SQL 스로우 예외 (0) | 2023.07.13 |
이 장고 앱 튜토리얼에서 choice_set는 무엇입니까? (0) | 2023.07.08 |
ASP.NET 5 클래스 라이브러리 프로젝트를 만드는 이유는 무엇입니까? (0) | 2023.07.08 |
판다들은 한 시트에 여러 테이블을 읽습니다. (0) | 2023.07.08 |