L'année prochaine, j'aide à nettoyer plusieurs environnements SQL Server.
Nous avons environ 10 000 procédures stockées et nous estimons que seulement environ 1 000 d'entre elles sont utilisées régulièrement, et environ 200 autres sont utilisées en de rares occasions, ce qui signifie que nous avons beaucoup de travail à faire.
Étant donné que plusieurs départements et équipes peuvent accéder à ces bases de données et procédures, nous ne sommes pas toujours ceux qui appellent les procédures, ce qui signifie que nous devons déterminer quelles procédures sont appelées. En plus de cela, nous voulons déterminer cela sur quelques mois, pas sur quelques jours (ce qui élimine certaines possibilités).
Une approche consiste à utiliser SQL Server Profiler
et à suivre les procédures qui sont appelées et à les comparer à la liste des procédures que nous avons, tout en marquant si les procédures sont utilisées ou non. À partir de là, nous pourrions déplacer les procédures vers un schéma différent au cas où un service viendrait crier.
L' Profiler
approche la plus efficace est-elle utilisée ici? Et / Ou avez-vous fait quelque chose de similaire et trouvé une autre manière / meilleure façon de le faire?
la source
Vous pouvez trouver cette question utile, elle s'applique aux tables et aux colonnes mais suggère d'utiliser un outil tiers ApexSQL Clean qui peut également trouver des procédures stockées inutilisées ainsi que tous les objets qui ne sont référencés par aucun autre objet dans la base de données ou dans des bases de données externes
Avertissement: je travaille pour ApexSQL en tant qu'ingénieur de support
la source
unreferenced stored procedures
, mais OP veut trouver le SP inutilisé. Votre réponse ne sert pas de réponse à cette question.Si vous utilisez SQL Server 2008+, vous pouvez également utiliser des événements étendus avec une cible d'histogramme . Peut-être que ce serait plus léger qu'une trace.
AFAIK, vous auriez besoin de créer une session différente pour chaque base de données d'intérêt, car je ne voyais aucune indication que le regroupement sur plusieurs colonnes était possible. L'exemple rapide ci-dessous filtre sur
database_id=10
Et puis après avoir exécuté quelques procédures stockées dans cette base de données plusieurs fois et récupéré les données avec
La sortie est
Montrant que la procédure avec
object_id
of a1287675635
été exécutée 36 fois par exemple. Ilasynchronous_bucketizer
s'agit uniquement de mémoire, il est donc préférable de configurer quelque chose qui l'interroge de temps en temps et le sauvegarde dans un stockage persistant.la source
WHERE (source_database_id IN (10,15,20))
mais hélas ce n'est pas supporté.object_id
(ou le mêmeobject_name
) dans différentes bases de données et je ne pense pas que ce soit possible non plus.extended events
où a été ajouté en 2012 et non en 2008?Comme suite au script de Kin. Voici un script simple pour créer un tableau pour suivre les utilisations dans le temps et un script pour le mettre à jour périodiquement.
la source
Ce message fournit également un script pour trouver des objets inutilisés: Rechercher les tables de base de données inutilisées dans SQL Server Ci-dessous le script de l'article, j'ai changé le type de table "U" en type de procédure stockée "P":
la source