Frage

Es ist eine triviale Aufgabe, um herauszufinden, ob ein Objekt durch etwas anderes oder nicht referenziert wird. Was ich möchte, ist zu tun, festzustellen, ob oder nicht, es ist tatsächlich verwendet wird, .

Meine Lösung ursprünglich umfasste eine Kombination aus einer Tabelle, die eine Liste von Objekten in der Datenbank und einer stündlichen Job gehalten wird.

Der Job hat zwei Dinge. Zuerst sah es für neue Objekte, die seit dem letzten Lauf der Datenbank hinzugefügt worden war. Zweitens sah es im Objekt-Cache SQL. Wenn ein Objekt in der Tabelle im Cache aufgeführt wurde, wurde es in der Tabelle hat vor kurzem „gesehen“ in Gebrauch markiert.

Am Ende eines Zeitraums von sechs Monaten oder was auch immer, wurden die Inhalte der Tabelle untersucht. Alles, was in der Tabelle aufgeführt sind, die nicht gesehen worden verwiesen hatte, seit ich die Überwachung waren wahrscheinlich sicher zu Sicherung gestartet und entfernen.

Sicher, gibt es die Möglichkeit von Objekten, die nur verwendet werden, etwa einmal im Jahr oder was auch immer, aber es schien, zum größten Teil zu arbeiten.

Es war eine Art Schmerz, mit zu arbeiten, though.

Es gibt etwa ein halbes Dutzend Datenbanken mit ich arbeite, von denen die meisten Tonnen Legacy-Tabellen auf sie haben, die lange bleiben, nachdem ihre ursprünglichen Schöpfer an andere Unternehmen weitergezogen.

Was ich suche ist eine ziemlich zuverlässige Methode der Verfolgung, wenn ein Objekt (Tabelle, Ansicht, gespeicherte Prozedur oder Funktion) aufgerufen zu werden.

Für diejenigen von Ihnen, die diese Art der Sache zur Zeit überwachen, welche Methode / Code verwenden Sie und würden Sie es empfehlen?

War es hilfreich?

Lösung

Mit SQL Server 2005 können Sie die dynamische Verwaltungssicht sys.dm_db_index_usage_stats verwenden. Der Name sagt „Index“, aber das ist ein wenig irreführend - jeder Tisch hat einen Eintrag in hier, auch wenn es keine Indizes hat. Hier ist eine nützliche Abfrage von SQL Magazinen:

SELECT 
  t.name AS 'Table', 
  SUM(i.user_seeks + i.user_scans + i.user_lookups) 
    AS 'Total accesses',
  SUM(i.user_seeks) AS 'Seeks',
  SUM(i.user_scans) AS 'Scans',
  SUM(i.user_lookups) AS 'Lookups'
FROM 
  sys.dm_db_index_usage_stats i RIGHT OUTER JOIN 
    sys.tables t ON (t.object_id = i.object_id)
GROUP BY 
  i.object_id, 
  t.name
ORDER BY [Total accesses] DESC

Hier ist der Original-Artikel:

http://www.sqlmag.com/Article/ArticleID/53878/ sql_server_53878.html

Beachten Sie, dass diese Nutzungsstatistiken zurückgesetzt, wenn SQL Server neu gestartet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top