Відстеження використання збереженої процедури


19

Окрім використання Profiler SQL Server, чи є спосіб відстежити, які зберігаються процедури використовуються, або принаймні, коли вони востаннє виконувалися?


4
Ви завжди можете переглянути кеш плану. SQL Server не відстежує цей матеріал назавжди, оскільки метадані швидко стають великими та дорогими.
JNK

Відповіді:


17

Ви можете подивитися в кеші плану, щоб отримати досить гарне уявлення про використання збереженої процедури. Візьміть, наприклад, цей запит:

select
    db_name(st.dbid) as database_name,
    object_name(st.objectid) as name,
    p.size_in_bytes / 1024 as size_in_kb,
    p.usecounts,
    st.text
from sys.dm_exec_cached_plans p
cross apply sys.dm_exec_sql_text(p.plan_handle) st
where p.objtype = 'proc'
and st.dbid = db_id('SomeDatabase')
order by p.usecounts desc

Це дозволить отримати usecountsзбережену процедуру, в якій зберігається кешування SomeDB.

Примітка: кеш планів містить плани виконання. У збереженні цих планів пов'язано багато факторів. Оскільки це дасть вам хороше уявлення про те, що використовується і як часто, це точно не загальна кількість збережених процедур, а як часто / коли вони виконувалися.

Посилання BOL про кеш плану


4
Remeber це лише говорить вам, що програма запущена досить недавно, і не дає ніякої інформації про документи, які не є тут. Такі речі, як документи, що стоять за квартальними звітами, працюють нечасто, але використовуються. В основному, це просто дає вам список досліджень у програмах, які потрапляють на ваш db.
HLGEM

1
@HLGEM Саме. Я намагався зрозуміти це у своїй відповіді.
Томас Стрінгер

Чи можливо це зробити для певного діапазону дат? (наприклад, останній день / місяць тощо)?
Хосе Парра

Зауважте, що цей запит не поверне рядок для збереженої процедури, яка була змінена і не виконана після.
Axel2D

10

Ви можете ознайомитись з цим, а також з інформацією last_execution_timeпро кожну збережену процедуру.

    SELECT DB_NAME(database_id)
    ,OBJECT_NAME(object_id,database_id)
    ,cached_time
    ,last_execution_time
    ,execution_count
FROM sys.dm_exec_procedure_stats

Існує застереження до цього тхо. Ця статистика зберігається лише з моменту останнього виконання бази даних. Я зайнятий написанням роботи, яка буде архівувати її до столу раз на день.
землянина42

@ earthling42, ти коли-небудь писав завдання, яке щодня архівував його до таблиці?
Алекс Чунг

@Alex Chung - на жаль, ніколи цього не обійшлося. Перейшов до проектів, що не належать до MS-SQL, незабаром після дати цієї публікації. Не повинно бути жорстким Тхо? Я б радий спробувати розібратися з вами, якщо вам цікаво.
землянка42
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.