SQL Server의 저장 프로 시저에 대한 마지막 실행 날짜
우리는 응용 프로그램에서 많은 저장 프로 시저를 얻기 시작했습니다. 대부분은 더 이상 사용되지 않는 사용자 정의 보고서 용입니다. 저장 프로 시저가 마지막으로 실행 된 날짜를 알려주는 SQL Server 2005의 시스템 뷰에서 실행할 수있는 쿼리를 아는 사람이 있습니까?
간단히 말해서, 아닙니다.
그러나 할 수있는 "좋은"일이 있습니다.
- 저장된 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 인 경우 코드를보고 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
'IT TIP' 카테고리의 다른 글
Pandas 시리즈에서 NaN 제거 (0) | 2020.11.01 |
---|---|
Git 리포지토리를 다운로드하려면 무엇이 필요합니까 (Windows 머신)? (0) | 2020.11.01 |
기본 분기와 하나의 분기를 어떻게 비교합니까? (0) | 2020.11.01 |
Jasmine은 templateUrl을 사용하여 AngularJS 지시문을 테스트합니다. (0) | 2020.11.01 |
RecyclerView에 빠른 스크롤러를 추가하는 방법 (0) | 2020.11.01 |