20-mal schnellere PostgreSQL-Hash-Partitionierung: Umgehung der Katalogsuche

2025-08-27
20-mal schnellere PostgreSQL-Hash-Partitionierung: Umgehung der Katalogsuche

Die PostgreSQL-Hash-Partitionierung verursacht bei Anwendungen mit hohem Durchsatz einen Overhead bei der Katalogsuche. Dieser Artikel beschreibt eine Optimierungstechnik, die die Katalogsuche von PostgreSQL umgeht, indem Partitionsindizes in der Anwendungsebene vorkalkuliert werden. Die Verwendung des Ruby-Gems `pg_hash_func` oder der direkte Aufruf der Hash-Funktionen von PostgreSQL kann Abfragen um mehr als das 20-fache beschleunigen und die Latenz deutlich reduzieren. Dieser Ansatz eignet sich für performancekritische Szenarien und bietet mehr Möglichkeiten, Einfachheit und Performance auszubalancieren.

Mehr lesen
Entwicklung Hash-Partitionierung

KI-Code-Assistenten: Segen oder Fluch?

2025-06-17
KI-Code-Assistenten: Segen oder Fluch?

KI-Code-Assistenten werden immer ausgefeilter und erzeugen sauberen und effizienten Code. Dies kann jedoch zu einem „vorzeitigen Abschluss“ führen, bei dem Entwickler von scheinbar perfekten Lösungen verführt werden und tiefere Probleme übersehen. Der Artikel verwendet eine medizinische Analogie und vergleicht KI mit erfahrenen Ärzten, die aufgrund ihrer Erfahrung eine seltene Erkrankung übersehen könnten. Der Autor rät Entwicklern, KI-Vorschläge kritisch zu bewerten, aktiv mehrere Lösungen zu erkunden und die Falle schneller Lösungen zu vermeiden, um die Codequalität zu verbessern und die Ansammlung von technischer Schulden zu verhindern.

Mehr lesen
Entwicklung

PostgreSQL Überraschung: CTEs, DELETE und LIMITs unerwartetes Verhalten

2025-05-04
PostgreSQL Überraschung: CTEs, DELETE und LIMITs unerwartetes Verhalten

Ein überraschendes Verhalten von PostgreSQL trat auf, als eine Common Table Expression (CTE) mit DELETE ... RETURNING und LIMIT zur Verarbeitung eines Batches von Elementen verwendet wurde. Die Absicht war, nur eine Zeile zu löschen, aber mehrere Zeilen wurden gelöscht. `EXPLAIN ANALYZE` zeigte eine optimierte, verschachtelte Halbverbindung, wodurch die LIMIT 1-Klausel mehrfach ausgeführt wurde. Die Lösung bestand darin, die Abfrage umzustrukturieren, die CTE zu vermeiden und eine Unterabfrage direkt in der WHERE-Klausel von DELETE zu verwenden. Dies unterstreicht, dass CTEs nicht immer Query-Plan-Optimierungen verhindern und eine sorgfältige Prüfung des Plans für kritische Operationen unerlässlich ist.

Mehr lesen
Entwicklung Query-Optimierung

PostgreSQLs synchrones Commit: Ein Kompromiss zwischen Performance und Ausdauer

2025-03-19
PostgreSQLs synchrones Commit: Ein Kompromiss zwischen Performance und Ausdauer

Dieser Beitrag untersucht die Auswirkungen der PostgreSQL-Einstellung `synchronous_commit` auf die Performance. Das Deaktivieren erhöht den Transaktionsdurchsatz deutlich, reduziert E/A und CPU-Last, führt aber ein kleines Risiko für Datenverlust ein. Der Autor zeigt eine 30%ige Steigerung des TPS auf E/A-beschränkten Systemen. Der Artikel befürwortet einen differenzierten Ansatz, der die Anpassung von `synchronous_commit` pro Sitzung, Transaktion oder Operation vorschlägt, mit einem Beispiel in Ruby on Rails. Der Autor merkt auch an, dass auf Aurora PostgreSQL die Einstellung von `synchronous_commit` auf `off` die größten Performance-Gewinne bringt.

Mehr lesen

Skalierung von PostgreSQL: Ungewöhnliche Probleme und Lösungen für schnell wachsende Startups

2025-02-09
Skalierung von PostgreSQL: Ungewöhnliche Probleme und Lösungen für schnell wachsende Startups

Dieser Beitrag befasst sich mit den häufigen Herausforderungen bei der Skalierung von PostgreSQL, denen schnell wachsende Startups begegnen. Er behandelt Probleme wie Lock Contention, Index Bloat, Ineffizienzen bei der TOAST-Speicherung und die Komplexität der vertikalen vs. horizontalen Skalierung, Append-Only vs. Update-intensive Tabellen und Multi-Tenancy. Für jedes Problem werden praktische Lösungen angeboten, die von Anpassungen der Datenbankparameter und Concurrency-Tools bis hin zum Überdenken von Datenzugriffsmustern und der Verwendung von Funktionen wie Advisory Locks reichen. Der Autor untersucht auch fortgeschrittene Themen wie Schemaänderungen unter Last, Upgrades ohne Ausfallzeiten und effiziente Strategien für COUNT-Abfragen. Dies ist eine wertvolle Ressource für Ingenieure, die die Leistung von PostgreSQL in anspruchsvollen Umgebungen optimieren möchten.

Mehr lesen
Entwicklung Datenbankskalierung

Datenbank-Mocks: Mehr Ärger als Nutzen?

2024-12-30
Datenbank-Mocks: Mehr Ärger als Nutzen?

So verlockend sie aufgrund ihrer Geschwindigkeit und Einfachheit sind, argumentiert der Autor, dass die Verwendung von Datenbank-Mocks für Tests letztendlich mehr Probleme verursacht als sie löst. Ein Beispiel für die Benutzererstellung hebt die Unterschiede zwischen Mocks und Tests mit einer echten Datenbank hervor. Reale Datenbanktests decken potenzielle Probleme frühzeitig auf, wie z. B. Verletzungen eindeutiger Constraints, die Behandlung von Standardwerten und Engpässe in der Leistung, wodurch Debugging-Zeit gespart und Produktionsrisiken reduziert werden. Wenn Anwendungen und Schemata sich weiterentwickeln, bewältigen reale Datenbanktests neue Validierungen, Änderungen des Datentyps und Änderungen der Zeitstempelpräzision besser und stellen sicher, dass der Code mit der tatsächlichen Datenbank übereinstimmt. Der Autor schlägt vor, reale Datenbanktests für Datenzugriffsschichten zu priorisieren, während sie auf der Serviceschicht verwendet werden, um Interaktionen der Geschäftslogik mit Daten aufzuzeigen. Controllerschichten können jedoch Serviceaufrufe effektiv simulieren. Die Balance zwischen realen Datenbanktests und Mocks ist der Schlüssel zum Erstellen robuster Anwendungen.

Mehr lesen