Era Host hosting
EraHost – Free Domain, Cheap Hosting!
Client Area
Support 24/7
Menu

Moodle for Online Courses, Educational Institutions, and Corporate Training: Infrastructure Requirements

35 min read
09.07.2026

Quick Summary

Moodle can be used equally effectively for corporate employee training, commercial online schools, and academic institutions, but the infrastructure requirements vary significantly between these environments. A platform may run smoothly for years with a few dozen users and then begin experiencing noticeable slowdowns as soon as large-scale assessments or mandatory certification programmes are introduced.

In many cases, Moodle performance depends less on the number of CPU cores and more on the condition of the database, PHP configuration, storage performance, cron processing, and caching. These are the components most commonly responsible for slow examinations, delayed reports, and performance issues during periods of high activity.

The first signs of trouble rarely appear during normal day-to-day use. They usually emerge when large numbers of users log in simultaneously, complete assessments, upload assignments, generate reports, or work with SCORM content. At that point, the platform operates under a very different workload profile and infrastructure limitations become visible.

A properly configured environment allows Moodle to remain stable even when hundreds of users are active at the same time. Achieving this requires more than simply choosing a server with generous specifications. The database, PHP environment, storage subsystem, caching layer, and background task processing must all be designed for the workloads the platform will face in real-world operation.

For that reason, when planning Moodle infrastructure, it is important to consider not only the current number of students or employees but also how the platform will be used, the nature of the training programmes, and the expected growth of the project over time.

Article plan

Where Moodle Is Used and Why Infrastructure Requirements Differ

One of the reasons there is so much disagreement about Moodle server requirements is that the same platform can be used for completely different types of projects. One organisation may use Moodle as an internal employee training system. Another may run a commercial learning platform with thousands of paying students. A university may use Moodle across multiple departments, with hundreds of students taking exams simultaneously and large volumes of academic reporting generated every day.

The platform itself may be the same, but the infrastructure requirements can be dramatically different.

In corporate training environments, Moodle is typically used for employee onboarding, compliance programmes, mandatory certification, workplace safety training, and professional development. Day-to-day activity is often relatively low. Employees complete courses when convenient, review training materials, and take assessments at their own pace. The workload changes significantly as deadlines approach. Support teams regularly see situations where hundreds of employees log in during the final days of a mandatory certification period. A platform that has been largely idle for months suddenly experiences a surge of simultaneous logins, assessments, and database write operations.

Commercial online schools generate a different type of workload. Student activity is much more continuous. Learners watch lessons, submit assignments, complete quizzes, receive instructor feedback, and access additional learning resources throughout the day. Evening peaks are particularly common. Many training providers find that their Moodle platform remains relatively quiet during working hours but sees several times more concurrent users in the evening. Additional load is often created by integrations with payment gateways, CRM platforms, email marketing systems, and external educational services.

Universities and academic institutions usually place even greater demands on Moodle infrastructure. Large numbers of students, instructors, and administrative staff may be active at the same time. Beyond delivering courses, the platform is used for examinations, reporting, document storage, grading, and academic administration. While corporate training environments often experience peak activity near compliance deadlines, universities typically face their heaviest workloads during examination periods. An assessment involving several hundred students can generate more database activity within an hour than the platform sees during an entire day of normal operation.

This is why the same infrastructure recommendations rarely apply to every Moodle deployment. A server that comfortably supports a corporate training portal with one hundred employees may struggle to handle an online school where students are active throughout the day. Likewise, an environment that works well for a small training business may be insufficient for a university running simultaneous assessments across multiple cohorts.

When evaluating Moodle requirements, the total number of registered users is often less important than how those users interact with the platform. Infrastructure planning should focus on concurrent activity, assessment workloads, reporting requirements, SCORM usage, and peak-hour behaviour rather than the total number of user accounts stored in the system.

Why Moodle Requirements Depend on User Activity Rather Than User Numbers

One of the most common misconceptions about Moodle infrastructure planning is the idea that server requirements can be estimated simply by counting users. An administrator says that one hundred people are enrolled on the platform and then tries to choose hosting based on that number alone. In reality, this tells you very little about the actual workload.

For Moodle, what matters far more than the number of registered users is what those users are doing at any given moment.

Consider the first scenario. One hundred students open a course and read learning materials. Most of their activity consists of viewing pages, opening documents, watching videos, and moving between sections. The server load in this situation is usually relatively low. A user opens a page, receives the required data, and then spends time reading or watching content. There may be thirty seconds, a minute, or even several minutes between actions. The database handles a limited number of queries, write operations are minimal, and most requests involve serving content that has already been prepared. Even if one hundred users are reading the same lesson simultaneously, a modestly sized infrastructure can often handle the workload without difficulty.

Now consider the same one hundred users starting an examination at exactly the same time.

At first glance, the difference seems small. The users are still accessing Moodle through a browser and opening pages. Behind the scenes, however, the workload changes completely. Every question change may trigger permission checks, quiz restriction validation, answer saving, attempt updates, activity logging, and additional background processing. If the exam contains forty or fifty questions and autosave is enabled, one hundred students can generate thousands of write operations within just a few minutes. Instead of serving mostly static content, the platform is now handling a continuous stream of database queries and storage operations.

In practical terms, these are two completely different workload profiles. In the first scenario, one hundred users may generate only a few dozen meaningful actions per minute. In the second, database activity and write operations increase dramatically even though the number of students remains exactly the same.

Support teams regularly see Moodle platforms that run flawlessly for months and then experience problems only on examination days. The number of students has not changed. The same one hundred people were using the system the day before. What changed was the nature of the workload. A platform that behaves like a typical learning portal during course consumption suddenly becomes a write-intensive application during an assessment.

An even more interesting example involves SCORM content.

The same one hundred users can generate a workload comparable to a much larger platform. Many SCORM packages communicate actively with Moodle throughout the learning process. Progress is tracked continuously, lesson completion is recorded, intermediate results are saved, and additional learning statistics are written to the database. Some SCORM packages exchange data with Moodle every few seconds during an entire training session.

If one hundred users are taking part in that type of course simultaneously, the server may receive hundreds of additional requests per minute purely from progress-tracking mechanisms. The users themselves may hardly be clicking anything. Much of the workload is generated automatically by the learning content.

As a result, one hundred users working with complex SCORM courses can create a workload comparable to several hundred users who are simply reading documents, watching videos, and browsing course materials. In real deployments, a group of one hundred employees completing interactive SCORM training can place a heavier load on the infrastructure than three or four hundred students consuming standard course content.

A good example can be found in corporate training environments. Two companies may have the same number of employees and run the same Moodle version. In the first company, staff members occasionally read documentation and complete short quizzes. In the second, employees use interactive SCORM courses every day, complete mandatory certification programmes, watch training videos, and generate detailed progress analytics. The user count is identical, but the infrastructure requirements can differ several times over.

This is why the question How many users can Moodle handle? is rarely useful on its own.

A far more important question is What are those users actually doing?

One hundred users reading course materials, one hundred users taking an examination, and one hundred users working with SCORM content create three completely different workload profiles. That is why two Moodle platforms with the same number of students can require very different infrastructure and deliver very different performance. Only after analysing real usage patterns can you accurately determine the resources a Moodle deployment actually needs.

PHP Components Required for Stable Moodle Operation

Moodle is highly sensitive to its PHP environment. In some cases the platform installs without errors, the administration area loads, and courses are accessible, yet individual functions behave unpredictably. Imports fail, course archives are not created, notifications are not sent, images are processed incorrectly, or a SCORM package behaves strangely. At first glance, this may look like a Moodle or plugin issue, while the real cause is often a missing or incorrectly enabled PHP extension.

The intl extension is required for correct handling of languages, locales, date formats, string sorting, and multilingual interfaces. This matters for learning platforms because courses, users, and content may come from different regions and use different languages. If intl is missing or misconfigured, administrators may see unusual issues with text display, date formatting, localisation, or language-dependent functions. On international learning platforms, this can be especially visible when the same course works correctly in English but displays certain elements incorrectly in another language.

The mbstring extension handles multibyte strings. Without it, PHP is less reliable when working with text that uses characters beyond the basic Latin alphabet. For Moodle, this affects course titles, user names, assignments, messages, forums, reports, search, and filtering. Problems with mbstring may lead to truncated strings, incorrect character handling, import errors, or inconsistent search behaviour. Support teams often see such issues after Moodle has been moved to a new server where not all PHP modules were enabled by default.

The curl extension is used for network requests. Moodle may need to contact external services, check updates, work with integrations, connect to APIs, communicate with payment systems, storage providers, email services, or external learning tools. If curl is missing, parts of the integration layer may simply stop working. An administrator may configure an external service, only for Moodle to fail when making the request. In the interface, this can appear as an authentication error, synchronisation failure, or inability to connect to a remote resource, even though the underlying problem is at PHP level.

The zip extension is essential for working with archives. In Moodle, this is not a secondary feature. Archives are used when installing plugins, importing and exporting courses, creating backups, restoring data, and uploading certain learning materials. If zip is missing or unstable, problems usually appear at the worst possible time. An administrator attempts to restore a course archive, import materials, or create a backup before an update, and the operation fails. For a learning platform, this can delay course preparation or complicate recovery after an incident.

The xml extension is used to process structured data. Many exchange formats, configuration files, integrations, SCORM packages, and external services rely on XML or related mechanisms. If the extension is not working correctly, the problem may not appear immediately. Normal pages may load, while data imports fail, SCORM content is processed incorrectly, or an integration returns an unclear error. These cases are often mistaken for problems with a specific course, when Moodle is actually unable to process the required data format properly.

The soap extension is not required for every Moodle installation, but it remains important for some integrations. Certain corporate systems, legacy APIs, educational platforms, and internal services still use SOAP for data exchange. If Moodle depends on such services, a missing soap extension can cause synchronisation failures, integration errors, or complete inability to exchange data with external systems. In corporate training environments, this becomes especially noticeable when Moodle is connected to HR systems, internal portals, or third-party learning management tools.

The opcache extension has a direct impact on Moodle performance. The platform consists of a large number of PHP files, and without OPcache the server has to process the same code repeatedly. On a small test installation this may be barely noticeable. On a production LMS with hundreds of users, missing OPcache quickly becomes unnecessary CPU overhead and longer page generation times. When OPcache is enabled and configured properly, compiled PHP code is stored in memory, allowing Moodle to respond faster and more consistently during periods of high activity.

For image processing, Moodle usually relies on gd or imagick. These extensions are used for user avatars, course images, thumbnails, uploaded files, and some types of learning content. If image processing is not configured correctly, users may encounter upload errors, broken thumbnails, or images that fail to display properly inside course materials. For an online school this may seem minor until instructors begin uploading materials in bulk and students start seeing incomplete course content.

PHP extensions should be checked before the platform is launched, not after complaints begin. Moodle can partially function even when some components are missing, which makes diagnosis more difficult. The problem may appear only in a specific scenario: course import, external integration, SCORM processing, backup creation, or bulk content upload. A stable Moodle environment therefore starts not with the Moodle installer itself, but with a properly prepared PHP stack where required extensions are enabled, compatible with the chosen Moodle version, and tested against real operational tasks.

Why memory_limit and max_execution_time Matter for Moodle Performance

Many administrators only pay attention to PHP settings after errors begin to appear. As long as courses open normally and quizzes function correctly, memory_limit and max_execution_time rarely receive much attention. The problem is that Moodle's most resource-intensive operations are not triggered during normal course browsing. They occur during specific tasks that place a much heavier load on the server.

One of the most common examples is course backup creation. A small course containing a handful of files will usually archive successfully even with conservative PHP settings. The situation changes when a course contains hundreds of documents, images, SCORM packages, quizzes, forums, and years of accumulated learning records. Moodle must collect a large amount of information, process it, and generate a backup archive. If sufficient memory is not available, the process may stop halfway through without producing a usable backup. Server logs often contain memory exhaustion messages, while the administrator sees nothing more than an HTTP 500 error or a blank page.

Support teams regularly encounter situations where administrators attempt to back up courses ranging from 5–10 GB in size, containing several years of learning content and assessment history. These operations can run for tens of minutes and consume hundreds of megabytes of memory. On a server configured with a 256 MB memory limit, such backups often fail before the archive is even created.

Similar issues appear during data import and export operations. Administrators may migrate large courses between Moodle installations or upload substantial volumes of educational content. Small courses import without difficulty, while larger ones become stuck at a particular stage of processing. In many cases, the problem is neither Moodle nor the course archive itself. The real cause is insufficient memory or a script execution time limit being reached before the operation completes.

Reporting creates another significant workload. On a small platform, instructors can generate statistics almost instantly. After several years of operation, the situation changes. A report covering hundreds of learners may require Moodle to analyse large volumes of activity logs, grades, assessment records, and completion data. If the operation takes longer than the configured max_execution_time, report generation fails. From the user's perspective, the report appears broken. In reality, the server simply terminated a process that exceeded its allowed execution time.

A common example appears in corporate training environments. A manager generates a compliance report covering 700–1,000 employees across multiple training programmes. Moodle may need to analyse thousands of assessment attempts, completion records, grades, and activity logs before producing the final report. If the query runs longer than the allowed execution time, the server terminates the operation before any results are returned.

SCORM packages can create similar challenges. Modern SCORM content often includes multimedia components, interactive elements, and built-in progress tracking mechanisms. Some packages are hundreds of megabytes in size and exchange data continuously with Moodle throughout the learning process. On servers configured with restrictive memory limits, these courses may behave unpredictably, terminate unexpectedly, or fail to save progress correctly.

Another common scenario involves bulk grading. An instructor reviews assignments from several hundred students, opens uploaded files, generates grade sheets, and performs batch grading actions. From the user's perspective, this looks like a routine administrative task. Behind the scenes, Moodle is processing large volumes of data. If memory is insufficient or execution limits are too restrictive, some operations may fail before completion.

The symptoms of memory shortages and execution timeouts differ from database or storage bottlenecks. Users can often browse courses and complete quizzes normally, while specific resource-intensive tasks become unreliable. Backups fail to complete, imports stop unexpectedly, reports terminate with errors, SCORM content behaves inconsistently, and administrative actions occasionally fail without an obvious explanation.

Support teams frequently encounter Moodle servers where CPU utilisation remains low and the database performs well, yet operational problems persist because of PHP limitations alone. For production Moodle environments, memory_limit and max_execution_time should never be treated as secondary settings. They directly affect Moodle's ability to perform the demanding tasks that become unavoidable as the number of courses, learners, and educational resources continues to grow.

Why the Database Becomes the Primary Performance Bottleneck

When Moodle owners encounter performance issues, the processor is usually the first thing they suspect. The logic seems obvious. If the platform is slow, the server must be running out of computing power. In practice, support teams much more often discover a different situation. CPU utilisation remains at only 20–30 per cent, plenty of memory is still available, yet users complain about slow quizzes, delayed course loading, and reports that take far too long to generate.

The reason is that almost every action in Moodle depends on the database.

Even a simple user login triggers a chain of database queries. Moodle validates the account, determines roles and permissions, retrieves user preferences, loads course information, and checks active sessions. For a single user, all of this happens almost instantly. When several hundred students log in shortly before an examination, the number of database requests increases dramatically.

The workload continues after login. Opening a course requires Moodle to retrieve section structures, verify access restrictions, load completion data, calculate learning progress, identify available assessments, and display learning resources. The larger the course and the longer a student has been using the platform, the more information Moodle must retrieve from the database.

The database becomes particularly important during assessments. Every answer must be saved, every quiz attempt updated, every timestamp recorded, and every activity logged. If several hundred students are taking an examination simultaneously, the database may process thousands of read and write operations within a short period. At that point, even a small increase in query execution time becomes noticeable to everyone involved.

Reporting creates another significant workload. Support teams frequently encounter Moodle installations where courses and quizzes perform normally, but instructors complain that analytics and reports are becoming increasingly slow. The reason is usually the amount of data being processed. To generate a single report, Moodle may need to query user records, grades, quiz attempts, activity logs, and completion tracking data simultaneously. On a platform that has been running for several years, such reports may need to analyse millions of records.

These data volumes often accumulate much faster than administrators expect. A platform with a few hundred active students can generate hundreds of thousands of new records every month through activity logs, assessment attempts, completion tracking, and system events alone. After two or three years of operation, individual tables commonly contain 10–20 million rows. On larger educational platforms, the numbers can be substantially higher. Every report, search, and database query must process far more information than it did when the platform was first deployed.

A similar situation occurs with grading. For an instructor, updating a grade appears to be a simple action in the interface. Behind the scenes, Moodle performs permission checks, updates gradebooks, recalculates final scores, records changes in activity logs, and updates related records throughout the system. When these operations occur simultaneously for large numbers of students, database activity increases significantly.

This is why Moodle can feel slow even on a server with abundant computing resources. The processor may spend much of its time waiting for SQL queries to complete. PHP processes may sit idle while waiting for responses from MySQL or MariaDB. Users see only the result: pages take longer to load, quizzes become less responsive, and reports require increasingly more time to generate.

Large educational platforms often provide a clear example. The server has enough CPU cores, memory is plentiful, and storage performance is strong. Yet page generation times continue to increase. Investigation reveals that dozens or even hundreds of processes are waiting for database operations to finish. In many cases, the majority of page response time is spent waiting for SQL queries rather than executing PHP code. From the operating system's perspective, the server appears relatively healthy. From the users' perspective, Moodle feels slow.

For this reason, the database is often the first component to become a performance bottleneck. As the number of students, courses, assessments, reports, and historical records grows, Moodle becomes increasingly dependent on the efficiency of MySQL or MariaDB. That is why serious Moodle performance investigations almost always begin with database analysis rather than CPU utilisation statistics.

VDS for Moodle 5
Launch online learning without complex setup!
  • High NVMe speed
  • Optimized for LMS
  • Suitable for courses and schools
  • Fast NVMe disks
VDS for Moodle 5

Database and Application Isolation for Large Moodle Deployments

Small Moodle projects can often run on standard shared hosting for years without major issues. As long as the number of active users remains relatively low, workloads stay predictable and available resources are usually sufficient. The situation changes as the platform grows and larger groups of users begin performing the same actions at the same time.

A good example can be found in corporate training environments. Imagine a company where several departments must complete mandatory certification before the end of the month. During normal periods, only a few dozen employees actively use Moodle. In the final days before the deadline, hundreds of staff members may begin logging in simultaneously. They access the same courses, complete assessments, submit results, and generate certificates. The increase in workload is not gradual. A platform that was almost idle the previous week suddenly begins processing thousands of additional database queries and write operations within a short period.

A similar pattern appears in universities during examination periods. Throughout the semester, Moodle usage is usually distributed fairly evenly. Students access course materials, submit assignments, and complete occasional assessments. During exams, the workload changes completely. Multiple groups of students start assessments simultaneously, open quizzes, receive individual question sets, and submit answers. A platform that normally serves 50–100 active users may suddenly need to support several hundred concurrent participants within a matter of minutes.

Training centres and online schools often experience comparable challenges. Several cohorts may start learning at the same time while instructors publish assignments, students upload coursework, and assessments are running concurrently. Moodle must handle large volumes of database activity, file uploads, write operations, and background processing simultaneously.

These are the situations where the limitations of a shared hosting environment often become visible. Even if neighbouring websites are not creating heavy workloads continuously, overlapping periods of peak activity can be enough to create resource contention. Educational platforms are particularly sensitive to this because examinations, certification programmes, and mandatory training sessions are usually tied to fixed schedules. They cannot simply be postponed because infrastructure resources become unavailable.

Support teams regularly encounter Moodle deployments where complaints appear only during specific hours. The platform performs well throughout the day. Evening classes begin, concurrent user numbers increase, and performance deteriorates rapidly. Investigation often shows that neither Moodle nor PHP configuration is responsible. The platform has simply reached the limits of the resources available to it.

This is one of the main reasons larger Moodle projects eventually move to VPS, Cloud VDS, or dedicated server environments. The benefit is not simply additional CPU cores or more memory. The greater advantage is predictability. When the database, PHP processes, and storage subsystem have guaranteed resources available, performance remains far more consistent during periods of peak demand.

For corporate training, this means that mandatory certification for several hundred employees can take place without widespread complaints or assessment failures. For universities, it allows examination periods to proceed without concerns that the platform will become unstable at the busiest moments. For online schools, it reduces the risk of performance issues during evening classes, assignment deadlines, and new course launches.

As a Moodle project grows, infrastructure isolation becomes less about raw performance and more about operational stability. Once learning activities depend on the platform every day, predictable database performance and guaranteed access to computing resources become far more valuable than the short-term savings of running in a heavily shared environment.

How Storage Performance Affects Moodle

When discussing Moodle performance, most attention is usually focused on CPU resources, memory, or database optimisation. In reality, a significant portion of Moodle's workload depends directly on storage performance. The platform constantly reads and writes data, and this goes far beyond database queries alone.

Every course contains documents, presentations, images, videos, assignments, and other learning resources. Whenever students access course content, Moodle must retrieve these files from storage and deliver them to users. If the storage subsystem starts introducing delays, course pages can become noticeably slower even when the database is performing normally.

Assignment submissions create another source of storage activity. In many Moodle deployments, students regularly upload documents, archives, presentations, and other files. As deadlines approach, large numbers of users may submit work simultaneously. From Moodle's perspective, this creates a continuous stream of write operations that must be processed efficiently.

Backups generate another storage-intensive workload. When Moodle creates a course backup, it collects files, quizzes, settings, grades, and other data into a single archive. On small courses this process is barely noticeable. On larger platforms containing dozens of substantial courses and years of accumulated content, backup operations can place significant pressure on the storage subsystem and affect the performance of other tasks.

Activity logging also contributes to storage demand. Moodle continuously records user logins, course access, quiz attempts, grade changes, and countless other events. To administrators these records appear as ordinary reporting data. To the server, they represent an ongoing stream of write operations that grows steadily over time.

For most modern Moodle environments, traditional HDD storage is difficult to recommend. Mechanical drives may cope adequately with small deployments and limited numbers of users, but delays become apparent very quickly during examinations, large file uploads, or backup operations. SSD storage should now be considered the practical minimum for a production LMS.

The difference becomes obvious when comparing identical Moodle platforms serving the same number of users. On HDD storage, students often begin noticing delays when moving between quiz questions, uploading files, or saving answers during busy periods. On SSD storage, many of these delays disappear because read and write operations can be processed much more efficiently. NVMe storage takes this a step further. Where SATA SSDs may begin building queues of pending I/O requests, NVMe storage can often continue handling requests with little or no visible impact on user experience.

A good example can be seen during an examination involving 300 students. While participants are opening questions, saving answers, and triggering autosave operations, the server may generate several thousand input/output operations per second. In workloads like this, 2,000–5,000 IOPS is entirely realistic. If the storage subsystem cannot keep up, delays begin appearing in quiz navigation, result saving, report generation, and other critical functions.

The advantages of NVMe become increasingly apparent as a Moodle project grows. During large-scale assessments, simultaneous assignment submissions, backup creation, or periods when multiple student groups are active at once, NVMe storage handles parallel operations far more effectively. Users do not notice this in benchmark figures. They notice it through a platform that remains responsive when activity levels are at their highest.

This is why NVMe provides a meaningful advantage for Moodle. The benefit is not simply higher transfer speeds. More importantly, NVMe excels at processing large numbers of small read and write operations simultaneously. That is exactly the type of workload generated by quizzes, activity logs, SCORM packages, database activity, and most of Moodle's internal processes.

For that reason, storage should never be viewed simply as a place to keep files. It participates in nearly every critical Moodle operation, and its performance becomes increasingly important as the number of students, courses, assessments, and learning resources continues to grow.

Redis and Moodle Object Caching

Many administrators only start looking at Redis after Moodle performance problems begin to appear. By that stage, the platform is often noticeably slower than it was a few months earlier. Courses take longer to open, the database receives more requests, and users begin reporting delays even though CPU and memory utilisation still appear relatively healthy.

The root cause is often repeated database activity.

During normal operation, Moodle constantly requests the same information. It checks user permissions, retrieves role assignments, loads course settings, processes active sessions, reads system configuration, and performs many other repetitive tasks. Most of this data changes infrequently, yet it may be requested on virtually every page load.

Without object caching, Moodle has to retrieve the same information from the database over and over again.

Consider a corporate learning portal where several hundred employees are taking mandatory training at the same time. Users access the same courses, view the same content, and rely on the same platform settings. Without Redis, MySQL or MariaDB repeatedly processes identical requests. The system continuously checks permissions, loads course parameters, retrieves user settings, and reads configuration data. The volume of duplicate queries can become surprisingly large.

Redis stores frequently used data in memory, allowing Moodle to retrieve it much faster than repeatedly querying the database. In practical terms, the platform stops performing the same work thousands of times.

The benefits are most noticeable when large numbers of users access the same content simultaneously. Corporate certification programmes provide a good example. Hundreds of employees may be working through the same training materials during a limited time window. Instead of repeatedly requesting identical information from the database, Moodle can serve much of it directly from cache. Database load decreases, page generation becomes faster, and the platform remains more responsive during peak activity.

A similar pattern appears in universities and online schools during large-scale assessments. When hundreds of students access the same course at the same time, the number of repeated database requests grows dramatically. In these situations, Redis can often deliver a greater improvement than simply adding additional CPU resources.

Support teams regularly see Moodle deployments where enabling Redis significantly reduces database activity without changing the number of users, courses, or server specifications. The workload itself remains the same, but a substantial portion of repetitive queries is removed from MySQL or MariaDB.

Redis should not be viewed as a universal performance solution, however.

Administrators occasionally deploy Redis expecting a dramatic improvement and notice very little difference. This usually happens when the primary bottleneck lies elsewhere. Slow storage, an overloaded database, insufficient memory, cron-related issues, or hosting limitations will not disappear simply because object caching has been enabled.

Redis is also less effective for complex reporting workloads. If Moodle must analyse large volumes of unique data and generate new calculations, caching provides limited benefit because the information still needs to be processed in real time. Reports based on grades, activity logs, assessment history, and learning analytics often continue relying heavily on database performance.

For that reason, Redis works best as part of a broader Moodle performance strategy rather than as a standalone optimisation. Its value increases as the number of concurrent users grows and the proportion of repeated requests becomes larger. The more users access the same courses, resources, and settings, the greater the impact object caching can have on overall platform responsiveness.

In well-used Moodle environments, Redis often becomes one of the simplest ways to reduce unnecessary database activity, improve response times during peak periods, and help the platform remain stable under sustained load.

When Shared Hosting Is No Longer Enough

Many Moodle projects start on standard shared hosting and perform perfectly well in the early stages. Courses load quickly, assessments run smoothly, and available resources seem more than adequate. The challenge is that infrastructure limitations rarely appear all at once. Performance tends to degrade gradually, making it easy to miss the point where the platform has outgrown its environment.

One of the earliest warning signs is the appearance of HTTP 500 and 503 errors. Moodle may operate normally during routine activity, but temporary service interruptions begin appearing during assessments, enrolment periods, or large numbers of simultaneous logins. Support teams regularly encounter situations where these errors occur only during specific hours and disappear as soon as activity levels drop. In many cases, this indicates that the platform is reaching the limits of the resources available to it.

Slow assessments are another common symptom. Students can open quizzes without difficulty, yet delays appear when saving answers. Moving between questions may take several seconds even though Moodle feels responsive at other times. When the same behaviour occurs during every examination, certification programme, or mandatory assessment, the bottleneck is often no longer within Moodle itself but within the hosting environment.

On shared hosting, these issues are frequently linked to CloudLinux resource limits. Most users never see these restrictions directly. The platform simply begins encountering limits on CPU usage, memory allocation, entry processes, or disk I/O. While activity remains modest, the restrictions may go unnoticed. As soon as dozens or hundreds of users become active simultaneously, Moodle reaches those limits and performance deteriorates rapidly.

Corporate training platforms provide a good example. A system may run without complaints for months. Then the company launches mandatory certification for employees. Concurrent usage increases several times over, and Moodle suddenly begins generating errors, slowing down assessments, and delaying result processing. The platform itself has not changed. The only difference is the volume of activity.

Support teams have repeatedly seen similar situations. Before moving to a VPS, certification sessions involving 200–300 employees produced HTTP 503 errors, quiz pages opened slowly, and answer submissions sometimes took several seconds to complete. After migrating to a VPS, the courses, assessments, and database remained exactly the same. Users followed the same learning paths and completed the same tests. The only change was the infrastructure. The platform gained guaranteed CPU, memory, and storage resources. As a result, examinations completed without errors, answer submissions became immediate, and increasing user numbers no longer caused noticeable performance degradation.

A similar pattern appears in growing online schools. A platform may begin with a few dozen students and perform perfectly well. A year later, enrolment has grown into the hundreds. More courses are available, more assessments are running, more assignments are being uploaded, and more reports are being generated. Each individual task still functions correctly, but the overall workload gradually moves beyond what shared hosting can comfortably support.

Support engineers generally recommend focusing less on individual server metrics and more on recurring symptoms. If problems appear primarily during lessons, if performance worsens as student numbers grow, if errors occur during peak activity periods, and if every optimisation provides only temporary relief, the platform has likely reached the practical limits of its current hosting plan.

At that stage, moving to a VPS or Cloud VDS is no longer simply a way to obtain additional resources. It becomes a natural step in the growth of the project. If Moodle regularly slows down during examinations, reaches CloudLinux limits, generates errors as the user base expands, and requires increasingly frequent optimisation, delaying the move rarely makes sense.

Experience consistently shows that the sooner infrastructure is aligned with real-world workloads, the less time administrators spend fighting resource limitations and the more stable the learning platform remains as it continues to grow.

What Infrastructure Should a Moodle Platform Run On?

After diagnosing a large number of Moodle deployments, one pattern becomes clear. Performance problems are rarely caused by a single component. Many administrators try to solve issues in isolation by adding CPU cores, increasing memory, or upgrading to a larger hosting plan. Performance improves for a while, but the same complaints often return a few months later.

The reason is simple. Moodle operates as an interconnected system. Overall performance depends not on a single server specification but on how effectively the database, PHP environment, caching layer, storage subsystem, and background processes work together.

For modern Moodle deployments, NVMe storage has become a fundamental part of the infrastructure. The platform constantly interacts with databases, course files, assignments, activity logs, backups, and assessment results. As the number of concurrent users grows, so does the platform's dependence on storage performance and I/O capacity.

Redis plays an equally important role. Moodle repeatedly accesses the same types of information, including course settings, user roles, permissions, and configuration data. Without caching, the database is forced to process many identical requests over and over again. Redis stores frequently used objects in memory, reducing pressure on MySQL or MariaDB and helping the platform remain responsive during periods of heavy activity.

The PHP environment also deserves close attention. Even a powerful server can lose a significant amount of performance if Moodle runs on an outdated PHP version. Modern PHP releases execute code more efficiently and make better use of available resources. OPcache further improves performance by keeping compiled PHP code in memory instead of forcing the server to recompile the same files repeatedly.

In many Moodle environments, the database remains the most critical component. User authentication, course access, assessments, grading, reporting, and many internal Moodle processes depend directly on MySQL or MariaDB. This makes database tuning, maintenance, and the ability to handle sustained workloads just as important as raw server specifications.

Cron processing is another essential part of a healthy Moodle environment. Notifications, certificates, learning progress updates, integrations, and background task queues all rely on scheduled jobs running correctly. Even a well-configured platform gradually becomes less reliable if background processes are delayed or misconfigured.

Reliable backups are equally important. Moodle stores assessment results, grades, certificates, learning materials, and student progress records. Losing this information can have serious consequences for educational institutions and businesses alike. Backup planning should therefore be treated as a core infrastructure requirement rather than an optional safety feature.

Scalability also matters. Successful Moodle projects rarely remain the same size for long. Student numbers increase, new courses are added, integrations expand, and more instructors begin using the platform. The underlying infrastructure should allow resources to grow without complex migrations or prolonged downtime.

For this reason, choosing hosting for Moodle projects involves much more than comparing CPU counts and memory allocations. The real question is whether the entire environment is designed to support genuine educational workloads. For example, when hosting larger Moodle deployments at Era.Host, the focus is placed on the balance of the overall infrastructure rather than on any single specification. NVMe storage, Redis support, modern PHP versions, properly configured cron processing, and scalable resources work together to support long-term platform growth.

Ultimately, a stable Moodle platform is built around predictability rather than maximum hardware specifications. Users do not care how many CPU cores a server has. They care that assessments open instantly, exam results are saved correctly, reports generate on time, and the platform remains available during peak activity.

For an online school, that means delivering courses and examinations without constant concerns about system stability. For a university, it means confidence that examination periods will not result in outages or lost assessment data. For a business, it means reliable employee training, certification, and compliance programmes.

That is what separates infrastructure designed for real educational workloads from infrastructure that only performs adequately during quiet periods. When every component is aligned with the demands of the platform, Moodle remains a dependable learning system rather than a recurring source of technical problems, emergency troubleshooting, and unexpected costs.

Frequently asked questions
Small Moodle installations with a few dozen active users can often run comfortably with 2–4 GB of RAM. Production environments typically use 8–16 GB, while platforms running SCORM content, large-scale assessments, or supporting several hundred concurrent users may require significantly more memory.
For smaller deployments, 256–512 MB is usually sufficient. Most corporate LMS platforms and online schools benefit from at least 512 MB. Environments handling large courses, backups, complex reports, or SCORM packages commonly use a memory_limit of 1 GB or higher.
The most important extensions include intl, mbstring, curl, zip, xml, soap, OPcache, and either GD or ImageMagick. Missing extensions can lead to installation issues, failed imports, notification problems, localisation errors, certificate generation failures, and file processing issues.
CPU resources are not always the first bottleneck. Performance problems are often caused by database delays, storage I/O limitations, missing Redis caching, cron-related issues, or large volumes of accumulated data. Low CPU utilisation does not automatically mean the platform is performing well.
For small educational projects, Redis may provide only modest improvements. On platforms with hundreds of active users, object caching can significantly reduce duplicate database queries and help maintain stable performance during peak activity.
The difference becomes most noticeable under heavy concurrent workloads. During examinations, mass assignment uploads, and large training sessions, NVMe handles parallel read and write operations far more efficiently. Standard SSDs are often sufficient for smaller deployments, but NVMe provides greater performance headroom for growing LMS platforms.
Over time, activity logs, quiz attempts, grades, notifications, and other records continue accumulating. Databases grow larger, reports analyse more data, and backups become increasingly resource-intensive. Even without major growth in user numbers, these factors gradually affect performance.
Common symptoms include slow report generation, delays when moving between quiz questions, sluggish administration pages, and slow saving of assessment results. In many cases, CPU and memory usage remain relatively low while database response times increase.
Cron handles notifications, learning progress updates, certificate generation, message queues, integrations, and numerous internal processes. When scheduled tasks stop running correctly, problems begin appearing across multiple areas of the platform even though Moodle itself may remain accessible.
For smaller learning platforms, yes. Shared hosting can often handle dozens of concurrent users without difficulty. As student numbers increase, assessments become more frequent, and corporate training workloads grow, shared hosting limitations tend to become much more noticeable.
Regular HTTP 500 or 503 errors, CloudLinux resource limits, slow examinations, increasing user numbers, and optimisation efforts that provide only temporary improvements are all strong indicators that the platform has outgrown a shared hosting environment.
Most modern Moodle deployments benefit from a combination of NVMe storage, Redis caching, a current PHP version with OPcache enabled, a well-optimised MySQL or MariaDB database, properly configured cron processing, reliable backup systems, and the ability to scale resources as the platform grows.
Related articles
How to Choose Hosting for a Moodle Online School
cPanel admin. Setting Up Corporate Mail in cPanel
How to Choose Hosting for WordPress, CMS Platforms, and Custom-Built Websites