Śledzenie użycia procedury składowanej

19

Czy oprócz SQL Server Profiler można w jakiś sposób śledzić, które procedury przechowywane są używane, a przynajmniej kiedy były ostatnio wykonywane?

DForck42
źródło
4
Zawsze możesz spojrzeć na pamięć podręczną planu. SQL Server nie śledzi tego na zawsze, ponieważ metadane szybko stają się duże i drogie.
JNK

Odpowiedzi:

17

Możesz zajrzeć do pamięci podręcznej planu, aby uzyskać całkiem niezły pomysł na użycie procedury składowanej. Weź to zapytanie, na przykład:

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

To da ci usecountsprocedury składowane, które są buforowane dotyczące SomeDB.

Uwaga: pamięć podręczna planu zawiera plany wykonania. Utrzymanie tych planów wiąże się z wieloma czynnikami. To da ci dobry obraz tego, co jest używane i jak często, ale zdecydowanie nie jest to całkowita liczba przechowywanych procedur i jak często / kiedy były wykonywane.

Dokumentacja BOL na temat pamięci podręcznej planu

Thomas Stringer
źródło
4
Pamiętaj, że to tylko informuje, że SP został niedawno uruchomiony i nie daje żadnych informacji o procesach, których tu nie ma. Rzeczy takie jak procy za kwartalnymi raportami są uruchamiane rzadko, ale są wykorzystywane. Zasadniczo daje to listę do zbadania w aplikacjach, które uderzyły w twoją bazę danych.
HLGEM,
1
@HLGEM Dokładnie. Próbowałem wyjaśnić tę kwestię w mojej odpowiedzi.
Thomas Stringer,
Czy jest to możliwe w przypadku określonego przedziału czasu? (np. ostatni dzień / miesiąc itp.)?
Jose Parra,
Zauważ, że to zapytanie nie zwróci wiersza dla procedury składowanej, która została zmieniona i nie została wykonana później.
Axel2D
10

Możesz na to spojrzeć, ponieważ zawiera informacje last_execution_timeo każdej procedurze przechowywanej.

    SELECT DB_NAME(database_id)
    ,OBJECT_NAME(object_id,database_id)
    ,cached_time
    ,last_execution_time
    ,execution_count
FROM sys.dm_exec_procedure_stats
Sai Chaitanya M.
źródło
Jest zastrzeżenie do tego tys. Te statystyki są przechowywane tylko od ostatniego wykonania bazy danych. Jestem zajęty pisaniem zadania, które raz dziennie archiwizuje je na stole.
earthling42
@ Earthling42, czy kiedykolwiek pisałeś pracę, która codziennie archiwizowała ją na stole?
Alex Chung,
@Alex Chung - niestety nigdy do tego nie doszło. Przeniesiony do projektów innych niż MS-SQL wkrótce po dacie tego postu. Czy nie powinno być trudne? Z przyjemnością spróbuję to wypracować, jeśli jesteś zainteresowany.
earthling42