Im nächsten Jahr helfe ich bei der Bereinigung mehrerer SQL Server-Umgebungen.
Wir haben ungefähr 10.000 gespeicherte Prozeduren und schätzen, dass nur ungefähr 1000 von ihnen regelmäßig verwendet werden, und weitere 200 werden in seltenen Fällen verwendet, was bedeutet, dass wir viel Arbeit zu erledigen haben.
Da wir über mehrere Abteilungen und Teams verfügen, die auf diese Datenbanken und Prozeduren zugreifen können, werden die Prozeduren nicht immer von uns aufgerufen, sodass wir bestimmen müssen, welche Prozeduren aufgerufen werden. Darüber hinaus möchten wir dies über einige Monate und nicht über einige Tage hinweg feststellen (was einige Möglichkeiten ausschließt).
Ein Ansatz hierfür besteht darin, die SQL Server Profiler
Prozeduren zu verwenden und zu verfolgen, welche Prozeduren aufgerufen werden, und sie mit der Liste der verfügbaren Prozeduren zu vergleichen und zu markieren, ob die Prozeduren verwendet werden oder nicht. Ab dann könnten wir die Prozeduren in ein anderes Schema verschieben, falls eine Abteilung schreien sollte.
Ist der Profiler
effektivste Ansatz hier? Und / oder hat jemand von euch etwas Ähnliches gemacht und einen anderen / besseren Weg gefunden, dies zu tun?
quelle
Sie finden diese Frage nützlich, sie gilt für Tabellen und Spalten, schlägt jedoch die Verwendung eines Drittanbieter-Tools ApexSQL Clean vor, das auch nicht verwendete gespeicherte Prozeduren sowie alle Objekte findet, auf die von keinem anderen Objekt in der Datenbank oder in externen Datenbanken verwiesen wird
Haftungsausschluss: Ich arbeite für ApexSQL als Support Engineer
quelle
unreferenced stored procedures
, stattdessen will das OP unbenutzten SP finden. Ihre Antwort ist keine Antwort auf diese Frage.Wenn Sie mit SQL Server 2008+ arbeiten, können Sie auch erweiterte Ereignisse mit einem Histogrammziel verwenden . Möglicherweise wäre dies leichter als eine Spur.
AFAIK, Sie müssten jedoch für jede Datenbank von Interesse eine andere Sitzung erstellen, da ich keinen Hinweis darauf sehen konnte, dass ein Bucket-Vorgang für mehrere Spalten möglich war. Das kurze Beispiel unten filtert an
database_id=10
Und dann, nachdem einige gespeicherte Prozeduren in dieser Datenbank ein paar Mal ausgeführt und die Daten mit abgerufen wurden
Die Ausgabe ist
Daraus geht hervor, dass die Prozedur mit
object_id
von1287675635
beispielsweise 36 Mal ausgeführt wurde. Derasynchronous_bucketizer
Speicher ist nur so dass es am besten wäre , etwas , dass Umfragen dies jeder so oft einzurichten und spart bis zu persistenten Speicher.quelle
WHERE (source_database_id IN (10,15,20))
aber leider wird dies nicht unterstützt.object_id
(oder demselbenobject_name
) in verschiedenen Datenbanken separat zählen, und ich denke, dass dies auch nicht möglich ist.extended events
wo wurde 2012 nicht 2008 hinzugefügt?Als Fortsetzung von Kins Drehbuch. Hier ist ein einfaches Skript zum Erstellen einer Tabelle zum Verfolgen der Verwendung im Laufe der Zeit und ein Skript zum regelmäßigen Aktualisieren.
quelle
Dieser Beitrag enthält auch ein Skript zum Auffinden nicht verwendeter Objekte: Auffinden nicht verwendeter Datenbanktabellen in SQL Server Unten ist das Skript aus dem Artikel zu sehen, ich habe den Tabellentyp "U" in den Typ "P" für gespeicherte Prozeduren geändert:
quelle