patternsqlMajor
Identifying Unused Stored Procedures
Viewed 0 times
storedproceduresunusedidentifying
Problem
This next year, I am helping an effort to clean several SQL Server environments.
We have about 10,000 stored procedures and estimate that only about 1000 of them are used on a regular basis, and another 200 or so are used on a rare occasion, meaning we have a lot of work to do.
Since we have multiple departments and teams that can access these databases and procedures, we are not always the ones calling the procedures, meaning that we must determine what procedures are being called. On top of that, we want to determine this over a few months, not in a few days (which eliminates some possibilities).
One approach to this is to use the
Is using the
We have about 10,000 stored procedures and estimate that only about 1000 of them are used on a regular basis, and another 200 or so are used on a rare occasion, meaning we have a lot of work to do.
Since we have multiple departments and teams that can access these databases and procedures, we are not always the ones calling the procedures, meaning that we must determine what procedures are being called. On top of that, we want to determine this over a few months, not in a few days (which eliminates some possibilities).
One approach to this is to use the
SQL Server Profiler and track what procedures are being called and compare them to the list of what procedures we have, while marking whether the procedures are used or not. From then, we could move the procedures to a different schema in case a department comes screaming.Is using the
Profiler the most effective approach here? And/Or have any of you done something similar and found another way/better way to do this?Solution
You can use server side trace (different from using Profiler GUI that incurs more resources) during your testing or your business cycle and capture only stuff related to SP's. Then you can load that in a table or excel for further analysis.
Second approach, is to use DMV sys.dm_exec_procedure_stats (with limitation that if sql server is restarted, then the data is flushed).
You can even schedule a job to capture DMV data to a table to keep it persisted.
Refer to :
Second approach, is to use DMV sys.dm_exec_procedure_stats (with limitation that if sql server is restarted, then the data is flushed).
You can even schedule a job to capture DMV data to a table to keep it persisted.
-- Get list of possibly unused SPs (SQL 2008 only)
SELECT p.name AS 'SP Name' -- Get list of all SPs in the current database
FROM sys.procedures AS p
WHERE p.is_ms_shipped = 0
EXCEPT
SELECT p.name AS 'SP Name' -- Get list of all SPs from the current database
FROM sys.procedures AS p -- that are in the procedure cache
INNER JOIN sys.dm_exec_procedure_stats AS qs
ON p.object_id = qs.object_id
WHERE p.is_ms_shipped = 0;Refer to :
- How to find unused Stored Procedures in SQL Server 2005/2008
- Identifying Unused Objects in a Database
Code Snippets
-- Get list of possibly unused SPs (SQL 2008 only)
SELECT p.name AS 'SP Name' -- Get list of all SPs in the current database
FROM sys.procedures AS p
WHERE p.is_ms_shipped = 0
EXCEPT
SELECT p.name AS 'SP Name' -- Get list of all SPs from the current database
FROM sys.procedures AS p -- that are in the procedure cache
INNER JOIN sys.dm_exec_procedure_stats AS qs
ON p.object_id = qs.object_id
WHERE p.is_ms_shipped = 0;Context
StackExchange Database Administrators Q#47025, answer score: 34
Revisions (0)
No revisions yet.