Feststellen, dass Indizes für eine Tabelle nicht verwendet werden


12

Ich habe dieses Skript ausgeführt, um zu versuchen, irrelevante Indizes zu finden

select o.name as TableName, i.name as IndexName, p.reserved_page_count * 8.0 / 1024 as     SpaceInMB, s.*
from     sys.dm_db_index_usage_stats s
inner join sys.objects o on s.object_id = o.object_id
inner join sys.indexes i on i.index_id = s.index_id and i.object_id = o.object_id
inner join sys.dm_db_partition_stats p on i.index_id = p.index_id and o.object_id =      p.object_id
where o.name = TableName

Ich weiß, dass, wenn last_user_seek / scan / lookup alle null sind, kein Benutzer den Index seit dem letzten Neustart verwendet hat. Aber ich frage mich, was system_scans / lookups / seeks ... sind? Denn an einer bestimmten Tabelle fand ich 5, die keine Benutzeraktivität hatten, aber eine, die vor 10 Tagen Systemaktivität hatte. Hat jemand einen Einblick, was System-Scans / Suchvorgänge / Suchvorgänge sein könnten? Diese Tabellen scheinen wirklich überindiziert zu sein und ich möchte das Fett abschneiden.


Ich habe die gleiche Frage auf sqlservercentral gepostet und auch dort Antworten erhalten. Der Link zum Thema lautet: sqlservercentral.com/Forums/Topic1205983-391-3.aspx?Update=1
Aushin


@Aushin der Link, den Sie oben gepostet haben, führt zu einer extrem durcheinandergebrachten Diskussion voller Gefühle und Nebenaufgaben, denen niemand wirklich folgen möchte.
Magier

Antworten:


10

Indexwartung (Neuaufbau / Neuorganisation) und DBCC CHECKDB-Aktivität, möglicherweise Statistikaktualisierungen. Ist eine geplante Wartung konfiguriert?

Wenn es keinen Benutzerzugriff gibt, bin sie. Denken Sie nur an den Zeitraum, in dem Sie entscheiden, dass sie nicht mehr verwendet werden. Gibt es beispielsweise wöchentliche oder monatliche Berichtsaufgaben?

Während Sie suchen, stöbern Sie auch nach doppelten Indizes .

Edit: bezüglich SSC Link

Sieht aus, als ob die SSC-Leute nach einem kurzen Scan durch den Thread ähnliche Gedanken hatten. Sie sind jedoch vorsichtiger in Bezug auf die mögliche "gelegentliche" Verwendung dieser Indizes und vertreten die Position, dass jemand sie aus einem Grund dort abgelegt hat, ein durchaus vernünftiges Argument. Das Gegenargument ist, dass es allzu oft das genaue Gegenteil ist. Jemand hat sie dorthin gebracht, weil sie dachten, es sei das Richtige, aber aufgrund mangelnden Verständnisses oder mangelnder Tests war es nicht so.

Ich habe ein paar Systeme vom Abgrund geholt, indem ich nichts anderes getan habe, als nicht verwendete und duplizierte Indizes zu löschen. Überindizierung kann Chaos verursachen.

Es ist Ihr System, Sie müssen die Risiken verstehen und abwägen, die durch das Belassen oder Löschen dieser Indizes entstehen. Wenn Sie mit dem Löschen fortfahren möchten, dokumentieren Sie, was Sie tun, warum Sie es tun, erstellen Sie ein Skript für die Indizes und veröffentlichen Sie sie für alle interessierten Parteien.


+1 dazu - ich bin sicher, es sind die Aktivitäten, die Mark erwähnt hat. Nichts, das Sie betreffen sollte - in einer zusätzlichen Antwort weiter unten.
Mike Walsh

Danke dafür. Ich hatte auch einen Thread auf sqlservercentral darüber. Ich werde den Link zu dem posten, was sie in meiner ursprünglichen Frage gesagt haben.
Aushin

9

Glenn Berry hat einige großartige Skripte geschrieben, die Ihnen dabei helfen, Ihre fehlenden Indizes zu finden. Ich schlage vor, seine Skripte zu verwenden, die Ihnen einen Teil der Rätselraten abnehmen. Diese Skripte suchen nicht nur nach Null- oder 0-Benutzersuchen / -scans / -suchen, sondern auch nach Indizes, die einen großen Unterschied zwischen Lese- und Schreibaktivität aufweisen, was möglicherweise zu einer insgesamt besseren Leistung führt, wenn sie gelöscht werden. Ich würde seine Skripte überprüfen - Sie können einen Einstieg in diesen Beitrag von ihm bekommen .

Ich würde mir keine Sorgen um die Systemaktivität machen. Das wird nicht schlimmer, wenn Sie die Indizes entfernen. Tatsächlich kann es sich um Aktivitäten handeln, die nur für diesen Index stattfinden, weil er vorhanden ist. Das Wichtigste, was Sie interessiert, ist die Aktivität zum Lesen und Schreiben von Benutzern und das Ausgleichen dieser Aktivität.


5

Beachten Sie, dass Indizes auch nützliche Informationen für das Abfrageoptimierungsprogramm bereitstellen, selbst wenn sie nicht verwendet werden. Ich habe zum Beispiel ziemlich viel über die Auswirkungen von Einzigartigkeit gemacht. Wenn Sie einen eindeutigen Index entfernen, weil er keine Suchvorgänge oder Überprüfungen enthält, kann sich dies nachteilig auf die Leistung auswirken.


Toller Punkt und ich glaube, dass Glenns Skripte nach einzigartigen Einschränkungen suchen. Wenn nicht sein, vielleicht ein anderes Set, muss ich das untersuchen.
Mike Walsh

0

Zusätzlich zu dem, was alle anderen angegeben haben, zeigen Indizes für referenzierte FK-Spalten möglicherweise niemals Suchvorgänge oder Scans an, sondern werden im Hintergrund verwendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.