Wichtige PostgreSQL-Konfigurationsvariablen.

Die PostgreSQL-Konfiguration ist in zwei Teile gegliedert. In der Datei "postgresql.conf" wird der Server selbst konfiguriert und in "pg_hba.conf" wird definiert wer zu welcher Datenbank verbinden darf.

Diese Dateien liegen in dem Verzeichnis

/etc/postgresql/<major>.<minor>/<cluster>/

Wobei dies bei einer einfachen installation

/etc/postgresql/9.1/main/

entspricht.

pg_hba.conf

Nach diesen Änderungen muss der postgres nur angewiesen werden seine Konfigurationsdatei neu zu laden:

pg_ctlcluster 9.1 main reload

Standard-Authentifizierungsmethode bei PostgreSQL ist ident, wobei sich ein Nutzer nur mit seinem Unix-Account-Namen am Datenbank-Server anmelden kann. Damit sich der EAS, der als Nutzer www-data läuft, sich ohne Anlegen eines Datenbank-Nutzers anmelden darf, ist folgende Änderung an der PostgreSQL-Konfiguration nötig:

In der Datei /etc/postgresql/9.1/main/pg_hba.conf wird die Zeile

local   all         postgres                          ident

in

local   all         postgres                          trust

geändert und anschließend der PostgreSQL-Server neugestartet. Die obige Konfiguration erlaubt jedem lokalen Nutzer die Verbindung. Falls dies nicht gewünscht wird sollte die postgres konfiguration der entsprechenden Anleitung nach konfiguriert werden.

postgresql.conf

Nach den meisten dieser Änderungen muss der postgres server neu gestartet werden:

pg_ctlcluster 9.1 main restart --force

shared_buffers

  • nicht unter 128MB RAM bei einer mittelgroßen Installation. Werte bis zu 512MB sind empfehlenswert
shared_buffers = 256MB

  • hierfür muss evtl die Maximalmenge des erlaubten shared memory heraufgesetzt werden.

root@host# echo kernel.shmmax=1073741824 > /etc/sysctl.d/60-shm.conf
root@host# /etc/init.d/procps restart

Anzahl der WAL-Segmente

  • dies benötigt ca 1GB Speicherplatz

checkpoint_segments = 30

checkpoint_completion_target

checkpoint_completion_target = 0.8

Häufigkeit von Checkpointing

checkpoint_timeout = 30min

Menge des Speichers der für Wartungsarbeiten wie dem Anlegen eines Index genutzt werden kann

maintenance_work_mem = 512MB

Menge des Speichers die einzelne Teile eines SQL-Queries verbrauchen dürfen

work_mem = 8MB

effective_cache_size

  • Diese Variable gibt die Menge des Speichers an der potentiell vom Betriebsystem zum IO-Caching benutzt wird.
    • 60-80% des vorhandenen Arbeitsspeichers sind normalerweise eine guter Richtwert bei einer single-purpose Maschine
effective_cache_size = 8GB

synchronous_commit

  • Mit dieser Variable stellt man ein, ob PostgreSQL wartet ob alle zur Transaktion gehörigen Daten auf die Platte geschrieben wurden, bevor diese als erfolgreich an den client zurückgegeben wird. Falls ausgestellt, können nach einem Absturz die Transaktionen der letzten Sekunden verloren gehen. Die Datenbank ist jedoch konsistent.
synchronous_commit = off

wal_buffers

  • Die maximale Menge an write-ahead log, die noch nicht auf Platte geschrieben wurde.
    • 16 MB sind hier ein guter Wert.
    • Steht in der Datei der Wert -1, dann ist -1 zu bevorzugen. Ihre Version kann die Größe automatisch verwalten.
wal_buffers = 16MB

Beispiel

shared_buffers = 512M
checkpoint_segments = 30
checkpoint_completion_target = 0.8
checkpoint_timeout = 30MB
default_statistics_target = 300
maintenance_work_mem = 512MB
work_mem = 32MB
log_checkpoints = on
log_min_duration_statement = 50
wal_buffers = 16MB
synchronous_commit = off