Improve Moodle Performance

Hardware Configuration:

  • The fastest and most effective change to improve performance is to increase the amount of RAM on the 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.
  • Better performance is gained by obtaining the best processor capability, i.e. dual or dual core processors.
  • We should use SCSI hard disks instead of SATA drives. SATA drives will increase the system’s CPU utilization, whereas SCSI drives have their own integrated processors and come into their own when we have multiple drives. If we already have SATA drives, check that the motherboard and the drives themselves support NCQ (Native Command Queuing).
  • Purchase hard disks with a low seek time. This will improve the overall speed of the system, especially when accessing Moodle’s reports.
  • Size the swap file correctly. The general advice is to set it to 4 x physical RAM.
  • Use a RAID disk system. Although there are many different RAID configurations we can create, the following generally works best:
    • Install a hardware RAID controller (if we can)
    • The operating system and swap drive on one set of disks configured as RAID-1.
    • Moodle, Web server and Database server on another set of disks configured as RAID-5.
  • We should use Gigabit Ethernet for improved latency and throughput. This is especially important when we have the webserver and database server separated out on different hosts.
  • Check the settings on the network card. We can 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.

PHP Performance:

  • It is strongly recommended to use a PHP accelerator to ease CPU load, such as APCPHPAXcacheWinCache or eAccelerator.
  • Increasing the database connection lifetime, could be around session.gc_maxlifetime “14400”

Apache Performance:

  • 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

  • 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).

MySQL Performance:

  • Enable the query cache with query_cache_type = 1
  • Set query_cache_size = 36M & query_cache_min_res_unit = 2K
  • Set the maximum number of connections may be around 200
  • Optimize database 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 the academic session. This will ensure that index files are up to date. We should Backup our 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. Any errors need to be corrected using REPAIR TABLE.

Thanks to