What we watch on a Moodle site and why
Cron is the heartbeat
Almost everything Moodle does in the background runs through cron: sending notifications, syncing cohort enrolments, calculating completion, cleaning up files, running automated backups, processing adhoc tasks queued by plugins. It should run every minute. When it stalls, nothing visibly breaks at first, which is why it goes unnoticed. We monitor the time since the last run, tasks that keep failing and the length of the adhoc queue, and we look at why a task fails. A report that takes forty minutes will hold up others unless tasks are given enough parallel runners.
Where performance comes from
Moodle leans heavily on its caching layer, the Moodle Universal Cache. Out of the box the application cache lives on the file system, and sessions are typically kept in the database or on disk. That is fine for a small site and a bottleneck for a busy one. Moving them to an in-memory store such as Redis, enabling PHP opcode caching and giving PHP enough workers usually achieves more than a larger server. On the database side we look for slow queries from custom reports, missing indexes in third-party plugins and log tables that have grown without a retention limit.
Backups that have been restored
Moodle's automated course backups are useful for recovering one course a teacher deleted. They are not a disaster recovery plan. A real backup is a consistent copy of the database and moodledata, stored away from the server, with enough history to go back before a problem started. We run a test restore on a schedule, because that is the only evidence a backup works, and we record how long it took so you know your real recovery time.
Storage creeps
Disk usage in Moodle grows in ways that surprise people. Course backups are stored as files, often many generations per course. Deleted items wait in the recycle bin. Identical uploads are stored once, but files removed from courses are only purged later by a cleanup task. Logs grow daily unless a retention period is set. We chart growth monthly and adjust retention with you, so the conversation about more storage happens before the disk is full.
Getting ready for the start of term
Peak load is predictable: term start, exam weeks, a compliance deadline. Before each one we review capacity, clear the task backlog, check certificate expiry on the domain and the identity provider, confirm enrolment feeds ran, and freeze non-urgent changes. For sites with large exam cohorts we generate test users and courses with Moodle's own developer tools and run a load test. Bigger jobs that come out of maintenance, such as a Moodle upgrade or a broader performance optimization project, are quoted separately so the monthly plan stays predictable.