Speicheroptimierung in PostgreSQL

Einstellungen in "postgresql.conf"

Um das Laden großer Datenmengen in PostgreSQL-Datenbanken zu vereinfachen, können Sie für "shared_buffers" und "max_locks_per_transaction" in der Datei "postgresql.conf" höhere Werte einstellen.

shared_buffers

Mit dem Parameter "shared_buffers" legen Sie fest, wie viel Speicher für gemeinsame Speicherpuffer verwendet wird. Laut PostgreSQL-Dokumentation müssen Sie für eine optimale Leistung eine Einstellung verwenden, die größer ist als der Mindestwert von 128 KB bzw. 16 KB multipliziert mit dem Wert des Parameters "max_connections". Für Produktionsinstallationen wird für "shared_buffers" ein Wert von mehreren Dutzend Megabytes empfohlen.

Zum Laden von großen Datenmengen benötigen Sie in der Regel eine Einstellung, die größer ist als die Standardeinstellung von 32 MB. Nachdem Sie diesen Parameterwert in der Datei "postgresql.conf" geändert haben, müssen Sie den Datenbank-Cluster neu starten.

max_locks_per_transaction

Der Wert für "max_locks_per_transaction" gibt an, wie viele Datenbankobjekte gleichzeitig gesperrt werden können. In den meisten Fällen ist der Standardwert 64 ausreichend. Wenn Sie jedoch eine große Anzahl an Datasets (z. B. mehrere Tausend) gleichzeitig laden, kann die Anzahl der gleichzeitigen Objektsperren für die Transaktion größer sein als 64.

Das Verhältnis von gleichzeitigen Sperren und der Anzahl der Datasets ist nicht 1:1. Das heißt, wenn Sie 3.000 Datasets laden, müssen Sie den Wert für "max_locks_per_transaction" nicht auf 3.000 erhöhen. Erhöhen Sie den Wert vor dem Laden großer Datenmengen versuchsweise auf 100.

Nachdem Sie den Wert für "max_locks_per_transaction" geändert haben, müssen Sie den Server neu starten.

Wenn Sie die Werte der beschriebenen Parameter erhöhen, fordert die Datenbank u. U. mehr gemeinsamen Speicher an, als das UNIX-Betriebssystem zur Verfügung hat. Informationen zum Erhöhen der Einstellung für gemeinsamen Speicher in Ihrem Betriebssystem finden Sie in der PostgreSQL-Dokumentation unter "Managing Kernel Resources".

Verbessern der Performance bei Abfragen mit räumlichen SQL-Funktionen

Wenn Sie SQL-Abfragen ausführen, die räumliche Spalten vom Typ "ST_Geometry" aus einer Business-Tabelle zurückgeben, können Sie die Abfrage-Performance verbessern, indem Sie festlegen, dass die Systemumgebungsvariable ST_GEOMETRY_OUTPUT_FORMAT Daten im Format "ST_Geometry" statt im Well-Known Text (WKT)-Format ausgibt.

Standardmäßig wird das ST_GEOMETRY_OUTPUT_FORMAT auf TYPE festgelegt, was bedeutet, dass eine hexadezimal-binäre Darstellung zurückgegeben wird. Dies ist erforderlich, um eine verwendbare Sicherung der Geodatabase zu erstellen. Sie sollten diese Variable nur in ST_GEOMETRY ändern, wenn Sie die SQL-Abfrage-Performance verbessern möchten. Wenn Sie diese Variable einstellen, weil Sie eine Anzahl räumlicher Abfragen mit SQL-Funktionen planen, entfernen Sie die Variable nach Beenden der Abfragen unbedingt, und starten Sie den PostgreSQL-Datenbank-Cluster neu.

Diese Variable muss auf dem Computer eingestellt werden, auf dem PostgreSQL ausgeführt wird.

Legen Sie für ein Linux-Betriebssystem die Variable für die Shell fest, von der Sie SQL-Abfragen ausgeben. Die Syntax für eine Bourne Again Shell (bash) lautet wie folgt:

ST_GEOMETRY_OUTPUT_FORMAT=ST_GEOMETRY

Die Syntax für eine C-Shell (csh) lautet wie folgt:

setenv ST_GEOMETRY_OUTPUT_FORMAT ST_GEOMETRY

Windows: Erstellen Sie eine Systemumgebungsvariable in der Systemsteuerung.

Name der Variablen: ST_GEOMETRY_OUTPUT_FORMAT

Wert der Variablen: ST_GEOMETRY

Nachdem Sie die Variable eingestellt haben, müssen Sie den PostgreSQL-Datenbank-Cluster neu starten.


3/6/2012