Index in SQL Ablaufverfolgung auslesen

Jasta

Neuer Benutzer
Beiträge
2
Hallo Community,

erstmal vielen Dank für die Aufnahme in die Community. Ich wende mich auch gleich mit einem Problem an euch, welches mir zzt. Kopfzerbrechen bereitet. Ich habe zwei identische Datenbanken mit unterschiedlichen Indizes auf einer Tabelle.
Auf einer Datenbank scheint das System den Index korrekt anzuwenden und die Query wird in einer für den Job als üblich anzusehenden Geschwindigkeit abgebildet. Auf der anderen Datenbank benötigt der Job allerdings zig mal so lange wie üblich. Ich vermute, dass das System den Index nicht korrekt verwendet und würde zur weiteren Fehleranalyse nun gern herausfinden welchen Index die Systeme verwenden um einen fehlerhaften Index neu erstellen zu lassen.
Davon erhoffe ich mir dann eine Verbesserung der Performance.

Wenn mir also jmd. einen Weg aufzeigen könnten in dem ich herausfinden kann welcher Index (vlt über die SQL Ablaufverfolgung) in der Abfrage genutzt wird, könnte ich den Weg wie oben beschrieben gehen.

Für andere Lösungsansätze bin ich natürlich offen.

Vielen Dank im Voraus und allen eine angenehme Woche.

Beste Grüße,
Jasta
 
Werbung:
Mahlzeit :)

erstmal willkommen hier! :)

Bei solchen dingen schaue ich mir zuerst die Query an sich an. Was habe ich im SELECT/WHERE usw... Das hilft um sich danach die Indizes anzuschauen. Deine Indizes müssen ja, so meine Vermutung, einen deutlichen Unterschied aufweisen. Das würde auch erklären warum die selbe(?) Query einmal schnell und auf der anderen Seite langsam ist.

Für weitere Analysen bräuchten wir schon mehr Infos. die Query, Script der Indizes usw
 
ziemlich naheliegend wäre auch ein Explain der Queries, also die gleiche Query auf dem einen und auf dem anderen System "explained"
 
Hallo Jasta,

lass dir bei deiner Abfrage im SQL Server Management Studio mal den aktuell genutzten Ablaufplan anzeigen.
In diesem werden alle Vorgänge der Abfrage angezeigt. Da kannst du dann sehen, welcher Index genutzt wird. Wenn ein Index fehlt oder ein bestehender für die Abfrage nicht sinnvoll nutzbar ist, wird sogar ein Vorschlag für einen neuen Index gemacht.

Einen Ablaufplan lesen ist nicht ganz so einfach, es ist aber recht schnell zu erkennen, ob ein Index korrekt genutzt wird.
Wenn du zwei identische Abfragen auf unterschiedlichen Datenbanken hast, kannst du so natürlich auch diese Ablaufpläne vergleichen und so Perfomance-Issues erkennen.
Hier erst mal ein Screenshot, wo der Ablaufplan im Management-Studio angezeigt werden kann:

upload_2021-7-28_14-9-1.png

und dann noch ein Ausschnitt eines Ablaufplanes, in dem man sieht, welcher Index genutzt wird (Wenn man im Ablaufplan im SQL Server Management Studio mit der Maus auf ein Element fährt, werden noch zusätzliche Details angezeigt):

upload_2021-7-28_14-10-37.png

und dann natürlich noch ein Link zu Microsoft, auf der man eine Beschreibung der Ablauf-Elemente bekommt:
Referenz zu logischen und physischen Showplanoperatoren - SQL Server | Microsoft Docs
Vergleichen und Analysieren von Ausführungsplänen - SQL Server | Microsoft Docs


Viele Grüße,
Tommi
 
Hallo Tommi,

vielen Dank, das hilft mir schon weiter. Ich habe bei beiden Ablaufplänen einen Clustered Index der offenbar nur aus dem Primary Key besteht. Jetzt verstehe ich nicht, warum der Server diesen verwendet, wenn er doch noch wesentlich "bessere" hätte und die Abfragebedingung zumindest noch einen Datumsbereich sowie einen Lagerort umfasst. Wäre da nicht eine Index der diese Felder umfassen würde deutlich performanter?

Viele Grüße zurück,
Jasta
 
Werbung:
Die Optimizer von Datenbanken verballern eine Menge Logik für die Bestimmung des "besten" Ausführungsplanes. Dabei werden z.B. auch Mengengerüste berücksichtigt. Was alles in SQLServer geht, weiß ich nicht.
Bei Oracle Database kann man z.B. mit Optimizer Hints in Abfragen dem O in A treten.

Was Du noch nicht gesagt hast, wie sich die Indizierung auf den beiden Systemen unterscheidet oder?
 
Zurück
Oben