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.
sql-server-2005
index
Aushin
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle