Der Geschwindigkeitsunterschied ist überwältigend. Durch horizontale Skalierung kann man die Auswirkungen oberflächlicher Indizierung kaum kompensieren. Selbst wenn man die Antwortzeit durch Hardware so weit verbessern könnte, wäre es doch fraglich, ob zusätzliche Hardware die beste Lösung für solche Probleme ist.
Viele der sogenannten NoSQL-Systeme argumentieren aber gerade damit, dass sie sämtliche Performance-Probleme durch horizontale Skalierung lösen können. Diese Skalierbarkeit beschränkt sich im Wesentlichen auf Schreiboperationen und wird durch Abschläge bei der Datenkonsistenz erreicht („letztendliche Konsistenz“, engl. eventual consistency). SQL-Datenbanken garantieren aber eine strikte Konsistenz. Dadurch wir die Antwortzeit für Schreiboperationen zwar erhöht, der Durchsatz muss sich aber nicht unbedingt reduzieren. Mehr dazu im Kasten „Konsistenz-Modelle und das CAP-Theorem“.
Meistens verbessert zusätzliche Hardware die Antwortzeiten nicht. Ein System kann dadurch sogar langsamer werden, weil zusätzliche Latenzen anfallen. Wenn die Applikation und die Datenbank auf demselben Server installiert sind, spielen Netzwerk-Latenzen zum Beispiel keine Rolle. Eine derartige Konfiguration ist bei Produktionssystemen aber selten – dort verwendet man dezidierte Hardware für die Applikation und die Datenbank. Manche Sicherheitsrichtlinien erfordern sogar eine Firewall zwischen dem Applikations-Server und der Datenbank. Je komplexer die Infrastruktur wird, desto mehr Latenzen akkumulieren sich, desto langsamer werden die Abfragen. Auch das führt immer wieder zur scheinbar widersprüchlichen Beobachtung, dass die teure Produktionshardware langsamer ist als der Desktop PC, der bei der Entwicklung verwendet wurde.
… meine Newsletter bestellen, gratis Sticker erhalten, mein Buch kaufen oder an einer Schulung teilnehmen.
Eine weitere wichtige Latenz sind die Suchzeiten von Festplatten. Rotierende Festplattenlaufwerke (HDD) benötigen in der Regel einige Millisekunden, um die beweglichen Teile so zu platzieren, dass die gewünschten Daten gelesen werden können. Beim Durchwandern eines Indexbaumes mit vier Schichten tritt diese Latenz dann schon viermal auf – insgesamt etliche Millisekunden. Das ist zwar eine halbe Ewigkeit für einen Computer, aber immer noch weit unter der Wahrnehmungsgrenze eines Menschen – solange man es nur einmal macht. Mit einer einfachen SQL-Abfrage kann man aber auch hunderte oder gar tausende Festplattenzugriffe auslösen. Insbesondere, wenn man mehrere Tabellen mit einer Join-Operation verbindet. Obwohl dieses Problem durch Caching verringert wird und neue Technologien, wie SSD, wesentlich geringere Suchzeiten haben, stehen Join-Operationen nach wie vor im Generalverdacht langsam zu sein. Daher behandelt das nächste Kapitel, wie man Join-Operationen indiziert.
Performance hat zwei Dimensionen: Antwortzeit und Durchsatz.
Mehr Hardware verbessert die Antwortzeit meistens nicht.
Sorgfältige Indizierung ist die beste Methode, Antwortzeiten zu verbessern.
NoSQL, eventual consistency und Brewer’s CAP Theorem bei Wikipedia
Artikel: „Choosing NoSQL For The Right Reason“
SQL Performance Explained — mein Buch über SQL-Indizierung.
Du kannst nicht alles an einem Tag lernen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS um sukzessive aufzuholen. Und sieh dir auch modern-sql.com an.
Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how