Donnerstag, 9. Juni 2016

SQL Server Missing Indexes Feature – Vorsicht!

Dieser kurze Post richtet sich primär an DBAs und Entwickler, welche vielleicht gerade damit begonnen haben sich mit dem Themen SQL Server, Performance Optimierung usw. zu beschäftigen.

Vielen dürfte das Missing Index Feature bekannt sein. Der Query Plan wird bei der Kompilierung durch den Query Optimizer um einen Index Vorschlag angereichert.

https://technet.microsoft.com/en-us/library/ms345417(v=sql.105).aspx 

Dieser Vorschlag wird auch prominent im Management Studio dargestellt.

image

Diese “Empfehlungen” entstehen im Bruchteil einer Sekunde beim Kompilieren eines SQL Statements. Und beziehen sich einzig allein das eine Statement bzw. die eine Prozedur. Schauen also nicht nach links und rechts.

Ich sehe in ihnen eher den plakativen Hinweis, dass selbst dem Query Optimizer in der Kürze der Zeit aufgefallen ist, dass es deutliches Potenzial gibt. Mehr sollte es nicht sein.

Also nicht jeden Vorschlag unreflektiert umsetzen! Ist ja eigentlich klar, oder?

Nun durfte ich bei einem Kunden die Erfahrung machen, dass im Internet (es ist doch böse, wusste es immer…) Skripte zu finden gibt, welche den Plancache des SQL Server für eine komplette Instanz auslesen, die Missing Indexes Informationen extrahieren und automatisch ALLE Empfehlungen umsetzen. Es werden also in allen Datenbanken einer Instanz ungeprüft neue Indexe erzeugt.

Das mag auf den aller ersten Blick ja eine super Idee sein, nur so hat selbst Microsoft dieses Feature nicht gemeint. Viel hilft nicht immer viel…

Indexe, speziell sogenannte abdeckende Indexe, sind eine gewollte Form der Redundanz von Daten. Es wird also Speicher belegt und Indexe müssen auch bei Schreibvorgängen gepflegt werden. Speziell komplexere Systeme wie zum Beispiel ein SharePoint mögen so etwas gar nicht.

Bei diesem Kunden führte eine solche “Maßnahme” dazu, dass quasi alle Anwendungen danach deutlich langsamer liefen als vorher. Von dem plötzlichen Wachstum um 2/3 auf dem Storage ganz zu schweigen.

Ich verzichte bewusst auf eine Verlinkung zu den Skripten, um diese nicht noch relevanter zum Thema erscheinen zu lassen.