Die Grundlagen der Datenbankleistung

17. November 2021

Datenbanken spielen eine entscheidende Rolle für den Unternehmenserfolg. Schließlich dienen sie der Verwaltung von einem ihrer wichtigsten Assets: Daten. Die Datenbankleistung muss für IT-Experten daher höchste Priorität haben. Damit sie eine hohe Performance erreichen können, müssen sie verstehen, wie eine Datenbank funktioniert, und wissen, was überwacht werden sollte. Deshalb wollen wir einen Blick auf einige grundlegende Probleme im Bereich Datenbankleistung werfen.

Der Arbeitsspeicher spielt für die Datenbankleistung eine zentrale Rolle. Die Datenbank-Engine verfügt über eine eigene Arbeitsspeicherverwaltung und Datenbanken haben interne Betriebssysteme, die den Datenabruf verwalten. Somit nutzen Datenbanken automatisch so viel Arbeitsspeicher wie nötig.

Direkt auf den Datenträger zu lesen und zu schreiben ist im Vergleich zum Arbeitsspeicherzugriff langsam, weshalb Datenbank-Engines den Arbeitsspeicher-Cache so intensiv wie möglich nutzen. Datenbanken haben einen Puffer-Cache, in dem häufig oder kürzlich verwendete Datenblöcke gespeichert werden, sodass die Engine diese Seiten nicht vom Datenträger abrufen muss.

Wenn die Datenbank-Engine nicht mehr genug Arbeitsspeicher hat, nutzt sie eine temporäre Datenbank (oder eine Datei im Dateisystem), um die Aufgabe abzuschließen. Dies ist vergleichbar mit einem Systemprozess, der auf die Festplatte ausgelagert wird. Für die Gesamtleistung ist das nicht ideal. Diese Situation lässt sich vermeiden, indem die Arbeitsspeichernutzung überwacht und Datenbankabfragen so erstellt und ausgeführt werden, dass das System weniger Ressourcen benötigt. Häufig kann die Performance auch durch das Aufrüsten des Arbeitsspeichers verbessert werden, sofern der Arbeitsspeicher der Engpass war.

Was macht die CPU?

Die CPU ist eine weitere für die Datenbankleistung entscheidende Ressource. Wenn der Datenbankserver eine hohe CPU-Auslastung aufweist, ist im Allgemeinen etwas nicht optimiert. Vielleicht geht es um etwas so Einfaches wie die Indizierung, oder die Workload ist selbst für eine optimierte Datenbank zu groß. Inaktive Verbindungen können sich negativ auf die Leistung auswirken: Sie beanspruchen Arbeitsspeicher und CPU-Ressourcen und beeinträchtigen insgesamt die Nebenläufigkeit.

Wenn die CPU-Auslastung höher ist als gewünscht, sollte man die Datenbank-Engine unter die Lupe zu nehmen: Dabei gilt es, die Abfragen mit der höchsten CPU-Auslastung zu identifizieren und nach Optimierungsmöglichkeiten zu suchen. Zusätzlich sollte man nach Abfragen suchen, die häufig ausgeführt werden und jedes Mal CPU-Ressourcen beanspruchen. Optimiert man diese kleineren Abfragen, sinkt die gesamte CPU-Auslastung und kann den sogenannten „Tod durch tausend Schnitte“ verhindern.

Performance durch Indizierung

Bei der Datenbankleistung geht es um mehr als nur Arbeitsspeicher und CPU. Für eine bessere Leistung spielen auch ein effizientes Abfragen- und Datenbankdesign und die effiziente Indizierung eine Rolle.

Ein Index ist ein Bestandteil einer in einer Datenbank vorhandenen Tabelle. Indizes bestehen aus einer oder mehreren Tabellenspalten und umfassen nicht notwendigerweise alle Zeilen. Der Index ist mit der Tabelle verknüpft: Wenn Daten eingefügt, aktualisiert oder gelöscht werden, wird dies im Index berücksichtigt, bevor die Transaktion von der Datenbank als abgeschlossen gekennzeichnet wird.

Ohne Indizes würde die Datenbank-Engine jede Zeile in jeder in der Abfrage angeforderten Tabelle scannen. Transaktionen, die Daten löschen, aktualisieren oder einfügen, würden andere Abfragen blockieren. Indizes reduzieren die E/A-Menge für Vorgänge enorm. Sie kompensieren den Aufwand von Lese- und Schreibaktivitäten und beschleunigen infolgedessen die Abfrageausführung.

Die Vorteile der Indizierung für die Leistung einer Datenbank sind offensichtlich. Dennoch ist es wichtig, die Verhältnismäßigkeit im Blick zu behalten: Es ist nicht nötig, alles zu indizieren. Ineffiziente Indizes verursachen mehr Arbeit für die Datenbank-Engine und führen zu Leistungsproblemen. Man sollte sich stattdessen auf die Indizierung der Bereiche in der Datenbank konzentrieren, die am stärksten davon profitieren, beispielsweise häufig genutzte Spalten.

Man wird immer noch mehr Möglichkeiten zum Optimieren Ihrer Datenbankleistung finden, aber mit diesen Grundlagen sieht man bereits, welche Ressourcen verwendet werden und an welchen Stellen Engpässe entstehen.

Thomas LaRock ist Head Geek bei SolarWinds.

SolarWinds

Lesen Sie auch