sql-server-perfomance-issues-blog-hero

SQL Server
Lösungen für die 5 häufigsten Performance-Probleme

SQL Server: Lösungen für die 5 häufigsten Performance-Probleme

Im Umgang mit SQL Server kämpfen viele IT-Administratoren immer wieder mit ähnlichen Problemen und Fehlern. Schluss damit! Wir analysieren anhand von konkreten Fallbeispielen die 5 häufigsten Performance-Probleme und zeigen adäquate Lösungen auf.

Fehler sind menschlich und vielfach nicht durch Unwissenheit begründet. Insofern möchte ich Datenbank-Administratoren (DBAs) keineswegs an den Pranger stellen. Vielmehr möchte ich eine Lanze für all jene IT-Administratoren brechen, die neben Datenbanken zusätzlich noch Windows Server, Netzwerke, Storage, einzelne Applikationen, Virtualisierungstools und vieles mehr betreuen müssen. Oftmals ist ihr Verantwortungsbereich thematisch so umfangreich, dass sie sich nicht ausreichend in die einzelnen Themen einarbeiten können.

Insbesondere das Thema Performance ist ein Aspekt vom SQL Server, der vielfach unter den Tisch fällt, sei es bei der Einarbeitung oder für die einmalig durchzuführende, gut durchdachte Installation und Konfiguration einer Instanz. Die ersten beiden Probleme sind zwar hinsichtlich der Kundenaussage identisch, die Ursache ist jedoch unterschiedlich.


Analyse

Der erste Schritt bei einer solchen Aussage ist für mich immer die Überprüfung der gruppierten und nicht gruppierten Indizes, genauer: deren Fragmentierung. Das folgende Skript liefert für jeden Index seinen Namen, den Namen und das Schema der Tabelle, für die er angelegt ist sowie den Grad der Fragmentierung und die Seitenanzahl des Index. Aufgrund der Einschränkungen innerhalb der WHERE-Klausel werden nur zu pflegende Indizes, d.h. Indizes ausreichender Größe, ausreichender Fragmentierung und der zu pflegenden Typen angezeigt. Gerade bei großen, viel genutzten Datenbanken sollte die Ausführung dieses Skripts innerhalb eines Wartungsfensters liegen, da der Wert für die durchschnittliche Fragmentierung zur Laufzeit bestimmt wird.

Image 1 - Problem 1 - Meine Anwendung wird immer langsamer

Columnstore Indizes sind oftmals noch nicht relevant, ihre Fragmentierung kann in der dynamischen Verwaltungssicht (DMV, Dynamic Management View) z.B. anhand gelöschter Einträge und der Gesamtzahl der Einträge berechnet werden.

Image 2 - Problem 1 - Meine Anwendung wird immer langsamer

Lösung

In den Fällen, in denen an dieser Stelle Indizes angezeigt werden, muss geprüft werden, inwieweit Wartungspläne zu deren Pflege existieren und wie oft diese ggf. durchgeführt werden. Dementsprechend sollte ein Wartungsplan neu erstellt bzw., wenn möglich, öfter ausgeführt werden. SQL Server liefert für die Neuerstellung und das Neuorganisieren jeweils einen leider kaum zu konfigurierenden Wartungsplan mit. Eine weitere Möglichkeit sind eigene oder schon zur Verfügung stehende Skriptlösungen. Ich empfehle meinen Kunden die Verwendung und Anpassung der Lösung von Ola Hallengren. In Einzelfällen kann auch die Anpassung des Standardfüllfaktors für Indizes Abhilfe schaffen. Dabei sollte allerdings beachtet werden, dass dies eine instanzweite Konfigurationsoption ist und somit für alle Datenbanken gilt.

Analyse

Natürlich habe ich bei dieser vertrauten Aussage das Skript aus dem ersten Beispiel verwendet. Es wurden keine zu pflegenden Indizes angezeigt. Alles in Ordnung also, an den Kunden gewandt meinte ich: „Ihre Indizes sind gepflegt.“, worauf mir der Kunde verwundert mit „Nein?!“ antwortete. Ein Blick auf die eingerichteten Jobs bestätigte seine Zweifel, die Abfrage

Image 3 - Problem 2 - Meine Anwendung wird immer langsamer

lieferte nur Ergebnisse folgender Art:

object_id name index_id type type_desc ...
8 NULL 0 0 HEAP ...
149575571 NULL 0 0 HEAP ...
565577053 NULL 0 0 HEAP ...
...

An dieser Stelle stößt selbst der beste DBA an seine Grenzen. Wo nur Heaps, also keine Indizes zu pflegen sind, kann er dies auch nicht tun.  

Analyse

Ein erster Blick auf die Umgebung unter Verwendung des Performance Monitors (entsprechende Counter in Klammern) ergab: 

  •  8GB RAM installiert

  • ca. 4GB RAM verfügbar (Memory\Available Mbytes)

  • CPU kaum ausgelastet (Processor\%ProcessorTime)

  • SQL Server und Reporting Services sind installiert.

Bis hierhin deutete nichts auf Performance-Probleme hin. Nur die parallele Installation von SQL Server und Reporting Services wird nicht empfohlen.

Ein Blick auf die Auslagerungsdatei (Paging File\%Usage) offenbarte allerdings das Problem. Die Datei wurde sehr stark genutzt. Ursache waren 7GB maximal zulässiger Arbeitsspeicher für SQL Server. Diese wurden bei einem monatlich stattfindenden Import-Prozess benötigt und daher reserviert und nicht wieder freigegeben. Für das Betriebssystem sowie Reporting Services standen somit nur insgesamt 1GB zur Verfügung, daher auch die hohe Auslastung der Auslagerungsdatei beim Aufruf von Reporting Services. 

Analyse

Die betroffene Anwendung generiert erwartungsgemäß aus vorhandenen 10GB Daten zusätzliche 20GB. Übliche Performance-Counter (Arbeitsspeicher, CPU) zeigen eher eine geringe Auslastung. Allerdings war die Datendatei ursprünglich 10GB groß und mit einem automatischen Wachstum von 1MB konfiguriert. Dies führte dazu, dass in 1MB-Schritten Daten geschrieben, Speicherplatz reserviert und mit Nullen überschrieben wurde. 

Analyse

Durch Memory Ballooning wurde der der virtuellen Maschine (VM) zugeordnete Speicher um zwei Drittel reduziert.

Zusammenfassung

Ich hoffe ich konnte an dieser Stelle verdeutlichen, dass Performance-Probleme mit SQL Server nicht notwendigerweise komplexe Ursachen haben müssen und vor allem, dass DBAs diesbezüglich ihre Hausaufgaben (Indexpflege, korrekte Konfiguration des maximalen Arbeitsspeichers der Instanz, korrekte Konfiguration der VM usw), die kurz mit „Lesen, Verstehen und Anwenden von Best Practices“ umschrieben sind, kennen sollten.

SQL Server 2016 – Training und Zertifizierungen

Sie möchten sich im Bereich SQL Server 2016 schulen lassen? Die Akademie bietet eine intensive Einführung in die neuen Features des SQL Server 2016 sowie Experten-Anwenderschulungen und Zertifizierungen an.

Alle Kursdetails, Anmeldeinformationen und weitere Kurse finden Sie auf der Akademie-Website.


Zur Akademie
  • Montag 19 Juni 2017

Kommentieren Sie diesen Artikel

Hinterlassen Sie einen Kommentar, um uns mitzuteilen, was Sie von diesem Thema halten!

Kommentar hinterlassen

Autor

Frank Sander, Author SoftwareONE Blog

Frank Sander SQL Server Consultant

Computer scientist working in the field of SQL server consulting and databases

Related Articles

  • 19 November 2019
  • SoftwareONE Redaktionsteam
  • Publisher Advisory, Managed Cloud
  • Managed Service, Azure

Diese PaaS-Lösung skaliert schnell: Open Shift on Azure als Managed Container Platform

Die Managed Container Platform von SoftwareONE bietet eine PaaS-Lösung zur modernen Softwareentwicklung. Erfahren Sie mehr zu Vorteilen und Funktionsweisen.

  • 12 November 2019
  • SoftwareONE Redaktionsteam
  • Publisher Advisory
  • Adobe, Acrobat

Acrobat DC: Neue Funktionen für effiziente Workflows und mobiles Arbeiten

Acrobat DC erhält mit dem Herbst-Update 2019 neue Funktionen, die den Wandel weiter in 100% digital treiben. Erfahren Sie, welche Funktionen das sind.

  • 07 November 2019
  • Stephan Schaare
  • Unified Communications, Publisher Advisory
  • Microsoft, Teams, Office 365

Microsoft Teams in Kombination mit anderen Office-365-Diensten

Mit Microsoft Teams lassen sich auch weitere Office-365-Dienste nutzen und verbinden. Erfahren Sie, welche Dienste konkret wie nutzbar sind.