Monday, October 8, 2012

Why Your Moodle Site is Slow: Five Simple Settings


Here are some simple settings that any Moodle administrator can change from the Site Administration menu that will help to improve his/her Moodle site's performance. Some of these changes come at the cost of functionality, so sometimes you have to pick between a particular feature and performance (or a faster server), but often these settings are just enabled out of curiosity with no discernible reward other than a slower site.

Automated backup setup

Disable Automated backup setup for courses by setting Active to disabled in the pull down menu. The Moodle course backup and restore feature, while a convenient mechanism for moving courses between Moodle sites, is not very efficient. As the number of courses and the size of the courses on your site increase, the scheduled course backup process takes longer and longer to complete. This can cause extreme site slowdowns while it's running. Additionally, it makes it harder for your server's backup system to complete its own nightly backups.
Site administration / ▶ Courses / ▶ Backups / ▶ Automated backup setup

Many users mistakenly view this as a way to restore their Moodle site in the event of a disaster. While it's possible to use these course backups to restore most of a site, it's not ideal or guaranteed to work when you need it. Disaster recovery backups should be performed outside of the scheduled course backup feature.

Statistics

Make sure Enable statistics is unchecked. Many administrators discover this setting and turn it on simply to see what it does. A common scenario is that a site will be performing well for a year or more and then suddenly experience problems when this setting is enabled. This setting includes options for how long to allow the statistics gathering to run in one session and how far back to process. If you must run statistics make sure to limit how long you allow the process to run. I recommend letting it run no more than 2 hours per session.
Site administration / ▶ Advanced features
Upcoming versions of Moodle may have an improved version of statistics that should reduce the load on the server's database by several orders of magnitude. So if you really need this feature, keep your eyes on MDL-30643.

Theme designer mode

Disable Theme designer mode on production Moodle sites. Theme designer mode is a great Moodle version 2 feature, if you are updating your theme and want to quickly see the impact of changes. It does this by having the Moodle server tell web browsers to not cache any of the images, css, and javascript that make up your theme. When this feature is enabled, every page view for every user must download every media object directly from the Moodle server. This makes viewing pages very very slow and greatly increases the load on the server. Administrators often enabled this to update their theme and then forget to turn it off. The best practice is to develop your theme on a testing site and then move it over to production only after it has been completed.
Site administration / ▶ Appearance / ▶ Themes / ▶ Theme settings

Cleanup

Set Keep logs for and Grade history lifetime to 365 days or less. By default Moodle will keep both your logs and grade history forever. For long established sites, these logs start to become the majority of the database. I have seen cases where log tables consumed 90% or more of the database. As a general rule the more of your database that fits into your server RAM the faster your database will perform. By limiting the size of these logs, you can make your site much faster.

Site administration / ▶ Server / ▶ Cleanup
Note: If you have a really large log, it may make your site even slower while the cleanup runs. Consider changing this setting during a low-use time or during a maintenance window. In extreme cases, it can take several hours for the cleanup query to complete the first time.

Session Handling

Disable Use database for session information by unchecking the box. Starting with Moodle version 2 and above the default setting is to have database sessions enabled. In our infrastructure, we have seen much better performance using file based sessions rather than having the database handle them. This is dependent on the server setup, but it's worth disabling to see if your performance improves.

Site administration / ▶ Server / ▶ Session handling

Pro-tips 

Below are some additional tips that take a bit more effort, but provide additional benefits related to ensuring great performance for your Moodle site.

Running multiple simultaneous manual course backups can sometimes cause problems. Avoid creating situations where many course backup / restores need to run at the same time. This is a common problem for the start of a new school term. Often instructors will be asked to duplicate their prior courses for the new term. Moodle doesn't provide any internal mechanism to queue backup requests so that they don't overwhelm your server. If enough instructors are doing this at the same time, it can make a Moodle site nearly unusable.

While all of these settings can be accessed from the Moodle interface, if you want to really make sure none of your site administrators accidentally sets one of these incorrectly, enter the desired value in your config.php file so that it cannot be enabled accidentally.

Consider starting with a clean install of Moodle once a year to have the smallest database footprint and ensure the best performance for your site.



13 comments:

  1. Thanks for sharing this. I'm running moodle at ppgusm.com.

    ReplyDelete
  2. Hello all,
    I disabled "Use database for session information" to improve speed. This rendered my moodle site completelty unreachable with the message:
    "The session partition is full. It is not possible to login at this time.
    Please notify server administrator."

    Could anyone help me with this issue

    K. Baloul

    ReplyDelete
  3. Hi khaled,
    There are a couple of likely causes for the error message

    "The session partition is full. It is not possible to login at this time.
    Please notify server administrator."

    You will need direct access to the server hosting your Moodle site to repair.

    1) The partition is really full. Look in your config.php file for an entry that starts

    $CFG->dataroot =

    This will tell you where your Moodle data folder is stored. By default sessions will be stored in a subfolder called sessions.

    If it is you will need to clear out some space. As a temporary fix you can probably delete the cache folder to safely get enough space so that you can login and change the setting back while you work on a longer term solution to the storage space issue.

    2) Permissions or ownership problem. These normally will display different error messages, but I have occasionally seen incorrect permissions and ownerships on this folder be mis-identified as the partition being out of space. Double check that your web server process has write access to the folder listed in your config.php. For most setups this will mean that the folder should be writable by the owner of the apache or httpd process.

    Another way you can get your site operational is by directly accessing your Moodle database. You should be very careful when accessing the database directly and this is best done by someone experienced with database. You will need to access the database listed in the config.php with either administrator credentials or the credentials listed in the config.php. You will want to edit the config table with the default setup this will actually be called mdl_config. You need to edit the row of the database with the name field set to 'dbsessions'. It will have the value field set to '0'. You need to edit the value to be equal to '1'. This will revert you back to database sessions.

    Another side effect of the error you are seeing is that none of the site users are likely able to upload files into the site.

    Hope this helps and sorry to hear that your site is down.

    ReplyDelete
  4. I would really love to have an answer to the question, in concrete terms, "Why does moodle use locking on DB sessions"?

    It's super depressing how one classroom quiz can drop our entire infrastructure to a crawl...

    ReplyDelete
  5. Thanks for the post.

    We wouldn't dream of turning off automatic backups (but then they don't run during the day so they're not a problem, same with statistics), but one thing I'd not considered is the location of user sessions.

    I've just moved user sessions from the database to disk and have seen a massive and very welcome drop in page-load times. Thanks for the heads-up!

    Paul.

    ReplyDelete
  6. Hi Jonathan,

    What sorts of statistics are included when Server->Statistics is enabled?

    Eric.

    ReplyDelete
  7. Hi Jonathan
    Many thanks for your very helpful tips. I've checked my own server that's been running for 2+ month and surprise, surpise! Some of the checkbox options were in the state that you mentioned should be changed to reduce page load times. I've done what you have advised and I would like to think that my pages are loading faster. Will have a clearer picture over time. But thank you still since my pages SHOULD now load faster. You da man!

    ReplyDelete
  8. This is a very helpful article on various settings for a Moodle site. Thanks for sharing.

    ReplyDelete
  9. Hi Jonathan Moore,

    please Explain me ,why moodle site is loading slowly

    ReplyDelete
  10. Hello! Would you mind if I share your blog with my twitter group?
    There's a lot of folks that I think would really appreciate your content.

    Please let me know. Many thanks

    Have a look at my web page mesin gilingan mie manual

    ReplyDelete
  11. thanks dude!
    You saved me.

    http://palinfocom.net/moodle-theme-development.php

    ReplyDelete