Hinweis: Sie sind auf den Seiten der Moodle 3.3 Dokumentation. Die Dokumentation der aktuellsten Moodle-Version finden Sie hier: Geschwindigkeitsempfehlungen.

Geschwindigkeitsempfehlungen: Unterschied zwischen den Versionen

Aus MoodleDocs
Wechseln zu:Navigation, Suche
(Die Seite wurde neu angelegt: „{{Geschwindigkeit}} {{Zum Übersetzen}} Moodle can be made to perform very well, at small usage levels or scaling up to many thousands of users. The factors invo…“)
 
 
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Geschwindigkeit}}
{{Geschwindigkeit}}


{{Zum Übersetzen}}
Moodle kann so konfiguriert werden, dass es sowohl für kleine als auch große Nutzerzahlen zuverlässig und schnell läuft. Die Faktoren, die die Geschwindigkeit von Moodle beeinflussen, sind im Wesentlichen dieselben wie für allgemeine PHP- und Datenbank-basierte Systeme. Wenn Sie Ihren Moodle-Server optimieren, konzentrieren Sie sich auf die Faktoren, die für die Nutzer/innen einen spürbaren Unterschied machen. Wenn Sie z.B. viel mehr Nutzer/innen haben, die sich nur durch Moodle durchklicken, als Nutzer/innen, die tatsächlich auf die Moodle-Datenbank zugreifen, dann versuchen Sie, die Webserver-Geschwindigkeit zu verbessern.  
Moodle can be made to perform very well, at small usage levels or scaling up to many thousands of users. The factors involved in performance are basically the same as for any PHP-based database-driven system. When trying to optimize your server, try to focus on the factor which will make the most difference to the user. For example, if you have relatively more users browsing than accessing the database, look to improve the webserver performance.




==Obtain a baseline benchmark==
==Basis-Benchmark==
Bevor Sie mit der Optimierung Ihres Servers beginnen, benötigen Sie ein Basis-Benchmark Ihres Systems. Auf diesen Benchmark-Test beziehen sich alle Optimierungsbemühungen. Für Linux können Sie [http://lbs.sourceforge.net/ LBS] verwenden, unter Windows können Sie den Performance Monitor nutzen. Erst wenn Sie über quantitative Daten verfügen, wie leistungsfähig Ihr System aktuell ist, können Sie feststellen, ob Ihre Anpassungen eine Verbesserung in der Geschwindigkeit bringen oder nicht.


Before attempting any optimization, you should obtain a baseline benchmark of the component of the system you are trying to improve. For Linux try [http://lbs.sourceforge.net/ LBS] and for Windows use the Performance Monitor. Once you have quantitative data about how your system is performing currently, you'll be able to determine if the change you have made has had any real impact.
Alle Bemühungen, die Geschwindigkeit zu verbessern, laufen darauf hinaus, den RAM (Caching) zu verwenden und die Zugriffe auf die Festplatte zu reduzieren. Insbesondere ist es wichtig, die Verwendung von SWAP zu vermeiden oder auf ein Minimum zu beschränken. Sobald Ihr System auf den SWAP ausweicht, benötigen Sie mehr RAM.


The overall aim of adjustments to improve performance is to use RAM (cacheing) and to reduce disk-based activity. It is especially important to try to eliminate swap file usage as much as you can. If your system starts swapping, this is a sign that you need more RAM.  
Die "Optimierungsreihenfolge" ist in der Regel folgende: Hauptspeicher (mehr RAM), Datenträger (schnellere Festplatten, verbesserte Festplattenkonfiguration), Prozessor (mehr und schneller).


The '''optimization order preference''' is usually: primary storage (more RAM), secondary storage (faster hard disks/improved hard disk configuration), processor (more and faster).
==Skalierbarkeit==
Das Design von Moodle (mit klarer Trennung der Anwendungsschichten) ermöglicht skalierbare Systeme.


==Scalability==
Große Installationen trennen normalerweise den Webserver und den Datenbank-Server und betreiben diese auf separaten physikalischen Servern. Für kleinere Installationen ist diese Trennung in der Regel nicht nötig.


Moodle's design (with clear separation of application layers) allows for strongly scalable setups. (Please check the list of [[Large installations|large Moodle installations]].)
Sie können für eine Moodle-Installation ein Load-Balancing betreiben, indem Sie z.B. mehr als einen Webserver einsetzen. Diese Webserver sollten auf dieselbe Moodle-Datenbank und dasselbe Moodle-Datenverzeichnis zugreifen. Ebenso kann die Datenbank auf einem Cluster von Servern liegen (z.B. auf einem MySQL Cluster) - das ist jedoch keine einfache Aufgabe, hierfür benötigen Sie Unterstützung durch Experten, z.B. durch einen Moodle-Partner.
 
Large sites usually separate the web server and database onto separate servers, although for smaller installations this is typically not necessary.
 
It is possible to load-balance a Moodle installation, for example by using more than one webserver. The separate webservers should query the same database and refer to the same filestore area, but otherwise the separation of the application layers is complete enough to make this kind of clustering feasible. Similarly, the database could be a cluster of servers (e.g. a MySQL cluster), but this is not an easy task and you should seek expert support, e.g. from a Moodle Partner.
 
===See also===
 
Using Moodle forum discussions:


Siehe auch folgende Diskussionsbeiträge im Kurs ''Using Moodle'' auf moodle.org:
*[http://moodle.org/mod/forum/discuss.php?d=57202 Moodle clustering]
*[http://moodle.org/mod/forum/discuss.php?d=57202 Moodle clustering]
*[http://moodle.org/mod/forum/discuss.php?d=44470 Software load balancing]
*[http://moodle.org/mod/forum/discuss.php?d=44470 Software load balancing]
Zeile 30: Zeile 24:
*[http://moodle.org/mod/forum/discuss.php?d=88214 Installation for 3000 simultaneous users]
*[http://moodle.org/mod/forum/discuss.php?d=88214 Installation for 3000 simultaneous users]


==Hardware configuration==
==Hardware-Konfiguration==
'''Note''': The fastest and most effective change that you can make to improve performance is to '''increase the amount of RAM on your web server''' - get as much as possible (e.g. 4GB or more). Increasing primary memory will reduce the need for processes to swap to disk and will enable your server to handle more users.
'''Hinweis''': Die schnellste und effektivste Möglichkeit, die Geschwindigkeit des Moodle-Servers zu erhöhen, ist das '''Bereitstellen von mehr RAM''' -so viel wie möglich (mindestens 4 GB). Mehr Speicher bedeutet weniger Swapping auf die Festplatte, und der Server kann mehr Nutzer/innen gleichzeitig bedienen.
* Better performance is gained by obtaining the best '''processor capability''' you can, i.e. dual or dual core processors. A modern BIOS should allow you to enable hyperthreading, but check if this makes a difference to the overall performance of the processors by using a [http://en.wikipedia.org/wiki/Super_PI CPU benchmarking tool].
*Verwenden Sie die besten Prozessoren und mehrere Prozessoren. Testen Sie mit dem [http://en.wikipedia.org/wiki/Super_PI CPU Benchmark Tool], ob Sie damit Verbesserungen in der Geschwindigkeit erreichen.
* If you can afford them, use '''SCSI hard disks''' instead of SATA drives. SATA drives will increase your system's CPU utilization, whereas SCSI drives have their own integrated processors and come into their own when you have multiple drives. If you must have SATA drives, check that your motherboard and the drives themselves support NCQ (Native Command Queuing).
*Wenn ie es sich leisten können, verwenden Sie '''SCSI Festplatten''' statt SATA Festplatten. SATA Festplattenbrauchen mehr Zugriffe auf die CPU, während SCSI Festplatten eigene intergrierte Prozessoren haben. Wenn Sie SATA Festplatten haben, stellen Sie sicher, dass die Festplatten und das Motherboard NCQ (Native Command Queuing) unterstützen.
* Purchase hard disks with a '''low seek time'''. This will improve the overall speed of your system, especially when accessing Moodle's reports.
*Kaufen Sie Festplatten, die eringe Suchzeiten ('''seek time''') haben. Dadurch verbessert sich die Gesamtgeschwindigkeit Ihres Systems, insebsondere wenn Sie auf Moodle-Berichte zugreifen.
* Size your '''swap file''' correctly. The general advice is to set it to 4 x physical RAM.
* Konfigurieren Sie den '''SWAP''' in der richtigen Größe. The general advice is to set it to 4 x physical RAM.
* Use a '''RAID disk system'''. Although there are many different RAID configurations you can create, the following generally works best:
* Verwenden Sie ein '''RAID System'''. Es gibt viele verschiedene Konfigurationsmöglichkeiten für ein RAID System, wir empfehlen folgende Konfiguration:
** install a hardware RAID controller (if you can)
** Installieren Sie einen Hardware RAID Controller (falls möglich)
** the operating system and swap drive on one set of disks configured as RAID-1.
** Die Platten für das Betriebssystem und den SWAP konfigurieren Sie als RAID-1.
** Moodle, Web server and Database server on another set of disks configured as RAID-5.
** Moodle, den Web-Server und den Datenbank-Server konfigurieren Sie auf einer oder mehreren anderen Festplatten als RAID-5.
* Use '''gigabit ethernet''' for improved latency and throughput. This is especially important when you have your webserver and database server separated out on different hosts.
* Nutzen Sie ein '''Gigabit Ethernet'''. Das ist insbesondere dann wichtig, wenn Sie den Web-Server und den Datenbank-Server auf verschiedenen Servern laufen haben.
* Check the settings on your '''network card'''. You may get an improvement in performance by increasing the use of buffers and transmit/receive descriptors (balance this with processor and memory overheads) and off-loading TCP checksum calculation onto the card instead of the OS.
* Prüfen Sie die Einstellungen auf Ihrer '''Netzwerk-Karte'''. Sie können evtl. Verbesserungen erreichen, wenn Sie die Nutzung des Buffers und der Transmit/Receive Descriptoren erhöhen und wenn Sie die Berechnung der TCP Checksumme auf die Karte auslagern, statt auf das Betriebssystem.
Read this [http://moodle.org/mod/forum/discuss.php?d=68579 Case Study] on a server stress test with 300 users.   
Lesen Sie diesen Diskussionsbeitrag [http://moodle.org/mod/forum/discuss.php?d=68579 Case Study] - eine Studie zu einem Server-Stress-test mit 300 Nutzer/innen.   
* See this [http://elearning.sgu.ac.jp/doc/PT/ accompanying report] on network traffic and server loads.
* Lesen Sie diesen Beitrag [http://elearning.sgu.ac.jp/doc/PT/ accompanying report] - Bericht über Netzwerk-Traffic und Serverlast.
* See the [[Moodle.org configuration]]
* Siehe [https://docs.moodle.org/20/en/Moodle.org_configuration moodle.org Konfiguration].
* Also see this SFSU presentation at Educause (using VMWare): [http://www.educause.edu/Resources/AnOpenSourceLMSforaMissionCrit/162843]
* Siehe [http://www.educause.edu/Resources/AnOpenSourceLMSforaMissionCrit/162843] - SFSU Präsentation von Educause (unter Verwendung von VMWare)
 
==Operating System==
* You can use [http://en.wikipedia.org/wiki/Linux Linux](recommended), Unix-based, Windows or Mac OS X for the server '''operating system'''. *nix operating systems generally require less memory than Mac OS X or Windows servers for doing the same task as the server is configured with just a shell interface. Additionally Linux does not have licensing fees attached, but can have a big learning curve if you're used to another operating system. If you have a large number of processors running SMP, you may also want to consider using a highly tuned OS such as [http://en.wikipedia.org/wiki/Solaris_Operating_Environment Solaris].
* Check your own OS and '''vendor specific instructions''' for optimization steps.
** For Linux look at the [http://linuxperf.sourceforge.net/ Linux Performance Team] site.
** For Linux investigate the hdparm command, e.g. hdparm -m16 -d1 can be used to enable read/write on multiple sectors and DMA. Mount disks with the async and noatime options.
** For Windows set the sever to be optimized for network applications (Control Panel, Network Connections, LAN connection, Properties, File & Printer Sharing for Microsoft Networks, Properties, Optimization). You can also search the [http://technet.microsoft.com/ Microsoft TechNet site] for optimization documents.
 
==Web server performance==
 
Installing [http://www.mozilla.com/en-US/ Firefox] and the [https://addons.mozilla.org/en-US/firefox/addon/1843 firebug] extension will allow you to watch the time it takes for each page component to load. Also, the [https://addons.mozilla.org/en-US/firefox/addon/5369 Yslow] extension will evaluate your page against Yahoo's [http://www.skrenta.com/2007/05/14_rules_for_fast_web_pages_by_1.html 14 rules], full text [http://developer.yahoo.com/performance/rules.html Best Practices for Speeding Up Your Web Site], <strike>([http://video.yahoo.com/video/play?vid=1040890 video])</strike> for fast loading websites.
 
===PHP performance===
* You are strongly recommended to use a '''PHP accelerator''' to ease CPU load, such as [http://pecl.php.net/apc APC], [http://www.php-accelerator.co.uk/ PHPA], [http://trac.lighttpd.net/xcache/ Xcache], [http://sourceforge.net/projects/wincache WinCache] or [http://eaccelerator.net/ eAccelerator]. (Take care to choose a PHP accelerator that is known to work well with your version of PHP and note that Turck MMCache is [http://turckmmcache.exeprod.com/TheManifestoEnglish no longer maintained] and can cause failures with PHP 5).
* Improvements in read/write performance can be improved by putting the cached PHP pages on a [[TMPFS]] filesystem - but remember that you'll lose the cache contents when there is a power failure or the server is rebooted.
* Performance of PHP is better when installed as an '''Apache/IIS ISAPI module''' (rather than a CGI).
* Also check the '''memory_limit''' in php.ini, reduce it to 16M for Moodle version earlier than 1.7 ([http://moodle.org/mod/forum/discuss.php?d=39656 See this forum discussion]). For Moodle 1.7 or later, it is recommended that the value of memory_limit should be 40M. As of [http://www.php.net/ChangeLog-5.php PHP 5.2.1] the default value for the memory_limit directive is 128M.
* Also see [[PHP_settings_by_Moodle_version]]
 
===Install HowTo===
* [http://2bits.com/articles/installing-php-apc-gnulinux-centos-5.html APC on CentOS 5.x (linux)]
* [http://fplanque.com/dev/linux/install-apc-php-cache-debian-lenny APC on Debian (linux)]
* [http://www.linuxtuts.net/211-installing-memcached-php5-memcache-module-debian-apache2.html MemCache module on Debian (Apache2 and PHP5) ]
* [http://noveckg.blogspot.com/2010/03/installing-memcached-on-centos-5x.html Installing Memcache on CentOS 5.x (linux)]
* [http://noveckg.blogspot.com/2010/02/installing-eaccelerator-cache-for-php.html Installing eAccelerator on CentOS 5.x (linux)]
* [https://docs.moodle.org/en/Installing_eAccelerator_In_Ubuntu_Server/ Installing eAccelerator on Ubuntu Server (linux)]
 
===Apache performance===
* If you are using Apache on a Windows server, use the build from [http://www.apachelounge.com Apache Lounge] which is reported to have [http://moodle.org/mod/forum/discuss.php?d=93358 performance and stability improvements] compared to the official Apache download. Note that this is an unofficial build, so may not keep up with official releases.
* Set the '''MaxClients''' directive correctly. Use this formula to help (which uses 80% of available memory to leave room for spare):
MaxClients = Total available memory * 80% / Max memory usage of apache process
:Memory usage of apache process is usually 10MB but Moodle can easily use up to 100MB per process, so a general rule of thumb is to divide your available memory in megabytes by 100 to get a conservative setting for MaxClients. You are quite likely to find yourself lowering the MaxClients from its default of 150 on a Moodle server. To get a more accurate estimate read the value from the shell command:
#ps -ylC httpd --sort:rss
 
:If you need to increase the value of '''MaxClients''' beyond 256, you will also need to set the '''ServerLimit''' directive.
 
:'''Warning''': Do not be tempted to set the value of MaxClients higher than your available memory as your server will consume more RAM than available and start to swap to disk.
* Consider reducing the '''number of modules''' that Apache loads in the httpd.conf file to the minumum necessary to reduce the memory needed.
* Use the '''latest version of Apache''' - Apache 2 has an improved memory model which reduces memory usage further.
* For Unix/Linux systems, consider lowering '''MaxRequestsPerChild''' in httpd.conf to as low as 20-30 (if you set it any lower the overhead of forking begins to outweigh the benefits).
* For a heavily loaded server, consider setting '''KeepAlive Off''' (do this only if your Moodle pages do not contain links to resources or uploaded images) or lowering the '''KeepAliveTimeout''' to between 2 and 5. The default is 15 (seconds) - the higher the value the more server processes will be kept waiting for possibly idle connections. A more accurate value for KeepAliveTimeout is obtained by observing how long it takes your users to download a page. After altering any of the KeepAlive variables, monitor your CPU utilization as there may be an additional overhead in initiating more worker processes/threads.
* As an alternative to using KeepAlive Off, consider setting-up a '''Reverse Proxy server''' infront of the Moodle server to cache HTML files with images. You can then return Apache to using keep-alives on the Moodle server.
* If you do not use a .htaccess file, set the '''AllowOverride''' variable to AllowOverride None to prevent .htaccess lookups.
* Set '''DirectoryIndex''' correctly so as to avoid content-negotiation. Here's an example from a production server:
DirectoryIndex index.php index.html index.htm
* Unless you are doing development work on the server, set '''ExtendedStatus Off''' and disable mod_info as well as mod_status.
* Leave '''HostnameLookups Off''' (as default) to reduce DNS latency.
* Consider reducing the value of '''TimeOut''' to between 30 to 60 (seconds).
* For the '''Options directive''', avoid Options Multiviews as this performs a directory scan. To reduce disk I/O further use
Options -Indexes FollowSymLinks
*'''Caching (unsupported)''' - ''Please note that this kind of caching may create major problems during upgrades.'' Apache can be told to make pages load a lot faster by specifying that the browser should cache some various page elements such as images and reuse them from local memory rather than ask for them again every time a page is requested. How to do this varies slightly between OSes but there are two basic steps:


# Install and enable mod_expires - refer to documentation or man pages
==Betriebssystem==
# Add this code to the virtual server config file within the <directory> section for the root directory (or within the .htaccess file if AllowOverrides is On):
* Sie können für den Moodle-Server folgende Betriebssysteme verwenden: [http://en.wikipedia.org/wiki/Linux Linux] verwenden (empfohlen), Unix, Windows oder Mac OS X.
<IfModule mod_expires.c>
*Linux und Unix brauchen generell weniger Speicher als Mac OS X oder Windows Servers. Darüber hinaus hat Linux keine Lizenzgebühren. Wenn Sie eine große Anzahl von Prozessoren mit SMP haben, dann können Sie auch ein hoch angepasstes Betriebssystem verwenden, z.B. [http://en.wikipedia.org/wiki/Solaris_Operating_Environment Solaris].
  ExpiresActive On
* Beachten Sie die Optimierungsempfehlungen Ihres Betriebssystems und des Herstellers.
  ExpiresDefault "access plus 1 seconds"
** Für Linux lesen Sie die Informationen auf dieser [http://linuxperf.sourceforge.net/ Linux Performance Team] Website.
  ExpiresByType text/html "access plus 1 seconds"
** Für Linux testen Sie den Befehl <code>hdparm</code>, z.B. können Sie den Befehl <code>hdparm -m16 -d1</code> verwenden, um Lesen und Schreiben auf mehreren Sektoren und DMA zu aktivieren. Mounten Sie Festplatten mit den Optionen <code>async</code> und <code>noatime</code>.
  ExpiresByType image/gif "access plus 1 week"
** Für Windows konfigurieren Sie den Server so, dass er für Netzwerk-Applikationen optimiert ist (Systemsteuerung, Netzwerkverbindungen, LAN-Verbindungen, Eigenschaften, Datei & Drucker Sharing für Microsoft Netzwerke, Eigenschaften, Optimierung). Sie können auch auf der [http://technet.microsoft.com/ Microsoft TechNet Website] nach Optimierungsanleitungen suchen.
  ExpiresByType image/jpeg "access plus 1 week"
  ExpiresByType image/png "access plus 1 week"
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 week"
  ExpiresByType application/x-javascript "access plus 1 week"
  ExpiresByType text/xml "access plus 1 seconds"
</IfModule>


The effect is to make everything stay in the cache except HTML and XML, which change dynamically. It's possible to gain a several hundred percent decrease in load times this way. Adjust the cache times according to how often your images etc change.
==Webserver-Geschwindigkeit==
Wenn Sie [http://www.mozilla.com/ Firefox] und die [https://addons.mozilla.org/en-US/firefox/addon/1843 Firebug] Erweiterung  installieren, können Sie die Zeiten beobachten, die es dauert einzelne Komponenten einer Moodle-Seite zu laden. Die [https://addons.mozilla.org/en-US/firefox/addon/5369 Yslow] Erweiterung bewertet Ihre Seite in Bezug auf die [http://www.skrenta.com/2007/05/14_rules_for_fast_web_pages_by_1.html 14 Regeln für schnelle Webseiten]. Siehe auch [http://developer.yahoo.com/performance/rules.html Best Practices for Speeding Up Your Web Site], für schnelles Laden von Webseiten.


* Compression reduces response times by reducing the size of the HTTP response
===PHP-Geschwindigkeit===
# Install and enable mod_deflate - refer to documentation or man pages
* Wir empfehlen dringend, einen PHP-Accelerator zu verwenden, um die CPU-Last zu reduzieren, z.B. [http://pecl.php.net/apc APC], [http://www.php-accelerator.co.uk/ PHPA], [http://trac.lighttpd.net/xcache/ Xcache], [http://sourceforge.net/projects/wincache WinCache] oder [http://eaccelerator.net/ eAccelerator]. Achten Sie darauf, dass der PHP-Accelerator für die PHP-Version Ihres Moodle-Servers funktioniert. Beachten Sie auch, dass Turck MMCache [http://turckmmcache.exeprod.com/TheManifestoEnglish nicht mehr weiterentwickelt wird] und Fehler bei PHP 5 verursachen kann.
# Add this code to the virtual server config file within the <directory> section for the root directory (or within the .htaccess file if AllowOverrides is On):
* Verbesserungen bei Lese-/Schreibzugriffen können Sie erzielen, wenn Sie gecachte PHP-Seiten in einem TMPFS-Dateisystem ablegen. Beachten Sie jedoch, dass die Cache-Inhalte verloren gehen, wenn Ihr Server von einem Stromausfall betroffen ist oder wenn Sie den Server neu starten.
<ifModule mod_deflate.c>
* Die PHP-Geschwindigkeit verbessert sich, wenn PHP als ein '''Apache/IIS ISAPI Modul''' installiert ist (und nicht als CGI).
  AddOutputFilterByType DEFLATE text/html text/plain text/xml
* Prügen Sie die PHP-Einstellung '''memory_limit''' in der PHP-Konfigurationsdatei ''php.ini''. Für PHP 5 werden 128 MB empfohlen, siehe [http://www.php.net/ChangeLog-5.php PHP 5.2.1] .
</ifmodule>
* Siehe auch [[PHP-Versionen für Moodle]]


More info: [http://www.metaskills.net/blog/heuristics/sysadmin/how-to-control-browser-caching-with-apache-2 www.metaskills.net]
===Installationsanleitungen===
* [http://2bits.com/articles/installing-php-apc-gnulinux-centos-5.html APC unter CentOS 5.x (linux)]
* [http://fplanque.com/dev/linux/install-apc-php-cache-debian-lenny APC unter Debian (linux)]
* [http://www.linuxtuts.net/211-installing-memcached-php5-memcache-module-debian-apache2.html MemCache Modul unter Debian (Apache2 und PHP5)]
* [http://noveckg.blogspot.com/2010/03/installing-memcached-on-centos-5x.html Memcache unter CentOS 5.x (linux)]
* [http://noveckg.blogspot.com/2010/02/installing-eaccelerator-cache-for-php.html eAccelerator unter CentOS 5.x (linux)]
* [https://docs.moodle.org/en/Installing_eAccelerator_In_Ubuntu_Server/ Installing eAccelerator unter Ubuntu Server (linux)]


===IIS performance===
===Apache-Geschwindigkeit===
All alter this location in the registry:
* Wenn Sie Apache auf einem Windows-Server nutzen, verwenden Sie die Pakete der [http://www.apachelounge.com Apache Lounge], die [http://moodle.org/mod/forum/discuss.php?d=93358 eine bessere Geschwindigkeit und Stabilität] haben als die offiziellen Apache-Download-Pakete. Beachten Sie jedoch, dass es sich dabei um inoffizielle Pakete handelt, die evtl. nicht so aktuell sind wie die offiziellen Apache-Pakete.
HKLM\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters\
* Setzen Sie die Einstellung '''MaxClients''' Direktive gemäß der Formel (verwende nur 80% des verfügbaren Speichers, um Reserven zu haben):
* The equivalent to KeepAliveTimeout is '''ListenBackLog''' (IIS - registry location is HKLM\ SYSTEM\ CurrentControlSet\ Services\ Inetinfo\ Parameters). Set this to between 2 to 5.
    MaxClients = Verfügbarer Speicher * 80% / Maximaler Speicherbedarf der Apache-Prozesse
*Change the '''MemCacheSize''' value to adjust the amount of memory (Mb) that IIS will use for its file cache (50% of available memory by default).
:Der Speicherbedarf der Apache-Prozesse beträgt normalerweise 10MB, aber Moodle kann schnell bis zu 100MB pro Prozess benötigen. Als Faustregel können Sie den verfügbaren Speicher in MB durch 100 teilen, um einen konservativen Wert für die '''MaxClients''' zu erhalten. Sehr wahrscheinlich können Sie den Standardwert von 150 auf einem Moodle-Server nach unten anpassen. Um eine genauere Schätzung zu erhalten, geben Sie folgenden Befehl auf der Kommandozeile ein:
*Change the '''MaxCachedFileSize''' to adjust the maximum size of a file cached in the file cache in bytes. Default is 262,144 (256K).
    #ps -ylC httpd --sort:rss
*Create a new DWORD called '''ObjectCacheTTL''' to change the length of time (in milliseconds) that objects in the cache are held in memory. Default is 30,000 milliseconds (30 seconds).


===Lighttpd, NginX and Cherokee performance===
:Wenn Sie den Wert für die '''MaxClients''' auf über 256 erhöhen, müssen Sie die Einstellung '''ServerLimit''' anpassen.  
You can increase server performance by using a '''light-weight''' webserver like [http://www.lighttpd.net/ lighttpd],  [http://nginx.net/ nginx] or [http://www.cherokee-project.com/ cherokee] in combination with PHP in FastCGI-mode. Lighttpd was originally created as a proof-of-concept[http://www.lighttpd.net/story] to address the [http://www.kegel.com/c10k.html C10k problem] and while primarily recommended for memory-limited servers, its design origins and asynchronous-IO model make it a suitable and proven[http://blog.lighttpd.net/articles/2006/12/28/lighttpd-powers-5-alexa-top-250-sites] alternative HTTP server for high-load websites and web apps, including Moodle. See the [[lighttpd | MoodleDocs Lighttpd page]] for additional information, configuration example and links.


Alternatively, both [http://www.lighttpd.net/ lighttpd] and [http://nginx.net/ nginx] are capable of performing as a load-balancer and/or reverse-proxy to alleviate load on back-end servers[http://www.linuxjournal.com/article/10108], providing benefit without requiring an actual software change on existing servers.
:'''Achtung''': Setzen Sie den Wert von '''MaxClients''' nicht höher, als der Speicher Ihres Servers verarbeiten kann, sonst werden Daten auf die SWAP ausgelagert, was wiederum zu erheblichen Geschwindigkeitseinbußen führt.


Do note that these are likely to be the least tested server environments of all particularly if you are using advanced features such as web services and/or Moodle Networking. They are probably best considered for heavily used Moodle sites with relatively simple configurations.
* Reduzieren Sie die '''Anzahl der Module''', die Apache in der ''httpd.conf'' Konfigurationsdatei lädt, auf das nötige Minimum, um den benötigten Speicherbedarf zu minimieren.
* Verwenden Sie die '''aktuellste Version von Apache''' - Apache 2 hat das Speichermodell verbessert, was den Speicherbedarf weiter reduziert.
* Bei Unix/Linux-Systemen können Sie den Wert von '''MaxRequestsPerChild''' in der ''httpd.conf'' Konfigurationsdatei auf 20-30 (bei geringen Werten wird der Vorteil wieder aufgehoben).
* Bei einem stark belasteten Server können Sie '''KeepAlive Off''' setzen (aber nur wenn Ihre Moodle-Seiten keine Links zu Ressourcen oder hochgeladenen Bildern enthalten) oder den Wert von '''KeepAliveTimeout''' auf 2-5 reduzieren. Der Standardwert ist 15 (Sekunden) - je größer der Wert, desto mehr Serverprozesse werden gehalten, die auf mögliche Leerverbindungen warten. Einen genaueren Wert für ''KeepAliveTimeout'' erhält man, wenn Sie beobachten, wie lange das Laden einer Seite dauert. Wenn Sie den Wert von ''KeepAlive'' ändern, beobachten Sie Ihre CPU Last, da es zusätzlichen Aufwand bedeutet, mehr Prozesse / Threads zu initiieren.
* Eine Alternative zu ''KeepAlive Off'' ist, einen '''Reverse Proxy Server''' vor den Moodle-Server zu setzen, um HTML-Dateien mit Bildern zu cachen. Dann können Sie Apache so konfigurieren, dass es Keep-Alives auf den Moodle-Server.
* Wenn Sie keine ''.htaccess'' Datei verwenden, setzen Sie '''AllowOverride None''', um .htaccess Lookups zu verhindern.
* Setzen Sie den Wert von '''DirectoryIndex''' korrekt. Hier ist ein Beispiel für einen Produktiv-Server:
    DirectoryIndex index.php index.html index.htm
* Solange Sie den Server nicht als Entwicklungsumgebung nutzen, setzen Sie '''ExtendedStatus Off''' und deaktivieren Sie ''mod_info'' und ''mod_status''.
* Lassen Sie '''HostnameLookups Off''', um die DNS Wartezeit zu reduzieren.
* Reduzieren Sie den Wert von '''TimeOut''' auf 30-60 (Sekunden).
* Bei der Einsetllung '''Options directive''' vermeiden Sie ''Options Multiviews'' (dadurch werden Verzeichnisse gescannt). Um den Plattenzugriff weiter zu reduzieren, verwenden Sie
    Options -Indexes FollowSymLinks
*'''Caching (unsupported)''' - '''Achtung''': Diese Art des Cachings kann große Probleme bei Aktualisierungen verursachen. Apache kann Seite wesentlich schneller laden, wenn ers o konfiguriert wird, dass der Browser einige Seitenelemente (z.B. Bilder) cacht und diese bei der Anzeige aus dem lokalen Speicher holt, statt sie jedes Mal neu zu laden. Diese Konfiguration hängt vom Betriebssystem ab, aber die folgenden zwei Schritte sind grundsätzlich nötig:
:# Installieren und aktivieren Sie ''mod_expires'' - detaillierte Informationen finden Sie in der Dokumentation.
:# Fügen Sie folgenden Code in die Konfigurationsdatei des virtuellen Servers im <code><directory></code> Abschnitt des Root Directory  ein (oder in einer ''.htaccess'' Datei, falls ''AllowOverrides On''):
    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType text/html "access plus 1 seconds"
    ExpiresByType image/gif "access plus 1 week"
    ExpiresByType image/jpeg "access plus 1 week"
    ExpiresByType image/png "access plus 1 week"
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType text/javascript "access plus 1 week"
    ExpiresByType application/x-javascript "access plus 1 week"
    ExpiresByType text/xml "access plus 1 seconds"
    </IfModule>


==Database performance==
:Auf diese Wesie wird alles im Cache gehalten außer HTML und XML. Auf diese Weise können Sie erhebliche Verbesserungen beim Laden von Seiten erzielen. Passen Sie die Cache-Zeit an, in Abhängigkeit davon, wie oft sich Ihre Bilder ändern.
* Kompression reduziert die Antwortzeiten durch Reduzieren der Größe der HTTP Antworten.
:# Installieren und aktivieren Sie ''mod_deflate'' - detaillierte Informationen finden Sie in der Dokumentation.
:# Fügen Sie folgenden Code in die Konfigurationsdatei des virtuellen Servers im <directory> Abschnitt des Root Directory  ein (oder in einer ''.htaccess'' Datei, falls ''AllowOverrides On''):
    <ifModule mod_deflate.c>
      AddOutputFilterByType DEFLATE text/html text/plain text/xml
    </ifmodule>


Moodle contains a script which will display some key database performance statistics from the [http://phplens.com/lens/adodb/docs-perf.htm ADOdb performance monitor]. Run the script in your browser as in the following example:
:Weitere Informationen finden Sie unter [http://www.metaskills.net/blog/heuristics/sysadmin/how-to-control-browser-caching-with-apache-2 www.metaskills.net]


http://www.mymoodle.com/admin/dbperformance.php
===IIS-Geschwindigkeit===
*Das Pendant zu ''KeepAliveTimeout'' ist '''ListenBackLog''' (IIS - Registry Location ist ''HKLM >SYSTEM > CurrentControlSet > Services > Inetinfo > Parameters''). Setzen Sie den Wert auf 2-5.
*Ändern Sie den Wert von '''MemCacheSize''', um den Speicher (MB) anzupassen, den IIS für den Datei-Cache verwenden soll (standardmäßig 50% des vorhandenen Speicherplatzes).
*Ändern Sie den Wert von '''MaxCachedFileSize''', um die maximale Dateigröße im Datei-Cache anzupassen. Der Standardwert ist 262,144 (256 KB).
*Legen Sie ein neues DWORD '''ObjectCacheTTL''' an, um die Zeitdauer (in Millisekunden) anzupassen, die Objekte im Cache gespeichert werden. Der Standardwert ist 30000 ms (30 Sekunden).  


Use the data displayed as a guide to tune and improve the performance of your database server.
===Lighttpd-, NginX- und Cherokee-Geschwindigkeit===
Sie können die Servergeschwindigkeit verbessern, wenn Sie einen '''leichtgewichtigen''' Webserver wie z.B. [http://www.lighttpd.net/ Lighttpd],  [http://nginx.net/ NginX] oder [http://www.cherokee-project.com/ Cherokee] in Kombination mit PHP im FastCGI-Modus. Lighttpd wurde ursprünglich als Proof-of-Concept entwickelt (siehe [http://www.lighttpd.net/story]), um das [http://www.kegel.com/c10k.html C10k Problem] zu lösen. Zunächst für speicherbegrenzte Server empfohlen, stellt er wegen seines Designs und seines asynchronen IO-Modells eine  geprüfte Alternative zu herkömmlichen HTTP-Servern dar (siehe [http://blog.lighttpd.net/articles/2006/12/28/lighttpd-powers-5-alexa-top-250-sites]), die für häufig geladene Webseiten und Web-Applikationen wie Moodle geeignet ist. Siehe [[lighttpd | MoodleDocs Lighttpd page]] für weitere Informationen, Konfiguration und Beispiele.


===MySQL performance===
Weitere Alternativen sind [http://www.lighttpd.net/ Lighttpd] und [http://nginx.net/ NginX], die als Load-Balancer und/oder Reverse-Proxy eingesetzt werden können, um die Last auf Backend-Servern zu verringen (siehe [http://www.linuxjournal.com/article/10108]). Sie bieten Vorteile, ohne dass die auf dem Server vorhandene Software geändert werden muss.


The following are MySQL specific settings which can be adjusted for better performance in your my.cnf (my.ini in Windows). The file contains a list of settings and their values. To see the current values use these commands
Beachten Sie, dass die genannten Server wahrscheinlich die am wenigsten getesteten Server sind, wenn Sie komplexere Funktionalitäten von Moodle verwenden wollen (z.B. [[Webservices]] oder [[Moodle-Netzwerk]]). Wenn Sie dagegen eine stark besuchte Moodle-Site mit einer Standardkonfiguration betreiben, dann sind diese Webserver bestens geeignet.
SHOW STATUS;
SHOW VARIABLES;
'''Important''': You must make backups of your database before attempting to change any MySQL server configuration. After any change to the my.cnf, restart mysqld.


If you are able, the [http://mysqltuner.com/ MySQLTuner] tool can be run against your MySQL server and will calculate appropriate configuration values for most of the following settings based on your current load, status and variables automatically.
==Datenbank-Geschwindigkeit==
Moodle enthält ein Skript, das einige wichtige Statistiken zur Datenbank-Geschwindigkeit aus dem [http://phplens.com/lens/adodb/docs-perf.htm ADOdb Performance Monitor] anzeigt. Das Skript können Sie im Browser aufrufen:


* Enable the '''query cache''' with
    http://www.mymoodle.com/admin/dbperformance.php
query_cache_type = 1.
For most Moodle installs, set the following:
query_cache_size = 36M
query_cache_min_res_unit = 2K.
The query cache will improve performance if you are doing few updates on the database.
* Set the '''table cache''' correctly. For Moodle 1.6 set
table_cache = 256 #(table_open_cache in MySQL > 5.1.2)
(min), and for Moodle 1.7 set
table_cache = 512 #(table_open_cache in MySQL > 5.1.2)
(min). The table cache is used by all threads (connections), so monitor the value of opened_tables to further adjust - if opened_tables > 3 * table_cache(table_open_cache in MySQL > 5.1.2) then increase table_cache upto your OS limit. Note also that the figure for table_cache will also change depending on the number of modules and plugins you have installed. Find the number for your server by executing the mysql statement below. Look at the number returned and set table_cache to this value.
mysql>SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='yourmoodledbname';
* Set the '''thread cache''' correctly. Adjust the value so that your thread cache utilization is as close to 100% as possible by this formula:
thread cache utilization (%) = (threads_created / connections) * 100
* The '''key buffer''' can improve the access speed to Moodle's SELECT queries. The correct size depends on the size of the index files (.myi) and in Moodle 1.6 or later (without any additional modules and plugins), the recommendation for this value is key_buffer_size = 32M. Ideally you want the database to be reading once from the disk for every 100 requests so monitor that the value is suitable for your install by adjusting the value of key_buffer_size so that the following formulas are true:
key_read / key_read_requests < 0.01
key_write / key_write_requests <= 1.0
* Set the '''maximum number of connections''' so that your users will not see a "Too many connections" message. Be careful that this may have an impact on the total memory used. MySQL connections usually last for milliseconds, so it is unusual even for a heavily loaded server for this value to be over 200.
* Manage '''high burst activity'''. If your Moodle install uses a lot of quizzes and you are experiencing performance problems (check by monitoring the value of threads_connected - it should not be rising) consider increasing the value of back_log.
* '''Optimize your tables weekly and after upgrading Moodle'''. It is good practice to also optimize your tables after performing a large data deletion exercise, e.g. at the end of your semester or academic year. This will ensure that index files are up to date. Backup your database first and then use:
mysql>CHECK TABLE mdl_tablename;
mysql>OPTIMIZE TABLE mdl_tablename;
:The common tables in Moodle to check are mdl_course_sections, mdl_forum_posts, mdl_log and mdl_sessions (if using dbsessions). Any errors need to be corrected using REPAIR TABLE (see the [http://dev.mysql.com/doc/refman/5.0/en/repair-table.html MySQL manual] and this [http://moodle.org/mod/forum/discuss.php?d=58208#p279638 forum script]).
* '''Maintain the key distribution'''. Every month or so it is a good idea to stop the mysql server and run these myisamchk commands.
#myisamchk -a -S /pathtomysql/data/moodledir/*.MYI
:'''Warning''': You must stop the mysql database process (mysqld) before running any myisamchk command. If you do not, you risk data loss.
* Reduce the number of '''temporary tables saved to disk'''. Check this with the created_tmp_disk_tables value. If this is relatively large (>5%) increase tmp_table_size until you see a reduction. Note that this will have an impact on RAM usage.


===PostgreSQL performance===
Verwenden Sie die damit generierten Daten als Anhaltspunkte, wenn Sie Ihren Datenbank-Server optimieren.


There are some good papers around on tuning PostgreSQL, and Moodle's case does not seem to be different to the general case.
===MySQL-Geschwindigkeit===


The first thing to recognise is that if you really need to worry about tuning you should be using a separate machine for the database server. If you are not using a separate machine then the answers to many performance questions are substantially muddied by the memory requirements of the rest of the application.
Die folgenden MySQL-spezifischen Einstellungen können in der MySQL-Konfigurationsdatei ''my.cnf'' (''my.ini'' unter Windows) angepasst werden, um die Datenbank-Geschwindigkeit zu verbessern. Um die aktuellen Werte dieser Einstellungen zu sehen, nutzen Sie die folgenden Befehle:
    SHOW STATUS;
    SHOW VARIABLES;


You should probably '''enable autovacuum''', unless you know what you are doing. Many e-learning sites have predictable periods of low use, so disabling autovacuum and running a specific vacuum at those times can be a good option. Or perhaps leave autovacuum running but do a full vacuum weekly in a quiet period.
'''Wichtig''': Erstellen Sie '''immer''' eine Sicherung der Moodle-Datenbank, bevor Sie die Konfiguration Ihres MySQL-Servers ändern. Nach Konfigurationsänderungen müssen Sie den MySQL-Server ''mysqld'' neu starten.


Set '''shared_buffers''' to something reasonable. For versions up to 8.1 my testing has shown that peak performance is almost always obtained with buffers < 10000, so if you are using such a version, and have more than 512M of RAM just set shared_buffers to 10,000 (8MB).
Sie können das [http://mysqltuner.com/ MySQLTuner] Tool auf Ihrem MySQL-Server laufen lassen. Es berechnet geeignete Werte für viele der folgenden Einstellungen automatisch.


The buffer management had a big overhaul in 8.2 and "reasonable" is now a much larger number. I have not conducted performance tests with 8.2, but the recommendations from others are generally that you should now scale shared_buffers much more with memory and may continue to reap benefits even up to values like 100,000 (80MB). Consider using 1-2% of system RAM.
* Aktivieren Sie '''query cache''':
    query_cache_type = 1.
:Die meisten Moodle-Installationen verwenden folgende Werte:
    query_cache_size = 36M
    query_cache_min_res_unit = 2K.
* '''table cache''': Der Tabellen-Cache wird von allen Threads (Datenbank-Verbindungen) verwendet. Beobachten Sie den Wert von ''opened_tables'' für weitere Anpassungen: Wenn ''opened_tables > 3 * table_cache'' ist, dann erhöhen Sie den Wert von ''table_cache'' bis zur Grenze, die das Betriebssystem setzt. Der Wert von ''table-cache'' hängt auch von der Zahl der Module und Plugins ab, die Sie in Moodle installiert und aktiviert haben. Einen geeigneten Wert für den ''table_cache'' liefert folgender Befehl: upto your OS limit. Note
    mysql>SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='yourmoodledbname';
* '''thread cache''': Passen Sie den Wert so an, dass die Cache-Nutzung bei nahe 100% liegt. Sie können folgende Formel verwenden:
    thread cache utilization (%) = (threads_created / connections) * 100
* '''key buffer''': Diese Einstellung kann die Zugriffsgeschwindigkeit bei SELECT-Anfragen von Moodle verbessern. Die richtige Größe hängt von der Größe der Index-Dateien *.myi ab. Verwenden Sie folgende Formel:
    key_read / key_read_requests < 0.01
    key_write / key_write_requests <= 1.0
* '''maximum number of connections''': Setzen Sie den Wert so, dass Ihre Nutzer/innen keine Fehlermeldung "Zu viele Verbindungen" ("Too many connections") sehen. Beachten Sie, dass dieser Wert Einfluss auf die gesamte Speichernutzung hat.  MySQL-Verbindungen dauern normalerweise Millisekunden, d.h. sekbst bei stark belasteten Servern sind Werte über 200 ungewöhnlich.
* '''high burst activity''': Wenn es in Ihrer Moodle-Installationen viele Tests gibt und Sie Geschwindigkeitsprobleme haben (beobachten Sie den Wert von ''threads_connected'' - er sollte nicht wachsen), können Sie den Wert von ''back_log'' erhöhen.
* '''Optimieren Sie Ihre Datenbank-Tabellen wöchentlich und nach der Aktualisierung von Moodle'''. Sie sollten Ihre Tabellen auch optimieren, nachdem viele Daten gelöscht wurden, z.B. am Ende des Schul- oder Studienjahres. Die Optimierung stellt sicher, dass die Index-Dateein aktuell sind. Sichern Sie vorher Ihre Datenbank und nutzen Sie dann folgende Befehle:
    mysql>CHECK TABLE mdl_tablename;
    mysql>OPTIMIZE TABLE mdl_tablename;
:Die wichtigsten Tabellen, die Sie so optimieren sollten, sind ''mdl_course_sections, mdl_forum_posts, mdl_log'' und ''mdl_sessions'' (wenn Sie dbsessions verwenden). Jeder Fehler muss mit dem SQL-Befehl REPAIR TABLE behoben werden (siehe [http://dev.mysql.com/doc/refman/5.0/en/repair-table.html MySQL Manual] und diesen [http://moodle.org/mod/forum/discuss.php?d=58208#p279638 Diskussionsbeitrag]).
* '''Zahl der temporären Tabellen, die auf der Festplatte gespeichert werden, reduzieren''': Prüfen Sie dies mit dem Wert von ''created_tmp_disk_tables''. Wenn der Wert relativ hoch ist (>5%), erhöhen Sie den Wert von ''tmp_table_size'', bis bis eine Reduzierung von ''created_tmp_disk_tables'' erkennen. Beachten Sie, dass dies die Nutzung des RAM beeinflusst.


PostgreSQL will also assume that the operating system is caching its files, so setting '''effective_cache_size''' to a reasonable value is also a good idea. A reasonable value will usually be (total RAM - RAM in use by programs). If you are running Linux and leave the system running for a day or two you can look at 'free' and under the 'cached' column you will see what it currently is. Consider taking that number (which is kB) and dividing it by 10 (i.e. allow 20% for other programs cache needs and then divide by 8 to get pages). If you are not using a dedicated database server you will need to decrease that value to account for usage by other programs.
===PostgreSQL-Geschwindigkeit===
Es gibt einige gute Artikel zu Geschwindigkeitsoptimierungen für PostgreSQL.


Some other useful parameters that can have positive effects, and the values I would typically set them to on a machine with 4G RAM, are:
Bei Geschwindigkeitsproblemen sollten Sie als erste Maßnahme eine separate Maschine für den Datenbank-Server aufsetzen.


work_mem = 10240
Sie sollten '''autovacuum aktivieren''', solange Sie wissen, was Sie tun. Viele E-Learning-Systeme haben vorhersehbare Zeiten mit geringer Nutzung. In diesen Zeiten können Sie ''autovacuum'' deaktivieren und einen festen Wert verwenden. Oder Sie lassen autovacuum laufen und lassen in den ruhigen Zeiten wöchentlich ein ''full vacuum'' laufen.


That's 10M of RAM to use instead of on-disk sorting and so forth. That can give a big speed increase, but it is per connection and 200 connections * 10M is 2G, so it can theoretically chew up a lot of RAM.
Setzen Sie den Wert von '''shared_buffers''' richtig (1-2% vom RAM).


maintenance_work_mem = 163840
PostgreSQL nimmt an, dass das Betriebssystem Dateien cacht, setzen Sie also den Wert von '''effective_cache_size''' richtig (Gesamt RAM - RAM, der von Applikationen verbraucht wird).


That's 160M of RAM which will be used by (e.g.) VACUUM, index rebuild, cluster and so forth. This should only be used periodically and should be freed when those processes exit, so I believe it is well worth while.
Es gibt weitere nützliche Parameter, z.B. bei einer Maschine mit 4G RAM:


max_fsm_pages = 100000
    work_mem = 10240
max_fsm_relations = 5000


These are used to hold the free-space map, and if they are too small you will see performance degradation after the database has been operating for some time. The exact numbers to set can be gleaned from the output of VACUUM VERBOSE, which prints the required FSM pages at the end of it's run. The 5x increase seems to be useful for a Moodle installation, from experience.
Das sind 10M vom RAM. Das kann zu hohen Geschwindigkeitsverbesserungen führen, aber der Wert gilt pro Verbindung und 200 Verbindungen * 10M ergeben 2G, so dass theoretisch viel RAM


wal_buffers = 64
    maintenance_work_mem = 163840


These buffers are used for the write-ahead log, and there have been a number of reports on the PostgreSQL mailing lists of improvement from this level of increase.
Das sind 160M vom RAM, die z.B. von VACUUM genutzt werden.


This is a little out of date now (version 8.0) but still worth a read: http://www.powerpostgresql.com/Docs
    max_fsm_pages = 100000
    max_fsm_relations = 5000


And there is lots of good stuff here as well: http://www.varlena.com/GeneralBits/Tidbits/index.php
Wenn diese Werte zu klein gewählt werden, geht die Geschwindigkeit herunter, wenn die Datenbank eine Weile läuft. Die passenden Werte können aus der Ausgabe von VACUUM VERBOSE abgeleitet werden, die die erforderlichen FSM Seiten am Ende ausgibt. Aus Erfahrung sollten Sie für Standard-Moodle-Installationen die Werte mit Faktor 5 multiplizieren.  


''Based on Andrew McMillan's post at [http://moodle.org/mod/forum/discuss.php?d=68558 Tuning PostgreSQL] forum thread.''
    wal_buffers = 64


===Other database performance links===
Diese Buffers werden für write-ahead log verwendet.
* Consider using a '''distributed cacheing system''' like [http://en.wikipedia.org/wiki/Memcached memcached] but note that memcached does not have any security features so it should be used behind a firewall.
* Consider using PostgreSQL. See [[Arguments in favour of PostgreSQL]] and [http://moodle.org/mod/forum/discuss.php?d=49195 how to migrate from MySQL to PostgreSQL] (forum discussion).
* [[Increasing the database connection lifetime | Try increasing the database connection lifetime]]
* [http://dev.mysql.com/doc/refman/5.0/en/server-parameters.html General advice on tuning MySQL parameters] (advice from the MySQL manual)
* [http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/ InnoDB performance optimization] taken from the [http://www.mysqlperformanceblog.com/ MySQL performance blog] site.


==Performance of different Moodle modules==
Siehe auch:
*http://www.powerpostgresql.com/Docs
*http://www.varlena.com/GeneralBits/Tidbits/index.php
*[http://moodle.org/mod/forum/discuss.php?d=68558 Tuning PostgreSQL]


Moodle's activity modules, filters, and other plugins can be activated/deactivated. If necessary, you may wish to deactivate some features (such as chat) if not required - but this isn't necessary. Some notes on the performance of certain modules:
===Geschwindigkeitshinweise zu anderen Datenbanksystemen===
* Erwägen Sie die Nutzung eines '''verteilten Cacheing-Systems''' wie z.B. [http://en.wikipedia.org/wiki/Memcached Memcached]. Beachten Sie jedoch, dass Memcached keinerlei Sicherheitsfunktionalität hat, so dass es nur hinter einer Firewall betrieben werden sollte.
* Erwägen Sie die Nutzung von PostgreSQL. Siehe diesen Diskussionsbeitrag [http://moodle.org/mod/forum/discuss.php?d=49195 how to migrate from MySQL to PostgreSQL].
* [http://dev.mysql.com/doc/refman/5.0/en/server-parameters.html General advice on tuning MySQL parameters] - Hinweis aus dem MySQL Manual
* [http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/ InnoDB performance optimization] auf der [http://www.mysqlperformanceblog.com/ MySQL performance blog] Site.


* The '''Chat''' module is [http://moodle.org/mod/forum/discuss.php?d=37979&parent=175079 said] to be a hog in terms of frequent HTTP requests to the main server. This can be reduced by setting the module to use ''Streamed'' updates, or, if you're using a Unix-based webserver, by running the chat in daemon mode. When using the Chat module use the configuration settings to tune for your expected load. Pay particular attention to the ''chat_old_ping'' and ''chat_refresh'' parameters as these can have greatest impact on server load.
==Geschwindigkeit der verschiedenen Moodle-Module==
* The '''Quiz''' module is known to stretch database performance. Try to optimise your database server by tuning. See [http://moodle.org/mod/forum/discuss.php?d=25616&parent=120770 for a brief report on performance for 55 students simultaneously using quizzes]
** See this Case Study for an extensive server stress test with 300 quiz users.[http://moodle.org/mod/forum/discuss.php?d=68579]  And this accompanying report on network traffic and server loads. [http://elearning.sgu.ac.jp/doc/PT/]
* The Moodle '''Cron''' task is triggered by calling the script ''cron.php''. If this is called over HTTP (e.g. using wget or curl) it can take a large amount of memory on large installations. If it is called by directly invoking the php command (e.g. ''php -f /path/to/moodle/directory/admin/cron.php'') efficiency can be much improved.
* The '''Recent activities''' block is consuming to much resources if you have huge number of records <code>mdl_log</code>. this is being tested to optimize the SQL query.


==Moodle Image Optimization==
In Moodle können Sie einzelne [[Aktivitäten]], [[Filter]] und andere Plugins aktivieren bzw. deaktivieren. Generell sollten Sie immer nur die Elemente aktivieren, die Sie tatsächlich nutzen wollen. Hier noch einige Empfehlungen zu ausgewählten Aktivitäten:
* Der [[Chat]] ist in Bezug auf häufige HTTP-Anfragen sehr ressourcen-intensiv (siehe [http://moodle.org/mod/forum/discuss.php?d=37979&parent=175079 diese Diskussion]). Sie können die Last reduzieren, indem Sie als Chat-Methode ''Ajax-Chat'' oder ''Chat-Server-Daemon'' (bei Unix-basierten Webservern) verwenden. Prüfen Sie auch die Einstellung ''Timeout'' und ''Aktualisierung Chat'' in den [[Chat konfigurieren|systemweiten Chat-Einstellungen]], da diese Parameter großen Einfluss auf die Serverlast haben.
* [[Test|Tests]] beeinträchtigen die Datenbank-Geschwindigkeit. Versuchen Sie, Ihren Datenbank-Server zu optimieren. Siehe diesen Diskussionsbeitrag [http://moodle.org/mod/forum/discuss.php?d=25616&parent=120770 for a brief report on performance for 55 students simultaneously using quizzes]. Eine Fallstudie zur Geschwindigkeit bei Tests in Moodle mit 300 Teilnehmer/innen finden Sie [http://moodle.org/mod/forum/discuss.php?d=68579 hier] , das zugehörige Protokoll zu Netzwerkverkehr und Serverlast ist [http://elearning.sgu.ac.jp/doc/PT/ hier verfügbar].
* der [[Cron-Job]] in Moodle wird durch das PHP-Skript ''cron.php'' angestoßen. Wenn das Skript über HTTP aufgerifen wird (z.B. mit <code>wget</code> oder <code>curl</code>), kann das auf großen Moodle-Installationen zu einem hohen Speicherbedarf führen. Besser ist es, das Skript direkt über einen PHP-Befehl aufzurufen (z.B. <code>php -f /path_to_moodle_directory/admin/cron.php</code>).
* Der Block [[Neue Aktivitäten]] verbraucht viele Ressourcen, wenn die Log-Tabelle ''mdl_log'' der Moodle-Datenbank viele Einträge enthält.


The base images delivered in the original Moodle distribution package provide unoptimized graphics, most of which can benefit from lossless recompression utilizing [http://optipng.sourceforge.net/ optipng] for PNGs, [http://www.lcdf.org/gifsicle/ gifsicle] for GIFs and [http://www.kokkonen.net/tjko/projects.html jpegoptim] for JPGs.  Optimized graphics transfer faster and provide a faster perceived response for clients[http://www.websiteoptimization.com/speed/12/], especially distance learners. The following example will recursively optimize (without any loss of quality) all the graphics and image files included in a base Moodle installation directory on a server with the above commands installed and available.
==Bildoptimierung in Moodle==
Beim Standardpaket von Moodle werden Bilder in nichtoptimierter Form ausgeliefert. Viele dieser Bilder könnten von der verlustfreien Rekomprimierung mittels [http://optipng.sourceforge.net/ optipng] bei PNGs, [http://www.lcdf.org/gifsicle/ gifsicle] bei GIFs und [http://www.kokkonen.net/tjko/projects.html jpegoptim] bei JPGs profitierenOptimierte Bilder werden schneller übertragen und geladen (siehe [http://www.websiteoptimization.com/speed/12/]). Das folgende Beispiel optimiert (verlustfrei, ohne Qualitätseinbußen) alle Bilder im Moodle-Installationsverzeichnis:


<pre>
<pre>
find /example/directory/moodle-1.9 -iname *.png -exec optipng -o7 {} \;
find /example/directory/moodle -iname *.png -exec optipng -o7 {} \;
find /example/directory/moodle-1.9 -iname *.gif -exec gifsicle -O2 -b {} \;
find /example/directory/moodle -iname *.gif -exec gifsicle -O2 -b {} \;
find /example/directory/moodle-1.9 -iname *.jpg -exec jpegoptim -p {} \;
find /example/directory/moodle -iname *.jpg -exec jpegoptim -p {} \;
</pre>
</pre>


Both [http://optipng.sourceforge.net/ optipng] and [http://www.lcdf.org/gifsicle/ gifsicle] are provided in the base repositories of most newer Linux distributions; [http://www.kokkonen.net/tjko/projects.html jpegoptim] must be downloaded and installed manually.
Die Programme [http://optipng.sourceforge.net/ optipng] und [http://www.lcdf.org/gifsicle/ gifsicle] stehen in den Repositories der meisten neueren Linux-Distributionen zur Verfügung, das Programm [http://www.kokkonen.net/tjko/projects.html jpegoptim] muss manuell heruntergeladen und installiert werden.


==Siehe auch==
==Siehe auch==

Aktuelle Version vom 15. Juni 2012, 09:01 Uhr


Moodle kann so konfiguriert werden, dass es sowohl für kleine als auch große Nutzerzahlen zuverlässig und schnell läuft. Die Faktoren, die die Geschwindigkeit von Moodle beeinflussen, sind im Wesentlichen dieselben wie für allgemeine PHP- und Datenbank-basierte Systeme. Wenn Sie Ihren Moodle-Server optimieren, konzentrieren Sie sich auf die Faktoren, die für die Nutzer/innen einen spürbaren Unterschied machen. Wenn Sie z.B. viel mehr Nutzer/innen haben, die sich nur durch Moodle durchklicken, als Nutzer/innen, die tatsächlich auf die Moodle-Datenbank zugreifen, dann versuchen Sie, die Webserver-Geschwindigkeit zu verbessern.


Basis-Benchmark

Bevor Sie mit der Optimierung Ihres Servers beginnen, benötigen Sie ein Basis-Benchmark Ihres Systems. Auf diesen Benchmark-Test beziehen sich alle Optimierungsbemühungen. Für Linux können Sie LBS verwenden, unter Windows können Sie den Performance Monitor nutzen. Erst wenn Sie über quantitative Daten verfügen, wie leistungsfähig Ihr System aktuell ist, können Sie feststellen, ob Ihre Anpassungen eine Verbesserung in der Geschwindigkeit bringen oder nicht.

Alle Bemühungen, die Geschwindigkeit zu verbessern, laufen darauf hinaus, den RAM (Caching) zu verwenden und die Zugriffe auf die Festplatte zu reduzieren. Insbesondere ist es wichtig, die Verwendung von SWAP zu vermeiden oder auf ein Minimum zu beschränken. Sobald Ihr System auf den SWAP ausweicht, benötigen Sie mehr RAM.

Die "Optimierungsreihenfolge" ist in der Regel folgende: Hauptspeicher (mehr RAM), Datenträger (schnellere Festplatten, verbesserte Festplattenkonfiguration), Prozessor (mehr und schneller).

Skalierbarkeit

Das Design von Moodle (mit klarer Trennung der Anwendungsschichten) ermöglicht skalierbare Systeme.

Große Installationen trennen normalerweise den Webserver und den Datenbank-Server und betreiben diese auf separaten physikalischen Servern. Für kleinere Installationen ist diese Trennung in der Regel nicht nötig.

Sie können für eine Moodle-Installation ein Load-Balancing betreiben, indem Sie z.B. mehr als einen Webserver einsetzen. Diese Webserver sollten auf dieselbe Moodle-Datenbank und dasselbe Moodle-Datenverzeichnis zugreifen. Ebenso kann die Datenbank auf einem Cluster von Servern liegen (z.B. auf einem MySQL Cluster) - das ist jedoch keine einfache Aufgabe, hierfür benötigen Sie Unterstützung durch Experten, z.B. durch einen Moodle-Partner.

Siehe auch folgende Diskussionsbeiträge im Kurs Using Moodle auf moodle.org:

Hardware-Konfiguration

Hinweis: Die schnellste und effektivste Möglichkeit, die Geschwindigkeit des Moodle-Servers zu erhöhen, ist das Bereitstellen von mehr RAM -so viel wie möglich (mindestens 4 GB). Mehr Speicher bedeutet weniger Swapping auf die Festplatte, und der Server kann mehr Nutzer/innen gleichzeitig bedienen.

  • Verwenden Sie die besten Prozessoren und mehrere Prozessoren. Testen Sie mit dem CPU Benchmark Tool, ob Sie damit Verbesserungen in der Geschwindigkeit erreichen.
  • Wenn ie es sich leisten können, verwenden Sie SCSI Festplatten statt SATA Festplatten. SATA Festplattenbrauchen mehr Zugriffe auf die CPU, während SCSI Festplatten eigene intergrierte Prozessoren haben. Wenn Sie SATA Festplatten haben, stellen Sie sicher, dass die Festplatten und das Motherboard NCQ (Native Command Queuing) unterstützen.
  • Kaufen Sie Festplatten, die eringe Suchzeiten (seek time) haben. Dadurch verbessert sich die Gesamtgeschwindigkeit Ihres Systems, insebsondere wenn Sie auf Moodle-Berichte zugreifen.
  • Konfigurieren Sie den SWAP in der richtigen Größe. The general advice is to set it to 4 x physical RAM.
  • Verwenden Sie ein RAID System. Es gibt viele verschiedene Konfigurationsmöglichkeiten für ein RAID System, wir empfehlen folgende Konfiguration:
    • Installieren Sie einen Hardware RAID Controller (falls möglich)
    • Die Platten für das Betriebssystem und den SWAP konfigurieren Sie als RAID-1.
    • Moodle, den Web-Server und den Datenbank-Server konfigurieren Sie auf einer oder mehreren anderen Festplatten als RAID-5.
  • Nutzen Sie ein Gigabit Ethernet. Das ist insbesondere dann wichtig, wenn Sie den Web-Server und den Datenbank-Server auf verschiedenen Servern laufen haben.
  • Prüfen Sie die Einstellungen auf Ihrer Netzwerk-Karte. Sie können evtl. Verbesserungen erreichen, wenn Sie die Nutzung des Buffers und der Transmit/Receive Descriptoren erhöhen und wenn Sie die Berechnung der TCP Checksumme auf die Karte auslagern, statt auf das Betriebssystem.
  • Lesen Sie diesen Diskussionsbeitrag Case Study - eine Studie zu einem Server-Stress-test mit 300 Nutzer/innen.
  • Lesen Sie diesen Beitrag accompanying report - Bericht über Netzwerk-Traffic und Serverlast.
  • Siehe moodle.org Konfiguration.
  • Siehe [1] - SFSU Präsentation von Educause (unter Verwendung von VMWare)

Betriebssystem

  • Sie können für den Moodle-Server folgende Betriebssysteme verwenden: Linux verwenden (empfohlen), Unix, Windows oder Mac OS X.
  • Linux und Unix brauchen generell weniger Speicher als Mac OS X oder Windows Servers. Darüber hinaus hat Linux keine Lizenzgebühren. Wenn Sie eine große Anzahl von Prozessoren mit SMP haben, dann können Sie auch ein hoch angepasstes Betriebssystem verwenden, z.B. Solaris.
  • Beachten Sie die Optimierungsempfehlungen Ihres Betriebssystems und des Herstellers.
    • Für Linux lesen Sie die Informationen auf dieser Linux Performance Team Website.
    • Für Linux testen Sie den Befehl hdparm, z.B. können Sie den Befehl hdparm -m16 -d1 verwenden, um Lesen und Schreiben auf mehreren Sektoren und DMA zu aktivieren. Mounten Sie Festplatten mit den Optionen async und noatime.
    • Für Windows konfigurieren Sie den Server so, dass er für Netzwerk-Applikationen optimiert ist (Systemsteuerung, Netzwerkverbindungen, LAN-Verbindungen, Eigenschaften, Datei & Drucker Sharing für Microsoft Netzwerke, Eigenschaften, Optimierung). Sie können auch auf der Microsoft TechNet Website nach Optimierungsanleitungen suchen.

Webserver-Geschwindigkeit

Wenn Sie Firefox und die Firebug Erweiterung installieren, können Sie die Zeiten beobachten, die es dauert einzelne Komponenten einer Moodle-Seite zu laden. Die Yslow Erweiterung bewertet Ihre Seite in Bezug auf die 14 Regeln für schnelle Webseiten. Siehe auch Best Practices for Speeding Up Your Web Site, für schnelles Laden von Webseiten.

PHP-Geschwindigkeit

  • Wir empfehlen dringend, einen PHP-Accelerator zu verwenden, um die CPU-Last zu reduzieren, z.B. APC, PHPA, Xcache, WinCache oder eAccelerator. Achten Sie darauf, dass der PHP-Accelerator für die PHP-Version Ihres Moodle-Servers funktioniert. Beachten Sie auch, dass Turck MMCache nicht mehr weiterentwickelt wird und Fehler bei PHP 5 verursachen kann.
  • Verbesserungen bei Lese-/Schreibzugriffen können Sie erzielen, wenn Sie gecachte PHP-Seiten in einem TMPFS-Dateisystem ablegen. Beachten Sie jedoch, dass die Cache-Inhalte verloren gehen, wenn Ihr Server von einem Stromausfall betroffen ist oder wenn Sie den Server neu starten.
  • Die PHP-Geschwindigkeit verbessert sich, wenn PHP als ein Apache/IIS ISAPI Modul installiert ist (und nicht als CGI).
  • Prügen Sie die PHP-Einstellung memory_limit in der PHP-Konfigurationsdatei php.ini. Für PHP 5 werden 128 MB empfohlen, siehe PHP 5.2.1 .
  • Siehe auch PHP-Versionen für Moodle

Installationsanleitungen

Apache-Geschwindigkeit

  • Wenn Sie Apache auf einem Windows-Server nutzen, verwenden Sie die Pakete der Apache Lounge, die eine bessere Geschwindigkeit und Stabilität haben als die offiziellen Apache-Download-Pakete. Beachten Sie jedoch, dass es sich dabei um inoffizielle Pakete handelt, die evtl. nicht so aktuell sind wie die offiziellen Apache-Pakete.
  • Setzen Sie die Einstellung MaxClients Direktive gemäß der Formel (verwende nur 80% des verfügbaren Speichers, um Reserven zu haben):
   MaxClients = Verfügbarer Speicher * 80% / Maximaler Speicherbedarf der Apache-Prozesse
Der Speicherbedarf der Apache-Prozesse beträgt normalerweise 10MB, aber Moodle kann schnell bis zu 100MB pro Prozess benötigen. Als Faustregel können Sie den verfügbaren Speicher in MB durch 100 teilen, um einen konservativen Wert für die MaxClients zu erhalten. Sehr wahrscheinlich können Sie den Standardwert von 150 auf einem Moodle-Server nach unten anpassen. Um eine genauere Schätzung zu erhalten, geben Sie folgenden Befehl auf der Kommandozeile ein:
   #ps -ylC httpd --sort:rss
Wenn Sie den Wert für die MaxClients auf über 256 erhöhen, müssen Sie die Einstellung ServerLimit anpassen.
Achtung: Setzen Sie den Wert von MaxClients nicht höher, als der Speicher Ihres Servers verarbeiten kann, sonst werden Daten auf die SWAP ausgelagert, was wiederum zu erheblichen Geschwindigkeitseinbußen führt.
  • Reduzieren Sie die Anzahl der Module, die Apache in der httpd.conf Konfigurationsdatei lädt, auf das nötige Minimum, um den benötigten Speicherbedarf zu minimieren.
  • Verwenden Sie die aktuellste Version von Apache - Apache 2 hat das Speichermodell verbessert, was den Speicherbedarf weiter reduziert.
  • Bei Unix/Linux-Systemen können Sie den Wert von MaxRequestsPerChild in der httpd.conf Konfigurationsdatei auf 20-30 (bei geringen Werten wird der Vorteil wieder aufgehoben).
  • Bei einem stark belasteten Server können Sie KeepAlive Off setzen (aber nur wenn Ihre Moodle-Seiten keine Links zu Ressourcen oder hochgeladenen Bildern enthalten) oder den Wert von KeepAliveTimeout auf 2-5 reduzieren. Der Standardwert ist 15 (Sekunden) - je größer der Wert, desto mehr Serverprozesse werden gehalten, die auf mögliche Leerverbindungen warten. Einen genaueren Wert für KeepAliveTimeout erhält man, wenn Sie beobachten, wie lange das Laden einer Seite dauert. Wenn Sie den Wert von KeepAlive ändern, beobachten Sie Ihre CPU Last, da es zusätzlichen Aufwand bedeutet, mehr Prozesse / Threads zu initiieren.
  • Eine Alternative zu KeepAlive Off ist, einen Reverse Proxy Server vor den Moodle-Server zu setzen, um HTML-Dateien mit Bildern zu cachen. Dann können Sie Apache so konfigurieren, dass es Keep-Alives auf den Moodle-Server.
  • Wenn Sie keine .htaccess Datei verwenden, setzen Sie AllowOverride None, um .htaccess Lookups zu verhindern.
  • Setzen Sie den Wert von DirectoryIndex korrekt. Hier ist ein Beispiel für einen Produktiv-Server:
   DirectoryIndex index.php index.html index.htm
  • Solange Sie den Server nicht als Entwicklungsumgebung nutzen, setzen Sie ExtendedStatus Off und deaktivieren Sie mod_info und mod_status.
  • Lassen Sie HostnameLookups Off, um die DNS Wartezeit zu reduzieren.
  • Reduzieren Sie den Wert von TimeOut auf 30-60 (Sekunden).
  • Bei der Einsetllung Options directive vermeiden Sie Options Multiviews (dadurch werden Verzeichnisse gescannt). Um den Plattenzugriff weiter zu reduzieren, verwenden Sie
   Options -Indexes FollowSymLinks
  • Caching (unsupported) - Achtung: Diese Art des Cachings kann große Probleme bei Aktualisierungen verursachen. Apache kann Seite wesentlich schneller laden, wenn ers o konfiguriert wird, dass der Browser einige Seitenelemente (z.B. Bilder) cacht und diese bei der Anzeige aus dem lokalen Speicher holt, statt sie jedes Mal neu zu laden. Diese Konfiguration hängt vom Betriebssystem ab, aber die folgenden zwei Schritte sind grundsätzlich nötig:
  1. Installieren und aktivieren Sie mod_expires - detaillierte Informationen finden Sie in der Dokumentation.
  2. Fügen Sie folgenden Code in die Konfigurationsdatei des virtuellen Servers im <directory> Abschnitt des Root Directory ein (oder in einer .htaccess Datei, falls AllowOverrides On):
   <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType text/html "access plus 1 seconds"
    ExpiresByType image/gif "access plus 1 week"
    ExpiresByType image/jpeg "access plus 1 week"
    ExpiresByType image/png "access plus 1 week"
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType text/javascript "access plus 1 week"
    ExpiresByType application/x-javascript "access plus 1 week"
    ExpiresByType text/xml "access plus 1 seconds"
   </IfModule>
Auf diese Wesie wird alles im Cache gehalten außer HTML und XML. Auf diese Weise können Sie erhebliche Verbesserungen beim Laden von Seiten erzielen. Passen Sie die Cache-Zeit an, in Abhängigkeit davon, wie oft sich Ihre Bilder ändern.
  • Kompression reduziert die Antwortzeiten durch Reduzieren der Größe der HTTP Antworten.
  1. Installieren und aktivieren Sie mod_deflate - detaillierte Informationen finden Sie in der Dokumentation.
  2. Fügen Sie folgenden Code in die Konfigurationsdatei des virtuellen Servers im <directory> Abschnitt des Root Directory ein (oder in einer .htaccess Datei, falls AllowOverrides On):
   <ifModule mod_deflate.c>
     AddOutputFilterByType DEFLATE text/html text/plain text/xml
   </ifmodule>
Weitere Informationen finden Sie unter www.metaskills.net

IIS-Geschwindigkeit

  • Das Pendant zu KeepAliveTimeout ist ListenBackLog (IIS - Registry Location ist HKLM >SYSTEM > CurrentControlSet > Services > Inetinfo > Parameters). Setzen Sie den Wert auf 2-5.
  • Ändern Sie den Wert von MemCacheSize, um den Speicher (MB) anzupassen, den IIS für den Datei-Cache verwenden soll (standardmäßig 50% des vorhandenen Speicherplatzes).
  • Ändern Sie den Wert von MaxCachedFileSize, um die maximale Dateigröße im Datei-Cache anzupassen. Der Standardwert ist 262,144 (256 KB).
  • Legen Sie ein neues DWORD ObjectCacheTTL an, um die Zeitdauer (in Millisekunden) anzupassen, die Objekte im Cache gespeichert werden. Der Standardwert ist 30000 ms (30 Sekunden).

Lighttpd-, NginX- und Cherokee-Geschwindigkeit

Sie können die Servergeschwindigkeit verbessern, wenn Sie einen leichtgewichtigen Webserver wie z.B. Lighttpd, NginX oder Cherokee in Kombination mit PHP im FastCGI-Modus. Lighttpd wurde ursprünglich als Proof-of-Concept entwickelt (siehe [2]), um das C10k Problem zu lösen. Zunächst für speicherbegrenzte Server empfohlen, stellt er wegen seines Designs und seines asynchronen IO-Modells eine geprüfte Alternative zu herkömmlichen HTTP-Servern dar (siehe [3]), die für häufig geladene Webseiten und Web-Applikationen wie Moodle geeignet ist. Siehe MoodleDocs Lighttpd page für weitere Informationen, Konfiguration und Beispiele.

Weitere Alternativen sind Lighttpd und NginX, die als Load-Balancer und/oder Reverse-Proxy eingesetzt werden können, um die Last auf Backend-Servern zu verringen (siehe [4]). Sie bieten Vorteile, ohne dass die auf dem Server vorhandene Software geändert werden muss.

Beachten Sie, dass die genannten Server wahrscheinlich die am wenigsten getesteten Server sind, wenn Sie komplexere Funktionalitäten von Moodle verwenden wollen (z.B. Webservices oder Moodle-Netzwerk). Wenn Sie dagegen eine stark besuchte Moodle-Site mit einer Standardkonfiguration betreiben, dann sind diese Webserver bestens geeignet.

Datenbank-Geschwindigkeit

Moodle enthält ein Skript, das einige wichtige Statistiken zur Datenbank-Geschwindigkeit aus dem ADOdb Performance Monitor anzeigt. Das Skript können Sie im Browser aufrufen:

   http://www.mymoodle.com/admin/dbperformance.php

Verwenden Sie die damit generierten Daten als Anhaltspunkte, wenn Sie Ihren Datenbank-Server optimieren.

MySQL-Geschwindigkeit

Die folgenden MySQL-spezifischen Einstellungen können in der MySQL-Konfigurationsdatei my.cnf (my.ini unter Windows) angepasst werden, um die Datenbank-Geschwindigkeit zu verbessern. Um die aktuellen Werte dieser Einstellungen zu sehen, nutzen Sie die folgenden Befehle:

   SHOW STATUS;
   SHOW VARIABLES; 

Wichtig: Erstellen Sie immer eine Sicherung der Moodle-Datenbank, bevor Sie die Konfiguration Ihres MySQL-Servers ändern. Nach Konfigurationsänderungen müssen Sie den MySQL-Server mysqld neu starten.

Sie können das MySQLTuner Tool auf Ihrem MySQL-Server laufen lassen. Es berechnet geeignete Werte für viele der folgenden Einstellungen automatisch.

  • Aktivieren Sie query cache:
   query_cache_type = 1. 
Die meisten Moodle-Installationen verwenden folgende Werte:
   query_cache_size = 36M 
   query_cache_min_res_unit = 2K. 
  • table cache: Der Tabellen-Cache wird von allen Threads (Datenbank-Verbindungen) verwendet. Beobachten Sie den Wert von opened_tables für weitere Anpassungen: Wenn opened_tables > 3 * table_cache ist, dann erhöhen Sie den Wert von table_cache bis zur Grenze, die das Betriebssystem setzt. Der Wert von table-cache hängt auch von der Zahl der Module und Plugins ab, die Sie in Moodle installiert und aktiviert haben. Einen geeigneten Wert für den table_cache liefert folgender Befehl: upto your OS limit. Note
   mysql>SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='yourmoodledbname';
  • thread cache: Passen Sie den Wert so an, dass die Cache-Nutzung bei nahe 100% liegt. Sie können folgende Formel verwenden:
   thread cache utilization (%) = (threads_created / connections) * 100
  • key buffer: Diese Einstellung kann die Zugriffsgeschwindigkeit bei SELECT-Anfragen von Moodle verbessern. Die richtige Größe hängt von der Größe der Index-Dateien *.myi ab. Verwenden Sie folgende Formel:
   key_read / key_read_requests < 0.01
   key_write / key_write_requests <= 1.0
  • maximum number of connections: Setzen Sie den Wert so, dass Ihre Nutzer/innen keine Fehlermeldung "Zu viele Verbindungen" ("Too many connections") sehen. Beachten Sie, dass dieser Wert Einfluss auf die gesamte Speichernutzung hat. MySQL-Verbindungen dauern normalerweise Millisekunden, d.h. sekbst bei stark belasteten Servern sind Werte über 200 ungewöhnlich.
  • high burst activity: Wenn es in Ihrer Moodle-Installationen viele Tests gibt und Sie Geschwindigkeitsprobleme haben (beobachten Sie den Wert von threads_connected - er sollte nicht wachsen), können Sie den Wert von back_log erhöhen.
  • Optimieren Sie Ihre Datenbank-Tabellen wöchentlich und nach der Aktualisierung von Moodle. Sie sollten Ihre Tabellen auch optimieren, nachdem viele Daten gelöscht wurden, z.B. am Ende des Schul- oder Studienjahres. Die Optimierung stellt sicher, dass die Index-Dateein aktuell sind. Sichern Sie vorher Ihre Datenbank und nutzen Sie dann folgende Befehle:
   mysql>CHECK TABLE mdl_tablename;
   mysql>OPTIMIZE TABLE mdl_tablename;
Die wichtigsten Tabellen, die Sie so optimieren sollten, sind mdl_course_sections, mdl_forum_posts, mdl_log und mdl_sessions (wenn Sie dbsessions verwenden). Jeder Fehler muss mit dem SQL-Befehl REPAIR TABLE behoben werden (siehe MySQL Manual und diesen Diskussionsbeitrag).
  • Zahl der temporären Tabellen, die auf der Festplatte gespeichert werden, reduzieren: Prüfen Sie dies mit dem Wert von created_tmp_disk_tables. Wenn der Wert relativ hoch ist (>5%), erhöhen Sie den Wert von tmp_table_size, bis bis eine Reduzierung von created_tmp_disk_tables erkennen. Beachten Sie, dass dies die Nutzung des RAM beeinflusst.

PostgreSQL-Geschwindigkeit

Es gibt einige gute Artikel zu Geschwindigkeitsoptimierungen für PostgreSQL.

Bei Geschwindigkeitsproblemen sollten Sie als erste Maßnahme eine separate Maschine für den Datenbank-Server aufsetzen.

Sie sollten autovacuum aktivieren, solange Sie wissen, was Sie tun. Viele E-Learning-Systeme haben vorhersehbare Zeiten mit geringer Nutzung. In diesen Zeiten können Sie autovacuum deaktivieren und einen festen Wert verwenden. Oder Sie lassen autovacuum laufen und lassen in den ruhigen Zeiten wöchentlich ein full vacuum laufen.

Setzen Sie den Wert von shared_buffers richtig (1-2% vom RAM).

PostgreSQL nimmt an, dass das Betriebssystem Dateien cacht, setzen Sie also den Wert von effective_cache_size richtig (Gesamt RAM - RAM, der von Applikationen verbraucht wird).

Es gibt weitere nützliche Parameter, z.B. bei einer Maschine mit 4G RAM:

   work_mem = 10240

Das sind 10M vom RAM. Das kann zu hohen Geschwindigkeitsverbesserungen führen, aber der Wert gilt pro Verbindung und 200 Verbindungen * 10M ergeben 2G, so dass theoretisch viel RAM

   maintenance_work_mem = 163840

Das sind 160M vom RAM, die z.B. von VACUUM genutzt werden.

   max_fsm_pages = 100000
   max_fsm_relations = 5000

Wenn diese Werte zu klein gewählt werden, geht die Geschwindigkeit herunter, wenn die Datenbank eine Weile läuft. Die passenden Werte können aus der Ausgabe von VACUUM VERBOSE abgeleitet werden, die die erforderlichen FSM Seiten am Ende ausgibt. Aus Erfahrung sollten Sie für Standard-Moodle-Installationen die Werte mit Faktor 5 multiplizieren.

   wal_buffers = 64

Diese Buffers werden für write-ahead log verwendet.

Siehe auch:

Geschwindigkeitshinweise zu anderen Datenbanksystemen

Geschwindigkeit der verschiedenen Moodle-Module

In Moodle können Sie einzelne Aktivitäten, Filter und andere Plugins aktivieren bzw. deaktivieren. Generell sollten Sie immer nur die Elemente aktivieren, die Sie tatsächlich nutzen wollen. Hier noch einige Empfehlungen zu ausgewählten Aktivitäten:

  • Der Chat ist in Bezug auf häufige HTTP-Anfragen sehr ressourcen-intensiv (siehe diese Diskussion). Sie können die Last reduzieren, indem Sie als Chat-Methode Ajax-Chat oder Chat-Server-Daemon (bei Unix-basierten Webservern) verwenden. Prüfen Sie auch die Einstellung Timeout und Aktualisierung Chat in den systemweiten Chat-Einstellungen, da diese Parameter großen Einfluss auf die Serverlast haben.
  • Tests beeinträchtigen die Datenbank-Geschwindigkeit. Versuchen Sie, Ihren Datenbank-Server zu optimieren. Siehe diesen Diskussionsbeitrag for a brief report on performance for 55 students simultaneously using quizzes. Eine Fallstudie zur Geschwindigkeit bei Tests in Moodle mit 300 Teilnehmer/innen finden Sie hier , das zugehörige Protokoll zu Netzwerkverkehr und Serverlast ist hier verfügbar.
  • der Cron-Job in Moodle wird durch das PHP-Skript cron.php angestoßen. Wenn das Skript über HTTP aufgerifen wird (z.B. mit wget oder curl), kann das auf großen Moodle-Installationen zu einem hohen Speicherbedarf führen. Besser ist es, das Skript direkt über einen PHP-Befehl aufzurufen (z.B. php -f /path_to_moodle_directory/admin/cron.php).
  • Der Block Neue Aktivitäten verbraucht viele Ressourcen, wenn die Log-Tabelle mdl_log der Moodle-Datenbank viele Einträge enthält.

Bildoptimierung in Moodle

Beim Standardpaket von Moodle werden Bilder in nichtoptimierter Form ausgeliefert. Viele dieser Bilder könnten von der verlustfreien Rekomprimierung mittels optipng bei PNGs, gifsicle bei GIFs und jpegoptim bei JPGs profitieren. Optimierte Bilder werden schneller übertragen und geladen (siehe [5]). Das folgende Beispiel optimiert (verlustfrei, ohne Qualitätseinbußen) alle Bilder im Moodle-Installationsverzeichnis:

find /example/directory/moodle -iname *.png -exec optipng -o7 {} \;
find /example/directory/moodle -iname *.gif -exec gifsicle -O2 -b {} \;
find /example/directory/moodle -iname *.jpg -exec jpegoptim -p {} \;

Die Programme optipng und gifsicle stehen in den Repositories der meisten neueren Linux-Distributionen zur Verfügung, das Programm jpegoptim muss manuell heruntergeladen und installiert werden.

Siehe auch

Diskussionsbeiträge im Kurs Using Moodle auf moodle.org: