SQL Tuning - so geht's!!!

    • TBone98
      TBone98
      Bronze
      Dabei seit: 25.07.2006 Beiträge: 1.689
      Keine Ahnung, ob das schon mal gepostet wurde hier. Ich hab's im Pockertracker Forum gefunden und mal übersetzt.

      Standardmäßig sind die PostgreSQL Settings so eingestellt, dass die Datenbank auch auf älteren Systemen problemlos läuft. Durch Anpassen einiger Memory-Parameter kann ein Performancesprung erzielt werden.

      Dazu öffnet man die "postgresql.conf" Datei, die sich im SQL-Verzeichnis im "Data"-Ordner befindet. Wahlweise kann man sie auch über Start->Programs->PostgreSQL->Configuration Files->Edit postgresql.conf öffnen!!!

      Dort such man:

      1) "shared_buffers = xMB" und setzt den Wert auf 1/4 des vorhandenen Arbeitsspeichers. Bei 2GB sind das 512MB.

      2) "work_mem = xMB" und setzt diesen Wert auf 1/64 des vorhandenen Atrbeitsspeichers (also 32MB bei 2GB)

      3) "maintenance_work_mem = xMB" und setzt diesen Wert auf 1/16 des vorhandenen Arbeitsspeichers (128MB bei 2GB)

      Achtung!!!!: Bei den Punkten 2) und 3) ist darauf zu achten, dass das "'#"-Zeichen am Anfang der Zeile entfernt werden MUSS, damit die Änderung auch wirksam wird.

      Danach die Datei abspeichern und die SQL-Konfiguration per

      Start->Programs->PostgreSQL->Reload Configurations

      neu starten.


      Für Vista-User:
      Wenn ihr ne Fehlermeldung beim Versuch die Datei zu speichern bekommt, müsst ihr die "postgresql.conf" als Admin öffnen. Dazu rechtsclickt ihr die Start->Programs->PostgreSQL->Configuration Files->Edit postgresql.conf und wählt "Run as administrator".


      Linux-User:
      Wenn ihr PostgreSQL auf Linux laufen habt, kann folgende Fehlermeldung erscheinen:

      "
      EDT DETAIL: Will not verify client certificates.
      EDT FATAL: could not create shared memory segment: Invalid argument
      EDT DETAIL: Failed system call was shmget(key=5432001, size=549330944, 03600)."

      In diesem Fall müsst ihr in "/etc/sysctl.conf" die folgende Zeile editieren:

      "kernel.shmmax = N"

      Hier muss "N" so verändert werden, dass der Wert größer ist als der Wert, den ihr gerade bei "shared_buffers" in der "postgresql.conf" eingetragen habt. Dabei ist darauf zu achten, dass hier die Größe nicht in MEGAbytes sondern in Bytes angegeben werden muss. Habt ihr in der "postgresql.conf" also 512MB eingetragen, solltet ihr hier "kernel.shmmax = 550000000" setzen. Den Mindestwert hierfür könnt ihr auch aus der Fehlermeldung aus dem Wert "size=X" entnehmen.


      Ich selber habe diese Änderung nur unter XP durchgeführt und getestet. Es hat auf jeden Fall einiges gebracht. Über Vista und Linux kann ich nichts sagen. Aber vielleicht probiert es einfach mal jemand aus und postet dann seine Erfahrungen.
  • 10 Antworten