1

Ich arbeite an einem System, das auf einer SQL Server-Datenbank basiert, die viele Jahre der Entwicklung darauf hat. Es ist nicht riesig im Datenvolumen (ein paar GB), aber es hat eine Menge Komplexität (Hunderte von Tabellen, Hunderte von gespeicherten Prozeduren).Protokoll Verwendung von Datenbanktabellen, Funktionen, gespeicherten Prozeduren, Ansichten usw.

Ich möchte damit beginnen, die Sachen zu reinigen, die nicht mehr benutzt werden. Wir haben einen wöchentlichen/monatlichen/vierteljährlichen/jährlichen Zyklus, der bedeutet, dass einige Sachen für ein Jahr nicht verwendet werden. Wenn es jedoch eine kurze Liste von Dingen gibt, die seit ein paar Monaten nicht mehr benutzt wurden, können wir vielleicht durch Inspektion entscheiden, ob sie noch nützlich sind.

Ich beabsichtige, den Zugriff auf alle Datenbankobjekte zu protokollieren. Ich habe ein paar Ideen, aber was ich möchte, ist ein Protokoll, das ich in eine Liste von Dingen verwandeln kann, die nicht benutzt werden. Ich habe ein paar Ideen, aber ich hätte gerne Expertenhilfe.

bearbeiten: Ich möchte auch aufräumen, dass ich den Zugriff auf die Tabellen/Ansichten sowie die gespeicherten Procs und Funktionen sehen möchte.

+0

Was ist Ihre Datenbankserver-Software? –

+0

SQL Server 2005/2008. Wir haben beides. –

Antwort

0

Nun SQL-Profiler wäre mein Vorschlag, aber Sie müssen vorsichtig sein, dass ausgeführt wird, da es einen Leistungsaufwand verursacht, wenn Sie eine Ablaufverfolgung ausgeführt haben.

+0

ja, das war meine Sorge. Der Datenbankserver ist nicht stark ausgelastet, aber ich denke, dass das Ausführen einer Ablaufverfolgung für Jahr auf "BatchComplete" viele Daten machen kann. –

1

Dies ist eine ähnliche Frage, und zwar, wenn gespeicherte Prozeduren gefragt wurden verwendet: How do I log the frequency and last-used time for a stored procedure?

+0

Ah ja. Ich habe das nicht gesehen. Aber ich habe Code, der alle gespeicherten Prozeduren mit einer Logging-Anweisung markiert. Ich möchte aber auch den Zugriff auf Tabellen und Ansichten protokollieren. Ich habe darüber nachgedacht, Logging-Trigger zu Tabellen und Views hinzuzufügen, um sie einzufügen/zu aktualisieren/zu löschen, aber ich weiß nicht, wie ich den "Select" -Zugriff abfangen kann. –

1

Sie überprüfen sys.dm_db_index_usage_stats: das letzte Update ist in der last_user_update Spalte und die letzte SELECT zurückgehalten wird, in der eine der last_user_seek beibehalten, last_user_scan oder last_user_lookup. Beachten Sie, dass die Zähler beim Start von SQL Server zurückgesetzt werden. Daher müssen Sie Ihre Anwendung ausführen und alle Funktionen gründlich testen, um relevante Ergebnisse zu erhalten.

Für die gespeicherte Prozedur sollten Sie einen Server-Trace starten, der das Ereignis SP:Starting überwacht. Nachdem Ihre Tests ausgeführt wurden, die wiederum alle Funktionen des Produkts ausführen, stoppen Sie die Ablaufverfolgung, und verwenden Sie SQL-Aggregatfunktionen, um unterschiedliche Vorkommen von Prozedurnamen in TextData in der Ablaufverfolgungsdatei zu zählen. Sie lesen die Spur mit fn_trace_gettable.

+0

Ich hatte die dynamischen Ansichten vergessen, also bekommst du +1 dafür. Ich bin mir nicht sicher, ob es richtig ist. Es ist sehr nützlich, um die _most_ verwendeten Sprocs/Tabellen/Indizes zu finden, aber ich bin nicht sicher, dass es jede Verwendung jeder Tabelle findet. Ich bin mir nicht sicher, also nicht schießen! –

+0

Das meine ich mit "gründlicher Test". Wenn Ihre Testbatterie * jede * Funktion des Produkts ausübt, haben Sie am Ende * jeden * benutzten Tisch/Index/Vorgang gesammelt. Ich verstehe, dass in der realen Welt mit einem Test zu kommen, der alles, was eine Anwendung tut, nicht trivial ist, wenn überhaupt möglich. –