
Neben der Platzverschwendung in der Datenbank können unnötige Indizes auf dem SQL Server Einfüge- und Aktualisierungsvorgänge verlangsamen. Entwickler, denen es an Erfahrung mit Datenbankprinzipien mangelt, neigen manchmal dazu, Tabellenindizes zu erstellen, die für die laufenden Abfragen keinen Sinn ergeben.
Gibt es für SQL Server 2005/2008 ein allgemeines Verfahren oder Tool zum Analysieren der Datenbankarbeitslast und zum Erfassen von Hinweisen, welche Indizes für eine bestimmte Betriebsdatenbank entweder nie verwendet werden oder nicht erforderlich sind?
Danke schön!
Antwort1
Ich sehe hier ein nettes kleines T-SQL-Skript (http://blog.sqlauthority.com/2008/02/11/sql-server-2005-find-unused-indexes-of-current-database/), um ungenutzte Indizes anzuzeigen, die auf SQL Server 2005 laufen sollen. Ein weitererhttp://aspadvice.com/blogs/ssmith/archive/2008/03/31/Find-Unused-SQL-2005-Indexes-for-Current-DB.aspxauch hier.
Es sieht so aus, als ob dm_db_index_usage_stats der Schlüssel zu all dem ist. Ziemlich clever! (Siehehttp://msdn.microsoft.com/en-us/library/ms188755.aspx Ich muss mir jetzt einige Produktionsdatenbanken ansehen, die ich erstellt habe, um zu sehen, wie diese Statistiken aussehen. (lächeln)
Bearbeiten: Einige sehr nette zusätzliche Hintergründe hier:http://blogs.msdn.com/craigfr/archive/2008/10/30/what-is-the-difference-between-sys-dm-db-index-usage-stats-and-sys-dm-db-index-operational-stats.aspx
Antwort2
Bei der Verwendung von sys.dm_db_index_usage_stats sollten Sie Folgendes beachten:
- Die Ausgabe enthält nur Indizes, die seit dem letzten Start der Datenbank verwendet wurden. Wenn eine Datenbank heruntergefahren wird, werden alle Einträge aus dem In-Memory-Cache mit Informationen für diese Datenbank gelöscht. Ebenso übersteht der Cache einen sofortigen Neustart nicht. Es gibt keine Möglichkeit, die Einträge für eine bestimmte Datenbank manuell zu löschen, ohne die Datenbank neu zu starten. Die verschiedenen Artikel, auf die in der ersten Antwort verwiesen wird (und auch auf meinem Blog), beschreiben, wie die Ausgabe zu verschiedenen Zeitpunkten erfasst wird, um Zeitreihenanalysen durchzuführen.
- Testen Sie unbedingt IhregesamteKonjunkturzyklus. Sie möchten keinen Index entfernen, der für einen Monatsendbericht oder eine CEO-Abfrage verwendet wird, auch wenn dies verlockend sein mag.
- Stellen Sie sicher, dass Sie die verschiedenen Zählwerte und ihre Bedeutung verstehen, bevor Sie eine Entscheidung darüber treffen, ob der Index gewinnbringend eingesetzt oder lediglich auf Kosten des Betreibers gepflegt wird.
Hoffe das hilft.
PS Noch etwas für andere, die dies lesen und sich fragen, ob es eine entsprechende Methode für SQL Server 2000 gibt – nein, wir (da ich damals im Team war) haben die Funktion erst ab 2005 hinzugefügt.
Antwort3
Wir haben bei SQLServerPedia einen Wiki-Artikel mit einem entsprechenden Skript und einem Anleitungsvideo zur Verwendung:
So finden Sie ungenutzte Indizes:
http://sqlserverpedia.com/wiki/Find_Indexes_Not_In_Use
Und noch eins zum Suchen von Indizes, das Sie hinzufügen sollten:
Antwort4
Ich habe einige Index-bezogene Abfragen durchgeführt und dies in meinem Blog gezeigt (http://dbalink.wordpress.com/2008/11/09/how-to-finding-index-usage-stats-with-dmv-in-tsql/)