Kaufe Zeit für Zeit

Performanceoptimierung ist ein weites Feld und in Teilen auch eine hochspezialisierte Sache. In meinem ersten Post hier zu diesem Thema möchte ich mich der Performanceoptimierung als erstes mal theoretisch nähern, denn ich finde es ist sehr hilfreich sich dieses bei der Suche nach einer optimalen Lösung vor Augen zu führen, da man andernfalls droht sich in den Details zu verlieren.

Meine Grundsatzthese zur Performanceoptimierung ist, dass Performanceoptimierung immer bedeutet Zeit mit Zeit zu kaufen. Es ist also ein Handel, bei dem es keine (oder nur sehr wenige) „immer richtige“ Entscheidungen gibt.
Auch hierfür möchte ich mich einer Analogie bedienen um dieses Prinzip klar zu machen und was sollte das beim Thema anderes sein als ein Formel 1 Rennwagen.
Die Performanceanforderungen an einen Formel 1 Rennwagen sind relativ klar. Man muss möglichst geringe Rundenzeiten fahren können und dabei möglichst wenig Ressourcen (z.B. Reifen, Benzin) verbrauchen um diese Spitzenleistungen auch möglichst konstant erzielen zu können.
Auf den ersten Blick scheint es Parameter zu geben, die quasi immer „gut“ sind. So ist eine hohe Leistungsstärke des Motors beispielsweise immer von Vorteil. Weniger Gewicht scheint auch immer gut zu sein. Aber schaut man genauer hin, so haben alle Faktoren immer eine Wechselwirkung mit anderen oder der jeweils erwachsende Vorteil aus einer Eigenschaft steigt nicht Linear mit der Vergrösserung/Verkleinerung dieser Eigenschaft. Ist die Kraft des Motors beispielsweise so gross und das Fahrzeug so leicht, dass die Reifen schon beim kommen lassen der Kupplung durchdrehen, so ist die viele Kraft nicht nur nutzlos, sondern in diesem Extremfall kontraproduktiv. „Der Wagen bringt seine PS nicht auf die Straße“ sagt man dann Umgangssprachlich.
Die optimale Performance erziele ich also, wenn ich den optimalen Kompromiss zwischen Gewicht und Antriebskraft finde und nicht wenn ich das leichtest mögliche Auto mit dem stärsten möglichen Motor kombiniere.
Nun ist zumindest in der Formel 1 die mögliche Höchstgeschwindigkeit auch nur ein Aspekt, mit dem alleine man keine guten Rundenzeiten erzielen kann. Am deutlichsten wird dies beim feintuning eines Formel 1 Fahrzeugs. Die Aufgabe der Flügel ist es Abtrieb zu erzeugen, also das Fahrzeug mit Luftdruck quasi an den Boden zu pressen. Jeh öher dieser Anpressdruck ist, umso höher ist auch der Luftwiederstand des Fahrzeugs. Es wird also mehr Kraft benötigt um das Fahrzeug zu bewegen. Da der Motor während der Fahrt aber nicht austauschbar ist, steht während einer Runde bzw. eines Rennens immer nur die gleiche Kraft zur Verfügung.
Je mehr Abtrieb wiederum das Fahrzeug hat, desto schneller kann es durch Kurven fahren, da der Abtrieb das Fahrzeug quasi an die Straße presst.
Findet ein Rennen nun auf einem Kurs mit sehr vielen Kurven und wenigen Geraden statt, so wird also viel Anpressdruck benötigt, um die Kurven schnell fahren zu können. Diese Zeit verliert man dann auf der Geraden, weil der erhöhte Lufzwiederstand dazu führt, dass die Beschleunigung und damit auch die Höchstgeschwindigkeit gebremst werdrn. In diesem Beispiel kauft man sich also die Zeit in der Kurve mit der Zeit auf der Geraden und besteht die Strecke aus vielen Kurven wird man unter dem Strich schneller sein als mit flachen Flügeln.
Auf einem Kurs mit wenig Kurven und viel gerader Strecke wird es also entsprechend genau umgekehrt sein. Es kommt also immer auf die spezifische Anforderung bzw. das Nutzungsprofil an, welche Einstellung die Beste ist.

Natürlich gibt es auch Parameter, die immer von Vorteil sind. Dies sind aber i.d.R. Dinge, die man als Fehler betrachten muss. Würde man beispielsweise einen Dachgepäckträger auf das Auto bauen, so hätte dieser für ein Rennen vermutlich ausschliesslich Nachteile und niemals Vorteile. Diesen Wegzulassen wäre also immer Richtig. Aber es war eben von vorneherein ein Fehler diesen zu verbauen.

Gut, aber was hat alles das mit Performance an IT Systemen zu tun? Nun die beschriebenen Prinzipien sind hier genau die gleichen. Die Anforderungen und die benötigten Ressoucen sind andere. Ein Beipsiel, dass der Analogie mit den Flügeln beim Formel 1 Fahrzeug nahe kommt ist die Verwendung von Indexen in Datenbanken. Diese haben viele als das Performance-Allheilmittel für Performanceprobleme bei Datenbanken im Kopf. Ein Index ist eine Art Inhaltsverzeichnis für Daten in einer oder mehreren Spalten einer Datenbanktabelle.
Sucht man nun nach bestimmten Inhalten, so hilft ein Index um die gewünschten Informationen schneller finden zu können. Entsprechende Abfragen werden also schneller.
Jedoch muss die Datenbank jedesmal wenn sich die Daten in den betreffenden Spalten ändern nicht nur die eigentlichen Daten ändern, sondern auch die Informationen in dem Index. Ändern und Einfügen wird folglich mit dem Index langsamer.
Bei einer Tabelle, die sehr viel geändert wird aber sehr selten abgefragt wird, ist der Index also unter dem Strich keine Performanceverbesserung sondern das Gegenteil ist der Fall.
Man sieht also, dass es immer auf die Anforderung bzw. das Nutzungsprofil ankommt, welche Optimierungsmassnahme tatsächlich von Vorteil ist.
Eine bekannte Softwarekomponente, die diesem Prinzip sehr stark Rechnung trägt ist der „Query-Otimizer“. Die Komponente in einem RDBMS, die bei jeder Abfrage neu entscheidet, auf welche Weise sie das gestelle Problem lösen möchte. Aber hierüber alleine könnte ich noch einen ganzen Haufen Artikel schreiben. Und das werde ich in Zukunft auch bestimmt noch machen

2 Gedanken zu “Kaufe Zeit für Zeit”

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.