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 Performance 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. Heben Sie zunächst die Auskommentierung der Eigenschaft "max_locks_per_transaction" auf, und erhöhen Sie den Wert vor dem Laden großer Datenmengen 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 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".
cursor_tuple_fraction
Der PostgreSQL-Planer verwendet den Wert "cursor_tuple_fraction", um einzuschätzen, welcher von einer Abfrage zurückgegebene Zeilenbruchteil benötigt wird. Der Wert "cursor_tuple_fraction" wird in der Datei "postgresql.conf" standardmäßig auf 0,1 festgelegt, was bedeutet, dass die ersten 10 Prozent der Zeilen (oder Features) im Ergebnis schnell zurückgegeben werden, der Rest jedoch mehr Zeit in Anspruch nimmt.
Wenn Sie den Prozentsatz des Ergebnissatzes ändern möchten, den der PostgreSQL-Planer anzeigt, wenn er mit Anwendungen verbunden ist, die nicht von ArcGIS stammen, können Sie den Wert für die Eigenschaft "cursor_tuple_fraction" in der Datei "postgresql.conf" ändern.
Wenn Sie ArcGIS 10.2 oder höhere Versionen zum Abfragen der Daten verwenden, wird stets die Einstellung 1,0 verwendet, was bedeutet, dass Daten erst dann angezeigt werden, wenn 100 Prozent des Ergebnissatzes zurückgegeben wurden. Die Änderung des Wertes für "cursor_tuple_fraction" in der Datei "postgresql.conf" gilt nicht, wenn der Zugriff auf die Datenbank über ArcGIS erfolgt. Um den von ArcGIS verwendeten Wert zu ändern, müssen Sie die Umgebungsvariable "cursor_tuple_fraction" für die Sitzung oder das System festlegen.
Verbessern der Performance räumlicher SQL-Abfragen bei Anwendungen von Drittanbietern
Wenn Sie SQL-Abfragen außerhalb von ArcGIS 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.
Die Variable "ST_GEOMETRY_OUTPUT_FORMAT" ist standardmäßig auf "ST_GEOMETRY" festgelegt, d. h. es wird eine hexadezimal-binäre Darstellung zurückgegeben. Dies ist erforderlich, um eine verwendbare Sicherung der Geodatabase zu erstellen. Sie können diese Variable in "TYPE" ä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=TYPE
Die Syntax für eine C-Shell (csh) lautet wie folgt:
setenv ST_GEOMETRY_OUTPUT_FORMAT TYPE
Unter Windows erstellen Sie eine Systemumgebungsvariable in den Systemeigenschaften.
Name der Variablen: ST_GEOMETRY_OUTPUT_FORMAT
Wert der Variablen: TYPE
Nachdem Sie die Variable eingestellt haben, müssen Sie den PostgreSQL-Datenbank-Cluster neu starten.