Melacak penggunaan prosedur tersimpan

19

Selain menggunakan SQL Server Profiler, apakah ada cara untuk melacak prosedur tersimpan yang sedang digunakan, atau setidaknya ketika mereka terakhir kali dieksekusi?

DForck42
sumber
4
Anda selalu dapat melihat cache rencana. SQL Server tidak melacak hal ini selamanya karena metadata cepat menjadi besar dan mahal.
JNK

Jawaban:

17

Anda dapat melihat dalam cache rencana untuk mendapatkan ide yang cukup bagus tentang penggunaan Prosedur Tersimpan. Ambil kueri ini, misalnya:

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

Ini akan memberi Anda usecountsprosedur tersimpan yang di-cache terkait SomeDB.

Catatan: cache rencana berisi rencana eksekusi. Retensi rencana-rencana ini memiliki banyak faktor yang terlibat. Padahal ini akan memberi Anda ide yang baik tentang apa yang sedang digunakan dan seberapa sering, itu jelas bukan total menjalankan prosedur yang tersimpan dan seberapa sering / kapan mereka dieksekusi.

Referensi BOL tentang Cache Paket

Thomas Stringer
sumber
4
Ingat ini hanya memberitahu Anda sp telah berjalan cukup baru dan memberi Anda tidak ada informasi tentang procs tidak ada di sini. Hal-hal seperti procs di balik laporan triwulanan jarang dilakukan tetapi sedang digunakan. Jadi pada dasarnya, ini hanya memberi Anda daftar untuk meneliti aplikasi yang mengenai db Anda.
HLGEM
1
@HLGEM Tepatnya. Saya sudah mencoba menjelaskan hal itu dalam jawaban saya.
Thomas Stringer
Apakah mungkin melakukan ini untuk rentang waktu tertentu? (mis. hari / bulan terakhir, dll)?
Jose Parra
Perhatikan bahwa kueri ini tidak akan mengembalikan baris untuk prosedur tersimpan yang telah diubah dan tidak dieksekusi setelah.
Axel2D
10

Anda dapat melihatnya dan juga berisi info last_execution_timedari setiap prosedur yang tersimpan.

    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
sumber
Ada peringatan untuk ini. Statistik ini hanya disimpan sejak eksekusi basis data terakhir. Saya sibuk menulis pekerjaan yang akan mengarsipkannya ke meja sekali sehari.
earthling42
@ earthling42, apakah Anda pernah menulis pekerjaan yang diarsipkan ke meja setiap hari?
Alex Chung
@ Alex Chung - sayangnya tidak pernah berhasil. Pindah ke proyek non MS-SQL segera setelah tanggal posting ini. Seharusnya tidak terlalu sulit? Saya akan senang mencoba menyelesaikannya dengan Anda jika Anda tertarik.
earthling42