SQL Server - Wie ermittelt man, ob Indizes nicht verwendet werden?

8

Ich habe eine Transaktionsdatenbank mit hoher Nachfrage, die meiner Meinung nach überindiziert ist. Ursprünglich hatte es überhaupt keine Indizes, so dass einige für allgemeine Prozesse einen großen Unterschied machten. Im Laufe der Zeit haben wir jedoch Indizes erstellt, um einzelne Abfragen zu beschleunigen, und einige der beliebtesten Tabellen haben 10-15 verschiedene Indizes, und in einigen Fällen unterscheiden sich die Indizes nur geringfügig voneinander gleiche Spalten in einer anderen Reihenfolge.

Gibt es eine einfache Möglichkeit, Datenbankaktivitäten zu überwachen und festzustellen, ob Indizes nicht mehr getroffen werden oder wie hoch der Prozentsatz ihrer Verwendung ist? Ich bin besorgt, dass Indizes erstellt wurden, um entweder eine einzelne tägliche / wöchentliche Abfrage oder sogar eine Abfrage zu beschleunigen, die nicht mehr ausgeführt wird, aber der Index muss immer noch auf dem neuesten Stand gehalten werden, wenn sich die Daten ändern.

Im Fall der Tabellen mit hohem Datenverkehr ist das ein Dutzend Mal pro Sekunde, und ich möchte Indizes eliminieren, die Datenaktualisierungen belasten, während sie nur marginale Verbesserungen bieten.

    
SqlRyan 08.01.2010, 17:38
quelle

4 Antworten

10

Sehen Sie sich an, wie viele Benutzer Suchvorgänge / Suchvorgänge / Suchvorgänge ausführen und ob der letzte Benutzer in sys .dm_db_index_usage_stats . Diese Statistiken werden beim Serverstart zurückgesetzt. Sie müssen also überprüfen, ob der Server hochgefahren ist und eine entsprechende Last für eine ausreichende Zeit ausführen.

    
Remus Rusanu 08.01.2010, 17:41
quelle
4

Dieses Skript untersucht die DMVs (dynamische Verwaltungsansichten) und sucht nach den Indizes, die nicht verwendet wurden.

%Vor%

Wohlgemerkt - die DMV sind dynamisch - z. Sie werden bei jedem Neustart der SQL Server-Dienste auf "nichts" zurückgesetzt. Überprüfe diese nicht, wenn dein Server nur für ein paar Minuten geöffnet war! Fast alle Indizes erscheinen in Ihrer Ergebnismenge ......

Aber wenn Sie die Ergebnismenge dieser Abfrage im Zeitverlauf überwachen können, sollten Sie auf jeden Fall ein Gefühl dafür bekommen, welche Indizes überhaupt nicht verwendet werden. Sehr praktisch!

    
marc_s 08.01.2010 17:55
quelle
3

Wenn Sie mit SQL Server 2005/2008 arbeiten, sollten Sie den Ratgeber Datenbankoptimierung verwenden .

Sie können festlegen, dass es für eine bestimmte Zeitspanne ausgeführt wird, und es werden Statistiken darüber gesammelt, was verwendet wird und was nicht. Am Ende des Laufs wird es einige sehr nützliche Beobachtungen darüber geben, was zu tun ist, um Ihre Indexierungsstrategie zu optimieren.

    
womp 08.01.2010 17:42
quelle
1

Der Datenbank-Assistent wird hier hilfreich sein. Verwenden Sie den Profiler, um einen Standardsatz von Abfragen im Laufe einiger Stunden aufzuzeichnen, und verwenden Sie diese Ablaufverfolgungsdatei im Optimierungsassistenten, um mögliche redundante Indizes zu identifizieren.

    
user114600 08.01.2010 17:42
quelle