TSQL requête pour trouver de l'onu-utilisé des procédures stockées
Je suis en train de traquer toutes les procédures stockées dans une base de données qui n'ont jamais été utilisés, ou qui n'ont pas été utilisés dans de nombreux mois.
Je voudrais trouver une requête afin d'afficher toutes les procédures stockées qui ne sont pas en cours d'utilisation, de sorte que ces procédures stockées peuvent être analysées afin de déterminer si elles peuvent être supprimées.
Je suis familier avec sys.les procédures, mais ne sais pas comment faire pour déterminer si une procédure est en cours d'utilisation ou non.
SELECT *
FROM sys.procedures;
À l'aide de SQL Server 2008 R2.
MISE À JOUR MISE À JOUR MISE À JOUR
À l'aide de la requête à partir d'Aaron Bertrand ci-dessous, légèrement modifiée, c'est ce que j'ai fini par utiliser, et c'était parfait.
SELECT p.*
FROM sys.procedures AS p
LEFT JOIN sys.dm_exec_procedure_stats AS s ON s.[object_id] = p.[object_id]
WHERE s.object_id IS NULL;
Merci pour l'aide.
- Désolé de Siva, c'est pas tout à fait ce que je cherchais. Le formulaire de réponse Aaron ci-dessous il ne.
Vous devez vous connecter pour publier un commentaire.
Dmv permettra d'enregistrer les statistiques de procédures, mais ils n'éventuellement aller aussi loin que le dernier redémarrage (et souvent pas bien loin, en fonction de combien de temps un régime de vie dans le cache):
Donc, si votre système n'a que pour un court laps de temps, ce n'est pas une mesure fiable. Le link @Shiva souligne est utile aussi bien pour d'autres idées. Malheureusement SQL Server n'a pas vraiment de piste pour vous globalement donc, sauf si vous ajoutez de traçage ou de journalisation, vous êtes coincé avec la confiance que vous placez dans le DMV...
MODIFIER c'était un bon point, j'ai été en résolvant les procédures ont exécuter. Au lieu de cela vous pouvez ceci:
Ou vous pouvez également inclure des procédures qui ont été exécutées en tant que bien, mais l'ordre par lors de leur dernière exécution:
Ce seront d'abord les procédures qui n'ont pas couru depuis un redémarrage, puis le reste par les quand ils ont été exécutés en dernier, les plus anciens en premier.
Voici une variation sur le acceptées réponse qui a été le plus utile pour moi:
Les modifications de l'affichage de la dernière moment de l'exécution et de l'inclure la procédure du schéma.
Pour une raison quelconque, mon dm_exec_procedure_stats vue efface de lui-même par le biais de la journée. Donc j'ai juste couru dès maintenant et les premiers temps d'exécution sont à partir de ce matin, mais je sais que nous n'avons pas le redémarrage de SQL ce matin ou quoi que ce soit.
De toute façon, j'ai voulu créer un proc que je pourrais mettre dans l'exécution d'un travail de chaque heure et de capture qui procs a exécuté récemment. Voici ce que j'ai fait:
Créé un tableau pour consigner les procs qui est exécutée et leur premier et le dernier temps de l'exécution.
Créé une procédure qui insère ou des mises à jour de la ProcsThatExecute table. Exécuter cette chaque heure de travail dans un emploi et après quelques jours ou semaines ou mois, vous avez un journal dont les procs de s'habituer: