Ich versuche herauszufinden, welche Indizes in meiner Datenbank nicht mehr verwendet werden. Ich hatte großes Glück mit der folgenden Abfrage:
%Vor%Was ich jetzt herausfinden möchte, ist, welche Stored Procedures die Suchen, Scans und Lookups verursachen, die die obige Abfrage meldet. Sind diese Informationen in den Systemansichten / Tabellen gespeichert?
KLARIFIZIERUNG
Da gbn darauf hingewiesen hat, dass eine Stored Procedure nicht direkt einen Index verwendet, verwendet sie eine Tabelle, die einen Index verwendet. Unten ist eine Erklärung, die hoffentlich klären wird, was ich hier zu fragen versuche.
Kann ich feststellen, welche SQL ausgeführt wurde, die die oben genannten Indizes verursacht hat? Wenn zum Beispiel einer der angegebenen Indizes 10 User_Seeks hat, ist es möglich zu bestimmen, dass exec sp_1
diese Nutzung 7 Mal verursacht hat und exec sp_2
diese Nutzung dreimal verursacht hat?
Bearbeiten (erneut nach der Aktualisierung der Frage):
Keine realistische Chance. Sie könnten Profiler ausprobieren und den Textplan erfassen. Ich habe das einmal gesehen und es hat einen Server getötet: Es ist eine Menge Text aufzunehmen. YMMV: -)
Gespeicherte Prozeduren verwenden keine Indizes.
Gespeicherte Prozeduren verwenden Tabellen (und indizierte Sichten), die dann Indizes verwenden (oder nicht verwenden, wie Sie oben ausgeführt haben)
Doing SELECT col1, col2 FROM myTable WHERE col2 = 'foo' ORDER BY col1
ist das gleiche, egal ob es sich um eine gespeicherte Prozedur, eine Ansicht, eine benutzerdefinierte Funktion oder um sich selbst handelt.
Bearbeiten: Unser Skript für die Indexverwendung, das von irgendwo heruntergeladen wurde ...
%Vor%Sie haben die Anzahl der Ausführungen für alle Anweisungen in sys.dm_exec_query_stats , und Sie können Extrahieren Sie den XML-Plan mithilfe von sys.dm_exec_query_plan . Der Plan enthält Details wie verwendete Scan-Operatoren, so dass Sie zwischen diesen beiden eine Menge Informationen aus dem, was Sie fragen, zusammenstellen können. Die folgende Abfrage zeigt beispielsweise die IndexScan-Operatoren in den häufig ausgeführten Anweisungen aus den zwischengespeicherten Plänen, die viele logische Lesevorgänge verursachen:
%Vor%Im SQL-Verwaltungsstudio können Sie genau sehen, wie die Abfrage ausgeführt wird, indem Sie die Option "Ausführungsplan anzeigen" im Menü Abfrage verwenden.
Ich habe keinen Zugriff auf SQL Management Studio zu Hause, aber vielleicht können Sie sich die gespeicherten procdures-Abhängigkeiten ansehen (d. h. this
store-Prozedur hängt von diesen Tabellen ab und kann daher diese Indizes verwenden)
Diese Seite gibt Ihnen möglicherweise einen Hinweis, z. B. die INFORMATION_SCHEMA.ROUTINES
Systemtabelle:
Sie können diese Informationen in eine temporäre Tabelle auffüllen und diese dann verwenden, um nach den verwendeten Indizes zu suchen, wobei Sie sich die Indexnutzungsstatistiken ansehen.
Tut mir leid, dass ich Ihnen kein praktisches Beispiel geben kann, nur ein theoretisches Beispiel ...
Tags und Links sql-server sql-server-2005 tsql