Frage zu Performance/Wartung in JPA-Anwendung

Hallo Forum,

bin mir nicht sicher in welches Unterforum meine Fragen gehören, darum schreib ich mal hier…

Ich entwickle eine Webanwendung (java/JPA 2.0), die mit postgresql arbeitet.

Die Situation ist:

Es gibt eine Reihe von Datensätzen in einer Tabelle, die eine künstlich generierte ID (long-int, 64 bit) haben (welche aus inhaltlich bekannten Aspekten des Datensatzes berechnet wird), und der Zugriff auf die einzelnen Zeilen findet immer nur direkt per Suche nach dieser ID statt (also keine komplexeres Queries). Dabei werden ständig Datensätze hinzugefügt, bestehende geändert, aber niemals welche gelöscht (bis auf punktuelle Groß-Aufräumarbeiten, die aber ausserhalb des laufenden Betriebs stattfinden).

Meine Fragen dazu:

  • soweit ich weiss, legt postgresql automatisch einen (binärbaum-)index über die ID-Spalte an, oder? Insofern müsste dieser Zugriff per ID ziemlich schnell gehen. Das ist auch der Sinn dieser berechneten IDs, jeden Datensatz möglichst schnell finden können. Stimmt das soweit?

  • ab welchen Mengen an Zeilen pro Tabelle sind Performanceprobleme zu erwarten? Mittelfristig werden da wohl Größenordnungen von einigen hunderttausend Zeilen zusammenkommen. Ich gehe eigentlich nicht davon aus, dass das ein Problem ist? Wieviel ist für postgresl “viel” bei so einer Tabelle? Die Tabelle hat eine handvoll Spalten, nicht allzu viel.

  • was muss man da an Wartungsaktivitäten machen? kann man das “einfach so laufen lassen” oder sollte man regelmässig (wie oft?) irgendwelche Wartungsdienste laufen lassen? pgadmin3 redet oft von “VACUUM”, aber das scheint eher relevant wenn häufig Daten gelöscht werden, was ja nicht der Fall ist?

Sorry falls das ziemliche Anfängerfragen sein mögen, aber ich bin ja auch Anfänger in Sachen pgl/Datenbankprogrammierung ;-).

Gruß und vielen Dank schonmal.

Wenn die Spalte as PRIMARY KEY definiert wurde, dann ja. Ansonsten musst Du mittels CREATE INDEX einen index selber anlegen.

“Hunderttausende” sind eher als wenig. Bei “hunderten millionen” wird’s langsam spannend.

Wenn der Zugriff ausschliesslich über den PK (bzw. einen unique index) erfolgt, dann sind auch “viele Millionen” kein Problem. Letztendlich musst Du mit EXPLAIN ANALYZE den execution plan des Statements ansehen. Anhand des Plans kannst Du beurteilen wie effizient Deine Indizes verwendet werden (oder eben nicht).

  • was muss man da an Wartungsaktivitäten machen? kann man das “einfach so laufen lassen” oder sollte man regelmässig (wie oft?) irgendwelche Wartungsdienste laufen lassen? pgadmin3 redet oft von “VACUUM”, aber das scheint eher relevant wenn häufig Daten gelöscht werden, was ja nicht der Fall ist?

In modernen Postgres Versionen solltest Du Dir darüber erstmal keine Gedanken machen. Das funktioniert “out-of-the-box” schon recht ordentlich.

Danke für die Antwort. Klingt ja schonmal ganz gut :-).

Aber einige Begriffe die mir wenig sagen :wink:

Wenn ich bei pgAdmin gucke, dann steht bei der ID-Spalte bei “Eigenschaften” “Primärschlüssel? Ja” und beim Reiter “Abhängige” “Typ: primary key”. Insofern wohl alles ok?

Ich verwende Version 9.1. Bis es viele Millionen Zeilen sind wird wohl noch einige Zeit vergehen… eine Million ist so vage realistisch.