Tools zum Identifizieren benötigter Indizes

8

Ich möchte die besten Indizes für jede Tabelle in meiner Datenbank erstellen. Gibt es in SQL Server eine Abfrage oder ein Tool, das Sie bei diesem Prozess unterstützt?

mehdi lotfi
quelle
1
Es gibt vorgeschlagene Indizes, diese sind jedoch sehr begrenzt und sollten dennoch von jemandem bewertet werden, der weiß, was er tut. Haben Sie eine spezielle Frage zur Indizierung?
JNK
1
Gibt es eine Abfrage / Tabelle, für die Sie eine schlechte Leistung haben? Wie JNK angedeutet hat, sollten Sie wirklich nur Indizes hinzufügen, wenn Sie wissen, was Sie tun (und es trotzdem testen). Wenn Sie nicht Grund zu der Annahme haben, dass eine Tabelle einen Index benötigt (große Tabelle, langsame Abfragen, ein offensichtlicher Clustered-Index), sollten Sie nicht einfach versuchen, sie hinzuzufügen
Ben Brocka

Antworten:

10

Ja, es gibt Tools wie den Tuning Advisor für Datenbank-Engines. Es wird mit SQL Server ausgeliefert und macht einige ziemlich böse Dinge:

  • Sie können nur eine sehr kleine Arbeitslast berücksichtigen (sogar eine einzelne Abfrage). Dies schlägt dann Indizes vor, die möglicherweise nur dieser kleinen Arbeitslast helfen, ohne Rücksicht auf den Rest der Arbeitslast (Indizes beschleunigen einige Abfragen, andere können jedoch verlangsamt werden, insbesondere das Einfügen / Aktualisieren / Löschen) des Konjunkturzyklus.
  • Es werden häufig redundante Indizes empfohlen, die sich nur durch eine nachfolgende Spalte oder eine eingeschlossene Spalte unterscheiden.
  • Es mag wirklich, wirklich, wirklich eingeschlossene Spalten - ich denke, es könnte ein Fetisch sein.

Der richtige Ansatz für die Indexoptimierung besteht darin, Ihre gesamte Arbeitslast über einen vollständigen Geschäftszyklus zu berücksichtigen. Manchmal ist es besser, sich an Werkzeuge von Drittanbietern zu wenden, als das Rad neu zu erfinden. DBSophic stellt ein kostenloses Produkt namens Qure Workload Analyzer her, das meiner Meinung nach viel besser funktioniert als DTA - aber das lizenzierte Tool (Qure Workload Optimizer) ist absolut phänomenal. Letztes Jahr habe ich darüber gebloggt, wie das Tool funktioniert, wenn es in unsere Lösung ( SQL Sentry Performance Advisor für SQL Server ) integriert ist ( Haftungsausschluss: Ich arbeite für SQL Sentry ).

Es gibt auch einige andere Optionen, z. B. werden fehlende Indizes in den DMVs gemeldet, und Sie können auch feststellen, in welche Indizes geschrieben wird (sie belegen also Speicherplatz und wirken sich auf Einfüge- / Aktualisierungs- / Löschvorgänge aus), jedoch nie (oder selten) ) von Benutzeranfragen verwendet:

Diese benötigen jedoch auch die Einschränkung, dass die DMVs erst seit dem letzten Neustart von SQL Server gültig sind und nicht unbedingt einen ordnungsgemäßen Geschäftszyklus abdecken (und daher möglicherweise wichtige Informationen fehlen

Aaron Bertrand
quelle
7

Das Tool, über das Sie sprechen, heißt Database Engine Tuning Advisor (kurz DTA). Es kann eine Reihe von Eingaben enthalten und Empfehlungen zu fehlenden Indizes geben. Es ist jedoch erwähnenswert, dass dies nur Vorschläge sind und sorgfältige Überlegungen angestellt werden sollten, anstatt blind den Empfehlungen von DTA zu folgen.

Link zum DTA-Tutorial

Es ist auch erwähnenswert, dass es integrierte DMVs zum Sammeln dieser Art von Informationen gibt:

Thomas Stringer
quelle