Wie finde ich heraus, welche Stored Procedures welche Indizes verwenden?

8

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?

    
Abe Miessler 11.02.2010, 21:07
quelle

5 Antworten

2

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%     
gbn 11.02.2010, 21:16
quelle
2

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%     
Remus Rusanu 11.02.2010 22:47
quelle
1

Wenn ein Indexname angegeben wird, gibt dies die gesamte Definition jedes Proc (in "gesamte_Abfrage") und die tatsächliche SQL-Anweisung in diesem proc zurück, die den Index (in "query") verwendet. Beachten Sie, dass es sehr langsam läuft!

%Vor%     
Brock 16.07.2013 21:27
quelle
0

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.

    
Jesse Weigert 11.02.2010 21:12
quelle
0

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:

%Vor%

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 ...

    
Guy 11.02.2010 21:38
quelle