M
Все статьи
Практика 7 мин чтения

Почему Moodle тормозит и как его ускорить: оптимизация БД, кэш, cron

Диагностика и устранение причин медленной работы Moodle: отключённый кэш, переполненные логи, медленный cron, неоптимальная БД. Пошаговое руководство по ускорению.

Диагностика и устранение причин медленной работы Moodle: отключённый кэш, переполненные логи, медленный cron, неоптимальная БД. Пошаговое руководство по ускорению.

Когда это становится проблемой

Страница курса загружается 8 секунд. Во время сессии сайт «ложится» при 50 одновременных пользователях. Преподаватели жалуются, что журнал оценок зависает. Если что-то из этого про вас — эта статья поможет найти и устранить причину.

Хорошая новость: в большинстве случаев медленный Moodle — это не «слабый сервер», а несколько конкретных настроек, которые можно исправить без замены железа.

Шаг 1: встроенная диагностика

Откройте: Администрирование сайта → Сервер → Обзор производительности. Moodle покажет список потенциальных проблем с рекомендациями. Обратите особое внимание на:

  • Статус кэширования — включён ли MUC cache
  • PHP OPcache — включён и настроен ли
  • Размер базы данных и логов
  • Статус cron — когда последний раз выполнялся

Шаг 2: кэширование — самый важный пункт

По умолчанию Moodle хранит кэш в файловой системе. Для 100+ одновременных пользователей это узкое место. Подключение Redis радикально улучшает ситуацию — ускорение в 3–5 раз по моему опыту.

Установите Redis на сервер, добавьте в config.php:

  • Перейдите в Администрирование → Плагины → Кэширование → Конфигурация
  • Добавьте Redis как хранилище: хост 127.0.0.1, порт 6379
  • Назначьте Redis для Application cache и Session cache

Шаг 3: PHP OPcache

OPcache кэширует скомпилированный PHP-код — без него PHP перекомпилирует каждый файл при каждом запросе. Для Moodle (тысячи PHP-файлов) это огромная нагрузка. Проверьте в php.ini:

  • opcache.enable=1
  • opcache.memory_consumption=256
  • opcache.max_accelerated_files=20000
  • opcache.revalidate_freq=60

Шаг 4: очистка логов базы данных

Таблица mdl_logstore_standard_log растёт непрерывно и может достигать нескольких гигабайт за год работы. Медленные запросы к этой таблице замедляют весь сайт. Настройте автоматическую очистку: Администрирование → Плагины → Журналы → Стандартный журнал → установите «Хранить логи не более 180 дней».

Шаг 5: cron Moodle

Cron Moodle выполняет фоновые задачи: отправку уведомлений, обработку оценок, очистку сессий. Если cron не работает или работает редко — задачи накапливаются и «взрываются» при следующем запуске, нагружая сервер. Проверьте: cron должен запускаться каждую минуту через системный crontab.

  • Команда: * * * * * php /var/www/moodle/admin/cli/cron.php >> /dev/null 2>&1
  • Проверьте дату последнего выполнения: Администрирование → Сервер → Задачи → Плановые задачи

Шаг 6: оптимизация базы данных

Периодически выполняйте ANALYZE / OPTIMIZE для MySQL или VACUUM ANALYZE для PostgreSQL — это обновляет статистику для планировщика запросов. Проверьте наличие пропущенных индексов: Администрирование → Сервер → База данных → Отсутствующие индексы.

Когда нужен более мощный сервер

Если все шаги выполнены, а система всё равно не справляется с нагрузкой — пора масштабироваться. Признаки: CPU постоянно 80%+, RAM заканчивается, disk I/O в красной зоне. В этом случае увеличение ресурсов сервера или переход на кластерную архитектуру — объективная необходимость.

Проведу диагностику и ускорю ваш Moodle — опишите симптомы, разберёмся.

Нужна помощь с Moodle?

Опишите задачу — расскажу, как решить её конкретно в вашем случае. Свяжитесь — разберём вместе.