Diese Dokumentation wurde zur Beschreibung der Serie 1.7.x von Apache™ Subversion® erstellt. Falls Sie eine unterschiedliche Version von Subversion einsetzen, sei Ihnen dringend angeraten, bei http://www.svnbook.com/ vorbeizuschauen und stattdessen die zu Ihrer Version von Subversion passende Version dieser Dokumentation heranzzuiehen.

Server Optimierung

Ein Teil der gebührenden Fleißarbeit bei der Bereitstellung eines Dienstes, wie etwa eines Subversion Servers, umfasst die Planung des Leistungsvermögens und der Leistungsverbesserung. Subversion neigt nicht dazu, besonders ressourcenhungrig hinsichtlich CPU- und Speicherverbrauch zu sein, doch kann jeder Dienst Nutzen aus Optimierungen ziehen, insbesonders, wenn die Nutzung des Dienstes in die Höhe schnellt[62]. In diesem Abschnitt erörtern wir einige Maßnahmen, wie Sie Ihre Subversion Server-Konfiguration dergestalt anpassen können, dass eine noch bessere Leistung und Erweiterbarkeit verfügbar ist.

Datenpufferung

Im Allgemeinen ist der teuerste Teil der Arbeit eines Subversion Servers das Abrufen von Daten aus dem Projektarchiv. Subversion 1.6 versuchte, diese Kosten durch die Einführung einer Pufferung bestimmter aus dem Projektarchiv gelesener Datenklassen im Speicher auszugleichen. Subversion 1.7 geht hier jedoch weiter, indem nicht nur die Ergebnisse der kostenintensiveren Operationen gepuffert werden, sondern außerdem in jedem der verfügbaren Server die Werkzeuge zur Feinjustierung der Größe und einiger Verhaltensweisen des Puffers zur Verfügung gestellt wird.

Für svnserve können Sie die Puffergröße mit der Kommendozeilenoption --memory-cache-size (-M) angeben. Sie können über die boolschen Optionen --cache-fulltexts und --cache-txdeltas auch vorgeben, ob svnserve den Volltext bzw. die Deltas von Inhalten puffern soll.

$ svnserve -d -r /path/to/repositories \
           --memory-cache-size 1024 \
           --cache-txdeltas yes \
           --cache-fulltexts yes
…
$

mod_dav_svn stellt denselben Konfigurationsgrad über httpd.conf-Direktiven zur Verfügung. Die Direktiven SVNInMemoryCacheSize, SVNCacheFullTexts und SVNCacheTextDeltas können auf der Ebene der Server-Konfiguration verwendet werden, um die Charakteristik der Datenpufferung von Subversion zu kontrollieren.

<IfModule dav_svn_module>
  # Einen 1 Gb Subversion Datenpuffer sowohl für Volltext als auch Deltas bereitstellen.
  SVNInMemoryCacheSize 1048576
  SVNCacheTextDeltas On
  SVNCacheFullTexts On
</IfModule>

Also, welche Einstellungen sollten Sie verwenden? Natürlich müssen Sie die auf Ihrem Server zur Verfügung stehenden Ressourcen berücksichtigen. Um überhaupt einen Vorteil aus der Pufferung ziehen zu können, sollten Sie den Puffer mindestens so groß lassen, dass er alle Dateien, auf die am häufigsten zugegriffen wird, aufnehmen kann (z.B. den trunk-Dateibaum Ihres Projektes).

[Tipp] Tipp

Wenn Sie die Größe des Puffers im Speicher auf 0 setzen, wird der erweiterte Puffermechanismus außer Kraft gesetzt und bewirkt, dass Subversion auf die alten in Subversion 1.6 eingeführten Puffermechanismen zurückgreift.

[Anmerkung] Anmerkung

Momentan verwenden lediglich Projektarchive, die das FSFS-Backend benutzen, diese Funktionalität der Datenpufferung.

Datenkompression über das Netz

Die Komprimierung von Daten, die über Draht übertragen werden, kann den Umfang dieser Netzübertragungen erheblich verringern, geht allerdings auf Kosten der CPU-Leistung des Servers (und Clients). Abhängig von der CPU-Kapazität Ihres Servers, den typischen Zugriffsmustern der Clients, die Ihren Server in Anspruch nehmen und der Bandbreite der dazwischen liegenden Netzwerke möchten Sie vielleicht einstellen, welchen Aufwand Ihr Server betreiben soll, um die Daten vor dem Versand zu komprimieren. Um Sie bei dieser Feineinstellung zu unterstützen, bietet Subversion 1.7 für svnserve die Option --compression (-c) und die Direktive SVNCompressionLevel für mod_dav_svn. Beide akzeptieren einen Wert, der eine Ganzzahl zwischen 0 und 9 (einschließlich) ist, wobei 9 die beste Komprimierung der Daten bietet und 0 die Kompression vollständig unterbindet.

In einem lokalen Netzwerk (LAN) mit 1-Gigabit-Verbindungen mag es beispielsweise keinen Sinn ergeben, den Server die Übertragungen zu komprimieren (was auch die Clients dazu zwingt, sie zu entkomprimieren), da das Netz bereits so schnell ist, dass die Anwender von einer verkleinerten Nutzlast nicht profitieren würden. Andererseits würden Server, auf die in erster Linie von Clients mit Verbindungen geringer Bandbreite zugegriffen wird, ihren Clients einen großen Gefallen erweisen, wenn sie den Gesamtumfang der Netzkommunikation minimieren würden.



[62] Im Fall von Subversion beruht dieser steile Aufstieg natürlich auf dem coolen Namen. Okay, das und seine Beliebtheit, Zuverlässigkeit, Benutzerfreundlichkeit….