Startseite » SQL Server – so verbessern Sie die Performance einer Datenbank

SQL Server – so verbessern Sie die Performance einer Datenbank

by Daniel Rottländer
SQL Server - Strategien und Techniken zur Verbesserung der Performance

SQL Server – Strategien und Techniken zur Verbesserung der Performance

Mit SQL-Anweisungen lassen sich mühelos Daten aus allen Datenbanken abrufen. Wer bereits Erfahrung mit Datenbankabfragen hat, kennt vermutlich das Problem langsam laufender Anfragen. Diese Verzögerungen können durch eine hohe Systemauslastung verursacht werden. Häufiger jedoch liegt es daran, dass die Abfragen nicht optimal formuliert sind und daher ineffizient arbeiten. Abfragenoptimierung ist aber nur ein Aspekt: Es gibt noch weitere Möglichkeiten, um die Performance einer Datenbank zu verbessern.

Ob Microsoft SQL Server 2019 oder Microsoft SQL Server 2022, in diesem Blogbeitrag geben wir praktische und hilfreiche Tipps an die Hand.

SQL-Datenbanken – die wichtigsten Informationen zusammengefasst

Relationale Datenbanksysteme (RDBMS), die als SQL-Datenbanksysteme (SQL-DBMS) bekannt sind, werden typischerweise über eine SQL-Schnittstelle verwaltet, wobei SQL für Structured Query Language steht. Ein bekanntes Beispiel für eine solche Datenbank ist Microsoft SQL Server. In relationalen Datenbanksystemen werden Daten in Tabellen organisiert, die aus Spalten und Zeilen bestehen, wobei Beziehungen, sogenannte „Relationen“, zwischen den Tabellen definiert werden. Beispielsweise könnte eine Tabelle die aktuellen „Projekte“ eines Unternehmens enthalten, während eine andere Tabelle die „Kunden“ auflistet. Zwischen diesen Tabellen besteht eine 1:n-Beziehung, da für einen Kunden mehrere Projekte existieren können.

Jede SQL-Implementierung, die dem Standard entspricht, muss einen Teil der im ISO/IEC 9075:2016 Standard definierten Funktionen unterstützen, während andere Funktionen optional sind.

Datenbankdesign – auf den Aufbau kommt es an

Ein schlechter Datenbankentwurf wirkt sich negativ auf die Performance aus. Stark normalisierte Datenbanken haben oft komplexe relationale Verknüpfungen, die zu längeren Abfragezeiten und höherem Verbrauch von Systemressourcen wie CPU, RAM und Festplatten-I/O führen.

Eine hochgradig normalisierte Datenbank kann die Performance eines SQL-Servers und der gesamten Datenbankinfrastruktur negativ beeinflussen. Die gängige Regel für das Verfassen effizienter Abfragen besagt daher, dass eine Neugestaltung der Datenbank erforderlich ist, wenn eine Operation das Verknüpfen von fünf oder mehr Tabellen benötigt.

Doppelte und redundante Indizes vermeiden

Indizes können viele Leistungsprobleme lösen, aber eine Überzahl kann zusätzliche Belastungen verursachen, insbesondere bei Tabellen, die oft aktualisiert werden. Der SQL Server muss zusätzliche Arbeit leisten, um diese Indizes bei Einfügungen, Aktualisierungen und Löschungen aktuell zu halten, was bedeutet, dass die Datenbank-Engine mehr Zeit benötigt, um Daten in den Tabellen zu aktualisieren. Außerdem kann die Wartung der Indizes die CPU- und I/O-Auslastung erhöhen, was die Leistung in schreibintensiven Systemen beeinträchtigen kann.

Deshalb ist es ratsam, doppelte und überflüssige Indizes zu entfernen, um die Belastung der Systemressourcen zu minimieren. Auf SQL Servern kann die dynamische Verwaltungsansicht sys.dm_db_index_usage_stats eingesetzt werden, um ungenutzte Indizes zu erkennen. Diese liefert Statistiken darüber, wie Indizes in der Abfrageverarbeitung eingesetzt werden. Eine weitere Möglichkeit bietet der Database Engine Tuning Advisor (DTA), der ebenfalls dabei helfen kann, nicht genutzte Indizes aufzuspüren.

SELECT* – nicht immer optimal

Wenn Sie nur einige wenige Spalten aus einer Tabelle benötigen, sollten Sie SELECT* vermeiden. Auch wenn es bequemer ist, verlängert es die Ausführungszeit der Abfrage. Durch die Auswahl nur der benötigten Spalten verringern Sie die Größe des Resultats, reduzieren den Netzwerkverkehr und verbessern die Gesamtleistung der Abfrage.

So ist zum Beispiel „SELECT CustomerID FROM Sales.Kunden;“ in Bezug auf die Performance effizienter als „SELECT * FROM Sales.Kunden;“.

HAVING-Klausel sinnvoll einsetzen

Verzichten Sie auf die Verwendung einer HAVING-Klausel in SELECT-Anweisungen. Die HAVING-Klausel wirkt wie ein Filter, ist jedoch in einer SELECT-Anweisung oft unnötig. Sie durchläuft die endgültige Ergebnistabelle der Abfrage und überprüft die Zeilen auf die HAVING-Bedingung, was ineffizient sein kann.

Weniger JOINs = mehr Performance

Wenn man in einer Abfrage mehrere Tabellen hinzufügt und verbindet, kann das die Leistung des Systems erheblich beeinträchtigen. Das Abrufen von Daten aus vielen Tabellen könnte zu einem ineffizienten Ausführungsplan führen. Der Optimierer für SQL-Abfragen muss herausfinden, in welcher Weise und Reihenfolge die Tabellen verknüpft werden sowie den Zeitpunkt und die Art der Anwendung von Filtern und Aggregaten bestimmen.

Um effizientere Abfragepläne zu erstellen, kann die Technik der JOIN-Eliminierung nützlich sein. Diese Methode teilt eine komplexe Abfrage in mehrere einfachere Abfragen auf, die später integriert werden. Durch diesen Ansatz werden überflüssige JOINs, Unterabfragen und Tabellen entfernt, was die Abfrageleistung verbessert.

Schreibvorgänge minimieren – wichtig für die Performance

Das Schreiben, Modifizieren, Löschen oder Importieren großer Datenmengen kann die Leistung von Abfragen beeinträchtigen und sogar zu einer Blockade der Tabelle führen. Solche Vorkommnisse treten auf, wenn Datenänderungen vorgenommen werden oder neue Indizes, Überprüfungsbeschränkungen und Trigger bearbeitet werden müssen. Zudem führen große Datenmengen zu einer Expansion der Protokolldateien. Obwohl umfangreiche Schreibaktivitäten nicht immer zu schwerwiegenden Leistungsproblemen führen, ist es wichtig, sich der potenziellen Auswirkungen bewusst zu sein und auf unvorhergesehenes Verhalten vorbereitet zu sein.

Zur Optimierung der Leistung auf SQL-Servern kann der Einsatz von Dateigruppen hilfreich sein. Diese ermöglichen es, Daten über verschiedene physische Festplatten zu verteilen und dadurch die Geschwindigkeit von gleichzeitig stattfindenden Schreibvorgängen zu steigern. Weiterhin kann die Leistung durch Methoden wie Kompression und das Aufteilen von Daten verbessert und die Kosten für große Schreiboperationen reduziert werden.

Das könnte Ihnen auch gefallen