====== Optimierung der Server-Leistung ======

Für gewöhnlich ist einer Standard-Konfiguration des Webservers für SoSci Survey vollkommen ausreichend für 500 oder 1000 Interviews pro Stunde. Wenn allerdings nur schwache Hardware (z.B. ein Laptop als mobiler Befragungsserver) zur Verfügung steht oder wenn eine größere Anzahl von Interviews parallel läuft, muss die Konfiguration des Webservers ein wenig optimiert werden.

Welche Maßnahme am besten hilft, hängt davon ab, welcher Flaschenhals konkret Probleme verursacht. Wenn ein Server viele parallele Anfragen bearbeiten soll, ist der Webserver ''nginx'' deutlich sparsamer mit dem RAM als ''apache2''.


===== Datenbank entlasten =====

SoSci Survey verwendet einen Caching-Mechanismus für alle Fragen und Items, sodass diese nicht ständig aus der Datenbank geladen werden müssen. Zudem wird die nächste Fragebogen-Seite bereits abgeschickt, bevor die Antworten in die Datenbank geschrieben wurde -- dadurch muss der Teilnehmer nicht unnötig lange warten.

In der Standard-Konfiguration speichert SoSci Survey die im Interview erhobenen Daten dennoch nach dem Klick auf "Weiter" in die Datenbank. Dies bietet maximale Sicherheit für die Daten, belastet die Datenbank aber relativ stark. Deshalb bietet SoSci Survey einen [[caching|Schreibcache für Interviews]]. Dabei werden die Interviews komplett in Cache-Dateien gespeichert und erst zeitversetzt in die Datenbank geschrieben, sobald die Serverlast das zulässt. Damit die Interviews regelmäßig in die Datenbank übertragen werden, muss das [[:de:server:crontask|Skript für zeitgesteuerte Aufgaben]] regelmäßig aufgerufen werden.

Für die Leistung ist es wichtig, dass die Datenbank die Indizes im RAM-Speicher vorhalten kann und nicht ständig auf die Festplatte zugreifen muss. Falls die Installation sehr viele Interviews (ca. ab 500.000) vorhält, ist eine Anpassung der Speicherkonfiguration sinnvoll ([[prepare1#mysql_konfiguration|Vorbereitung des Servers I: MySQL-Konfiguration]]).


===== Persistente Datenbank-Verbindung =====

PHP (und damit auch SoSci Survey) startet für jede Anfrage ein neues Skript. Das bedeutet, nach jedem Klick auf "Weiter" und bei jedem eingefügten Item wird ein neues PHP-Skript gestartet. Und jedes Script muss sich zunächst mit der Datenbank verbinden.

Diese Verbindung kostet Zeit, die man sich eigentlich sparen könnte, denn das vorige Skript kann die Datenbank-Verbindung einfach geöffnet lassen. Diese Technik wird als persistente Datenbankverbindung bezeichnet und kann in der Installationsroutine von SoSci Survey einfach aktiviert werden. Rufen Sie dafür ''/admin/install.php'' im Browser auf.

Allerdings haben persistente Verbindungen eine Schattenseite: Wenn der Webserver viele Prozesse parallel startet, können diese alle Verbindungen zur Datenbank belegen. Deshalb muss man sicherstellen, dass die Datenbank mindestens so viele parallele Verbindungen akzeptiert, wie der Server parallele Verarbeitungsinstanzen (Threads) startet. Ist das nicht gewährleistet, werden Anfragen an die Datenbank bei hoher Serverlast mit Fehlern quittiert. Die entsprechenden MySQL-Variablen werden bereits in der [[start#mysql-einstellungen|Installationsanleitung]] erläutert.

Stellen Sie außerdem sicher, dass der Webserver Verbindungen nicht zu lange offen hält. Zwei Sekunden sind für SoSci Survey vollkommen ausreichend. Die Bearbeitungszeit für eine Fragebogen-Seite beträgt normalerweise 1-2 Minuten -- so lange kann und will man die Verbindung ohnehin nicht offen halten. Und dann kann man sie auch gleich wieder für andere Nutzer freigeben.


===== Webserver nginx =====

Viele Linux-Server verwenden als Programm für den Webserver Apache. Dieser Webserver ist zweifelsohne sehr leistungsfähig, benötigt in der Standard-Konfiguration allerdings sehr viel Speicher, wenn viele Dateien gleichzeitig vom Server abgerufen werden.

Eine Lösung dafür ist das Multi-Processing Modul [[http://httpd.apache.org/docs/2.2/en/mod/worker.html|MPM Worker]] für Apache -- allerdings sind für einen reibungslosen Betrieb eine Reihe von Anpassungen an der Konfiguration von Apache und PHP erforderlich.

Eine andere Lösung ist der Umstieg von Apache auf [[http://de.wikipedia.org/wiki/Nginx|nginx]], ebenfalls ein sehr leistungsfähiger Open-Source Webserver. Nach Einrichtung von PHP (PHP-FPM) arbeitet nginx problemlos mit Sosci Survey zusammen.