Ś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?


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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.