Дата последнего запуска хранимой процедуры в SQL Server
мы начинаем получать много хранимых процедур в нашем приложении. Многие из них для пользовательских отчетов, многие из которых уже не используются. Кто-нибудь знает запрос, который мы могли бы запустить в системных представлениях в SQL Server 2005, который сообщит нам последнюю дату выполнения хранимой процедуры?
6 ответов:
в двух словах, нет.
, есть "хорошие" вещи, которые вы можете сделать.
- запустите трассировку профилировщика, например, с сохраненным именем proc
- добавить строку каждый proc (создать табель, конечно)
- "
INSERT dbo.SPCall (What, When) VALUES (OBJECT_NAME(@@PROCID), GETDATE()"- продлить 2 с продолжительностью тоже
есть "забавные" вещи, которые вы можете сделать:
- удалите его, посмотрите, кто звонит
- удалить права, смотрите кто звонит
- добавить
RAISERROR ('Warning: pwn3d: call admin', 16, 1), смотрите, кто звонит- добавить
WAITFOR DELAY '00:01:00', смотрите, кто звонитвы поняли идею. Испытанный и проверенный метод "смотрите, кто вызывает" ИТ-поддержки.
Если отчеты являются службами Reporting Services, то вы можете моя база данных 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 : Пожалуйста, примите к сведению советы Джефф Modens ниже.
О, теперь будьте осторожны! Все, что блестит-это не золото! Все" статистические " представления и функции dm имеют проблему для этого типа вещей. Они работают только против того, что находится в кэше, и время жизни того, что находится в кэше, может быть измерено в минутах. Если бы вы использовали такую вещь, чтобы определить, какие SPs являются кандидатами на удаление, вы могли бы быть в мире боли, когда вы удаляете SPs, которые были использованы всего несколько минут назад.
следующие выдержки из книг онлайн для данный вид ДМ...
sys. dm_exec_procedure_stats Возвращает суммарную статистику производительности для кэшированных хранимых процедур. Представление содержит по одной строке на хранимую процедуру, и время жизни строки составляет столько, сколько хранимая процедура остается в кэше. Когда хранимая процедура удаляется из кэша, соответствующая строка удаляется из этого представления.
sys. dm_exec_query_stats Представление содержит по одной строке на инструкцию запроса в кэшированном плане и время жизни объекта строки привязаны к самому плану. Когда план удаляется из кэша, соответствующие строки удаляются из этого представления.
Сыс.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
Это прекрасно работает на 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
Comments