Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
Количество ответов: 21

Здравствуйте, используем мудл уже 4 й год, 1 платформа  для 10 школ. Мудл разросся БД уже больше 35ГБ, сам мудл на хостинге около 120 ГБ.

Начинают появляться проблемы с резервным копированием (зависает) и восстановлением, ошибками в работе системы.

Последняя из них заключается в том, что есть курс, в него преподаватели наимпортировали материалов (тесты лекции и тп.). При попытке добавить простую надпись, система выдает ошибку 


не говоря уже о тестах и заданиях. Захожу в журнал оценок идет бесконечный пересчет без результатов (более  4 часов), тесты не открываются, грузятся бесконечно

Была попытка сделать резервную копию и развернуть в новый курс, развернулась на 99 процентов, остановилась, но курс создался, но работал с теми же ошибками - еле его удалил.

Очистку курса выполнить нет возможности, процесс подвисает и выдает ошибку

Может есть какие-то команды для оптимизации базы, поиска и устранения ошибок. Moodle 3.8.2, боюсь уже и обновлять...

Кто может помогите добрым советом??

Вообще какая то проблема с ростом мудл и количеством курсов, чем дальше тем хуже, думаю уже мудл с нуля ставить

В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Vadim Tabunshchik -
Изображение пользователя Developers
Так посмотрите по таблицам, какие занимают столько места, что аж база 35 гигов. Может нужно логи/стату почистить.
Сколько курсов? Сколько материалов и каких? Если преподаватели накидали файлов в десятки/сотни мегабайт, то Мудл и будет еле ворочаться, и резервное копирование/восстановление будет проблемой.
По скрину с ошибкой:
в первом файле идет вызов названия категории оценок - grade_item->get_name,
второй файл - есть какое-то условие доступа (availability/condition), включающее вышеназванную категорию $gradeoptions[$id] = $item->get_name
Вот и копайте в курсе в этом направлении: проверьте все названия категорий оценок, все условия доступа/выполнения и т. п.
В ответ на Vadim Tabunshchik

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
Логи хранятся не больше недели, статистика вообще отключена...

БД немного почистил, не знаю что еще можно удялять, но ошибка на курсе не исчезла
В ответ на Vadim Tabunshchik

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
Спасибо, одну табличку нашел (mdl_block_xp_filters - 11 ГБ), почищу, но это не решает проблемы работы курса
В ответ на Vadim Tabunshchik

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
Подскажите если через бд почистить таблицы mdl_question_attempts и mdl_question_attempt_steps, mdl_question_attempt_step_data
сайт Ляжет??
В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Vadim Tabunshchik -
Изображение пользователя Developers

А что это за блок block_xp_filters? Самопал? Что делает?

Забывайте про лазание в БД руками. Для удаления попыток есть стандартные средства и плагин: Old quiz and question attempts deletion

Установите, настройте период хранения, запустите крон в консоли (несколько раз) и всё почистится. Дальше будет чиститься автоматом, если крон настроен.

В ответ на Vadim Tabunshchik

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
Блок называется ОПЫТ!!!  https://moodle.org/plugins/block_xp  ученики выполняя задания, повышали свой уровень и получали звездочки, игрофикация так сказать
Я в шоке что он там хранил, удалил блок средствами мудл, таблица из бд исчезла
Спасибо за подсказку с плагином Old quiz and question attempts deletion, а тот факт что он только для версии 3,7 не страшен?? у нас 3,8...
В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Vadim Tabunshchik -
Изображение пользователя Developers
Я бы не советовал, если бы блок не работал улыбаюсь
В ответ на Vadim Tabunshchik

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -

Понял, спасибо, а он попытки прохождения тестов удаляет, а в журнале оценки остаются?

В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Vadim Tabunshchik -
Изображение пользователя Developers
Оценки хранятся в других таблицах БД, плагин их не затрагивает.
В ответ на Vadim Tabunshchik

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
Это нормальный результат работы скрипта, т.е. все почищено, или есть ошибки???
/usr/bin/php local/deleteoldquizattempts/cli/delete_attempts.php --date="2019-05-01 00:00:00"
Default exception handler: Не знайдено запис в таблиці бази даних context. Debug: SELECT * FROM {context} WHERE id = ?
[array (
0 => '153809',
)]
Error code: invalidrecord
* line 1562 of /lib/dml/moodle_database.php: dml_missing_record_exception thrown
* line 1538 of /lib/dml/moodle_database.php: call to moodle_database->get_record_select()
* line 5213 of /lib/accesslib.php: call to moodle_database->get_record()
* line 5602 of /lib/accesslib.php: call to context::instance_by_id()
* line 7128 of /lib/accesslib.php: call to context->get_parent_context()
* line 232 of /lib/classes/event/base.php: call to context_module->get_course_context()
* line 436 of /mod/quiz/locallib.php: call to core\event\base::create()
* line 60 of /local/deleteoldquizattempts/classes/helper.php: call to quiz_delete_attempt()
* line 228 of /local/deleteoldquizattempts/classes/helper.php: call to local_deleteoldquizattempts\helper->delete_attempts()
* line 52 of /local/deleteoldquizattempts/cli/delete_attempts.php: call to local_deleteoldquizattempts\helper->delete_attempts_cli_handler()

!!! Не знайдено запис в таблиці бази даних context. !!!
!! SELECT * FROM {context} WHERE id = ?
[array (
0 => '153809',
)]
Error code: invalidrecord !!
!! Stack trace: * line 1562 of /lib/dml/moodle_database.php: dml_missing_record_exception thrown
* line 1538 of /lib/dml/moodle_database.php: call to moodle_database->get_record_select()
* line 5213 of /lib/accesslib.php: call to moodle_database->get_record()
* line 5602 of /lib/accesslib.php: call to context::instance_by_id()
* line 7128 of /lib/accesslib.php: call to context->get_parent_context()
* line 232 of /lib/classes/event/base.php: call to context_module->get_course_context()
* line 436 of /mod/quiz/locallib.php: call to core\event\base::create()
* line 60 of /local/deleteoldquizattempts/classes/helper.php: call to quiz_delete_attempt()
* line 228 of /local/deleteoldquizattempts/classes/helper.php: call to local_deleteoldquizattempts\helper->delete_attempts()
* line 52 of /local/deleteoldquizattempts/cli/delete_attempts.php: call to local_deleteoldquizattempts\helper->delete_attempts_cli_handler()
!!
В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Vadim Tabunshchik -
Изображение пользователя Developers
Нет, это ненормально. В базе данных ошибка: не найдена запись с контекстом модуля элемента курса «Тест», попытки которого вы пытаетесь удалить.
В ответ на Vadim Tabunshchik

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Vadim Tabunshchik -
Изображение пользователя Developers
Искать и добавлять нужную запись в таблицу mdl_context по аналогии с существующими записями. Или вручную удалять в базе записи попыток, относящиеся к этому тесту. И то, и то требует хорошего знания структуры БД и понимания, что делаешь улыбаюсь
В ответ на Vadim Tabunshchik

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
В общем проще забЫть, и проблем с каждым разом все больше
Пробовал добавить запись не помоголо, пробовал удалить все записи где есть упомнинания об этом айди - не помогло
Понимать бы откуда он берет этот айди для поиска в этой базе...
В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Отписал вам в github, где вы писали по плагину, дублирую сюда
поищите в mdl_context where path like '%/153809/%" - это будут битые записи.
Почитайте инструкции https://docs.moodle.org/38/en/How_to_rebuild_context_paths , это перестроит таблицу контекстов, должно помочь
В ответ на Vadim Dvorovenko

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -

Здравствуйте Вадим, отдельное спасибо за быстрый ответ на github, пробовал выполнить все интструкции и делал поиск ошибок и проверку БД, к сожалению не помогло.

Пробовал удалить все записи  с текстом 153809, скрипт начал выдавать другую ошибку, жалко не скопировал, как мне показалось она была связана с удалением этих записей. Потом восстановил таблицы, ошибка вернулась как была

В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
эти записи не нужно удалять. Нужно по этим записям найти, что это за элемент курса или курс, и пытаться решать проблемы с ним. Как варинат, совсем удалить этот элемент курса. Если он слишком ценен - скопировать, или забэкапить/восстановить из бэкапа. Как вариант, забэкапить и потом восстановить из бэкапа весь курс
В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
старайтесь максимально документировать всё, что делаете, в том числе результаты работы скриптов, которые, на ваш взгляд, ничего особенного не сделали. Это позволит присутствующим здесь убедиться, что вы всё сделали правильно, и приступить к более конкретному поиску ваших проблем
В ответ на Vadim Dvorovenko

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
Удалил тест с id 153809 . Не помогло... Ошибка та же...
Если выполнить команду с боле ранним сроком, 2017 год то все ок, если указываем 2018 то появляется ошибка.
Может еще как то вручную можно удалить записи?

Выполняем команду /usr/bin/php local/deleteoldquizattempts/cli/delete_attempts.php --date="2017-10-10 00:00:00"
Все хорошо
Выполняем команду /usr/bin/php local/deleteoldquizattempts/cli/delete_attempts.php --date="2017-11-11 00:00:00"
Все плохо)



В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
Еще заметил если команду повторять многократно, то дата на которой возникает ошибка смещается, но ошибка одна и та же с тем же айди, может помагает, а может скрипт хранит где-то логи и не обращается уже к этой дате...

eschool@ds38:/var/www/eschool/eschool.dn.ua$ /usr/bin/php local/deleteoldquizattempts/cli/delete_attempts.php --date="2018-04-30 00:00:00"
!!! Не знайдено запис в таблиці бази даних context. !!!
!! SELECT * FROM {context} WHERE id = ?
[array (
  0 => '153809',
)]
Error code: invalidrecord !!
!! Stack trace: * line 1562 of /lib/dml/moodle_database.php: dml_missing_record_exception thrown
* line 1538 of /lib/dml/moodle_database.php: call to moodle_database->get_record_select()
* line 5213 of /lib/accesslib.php: call to moodle_database->get_record()
* line 5602 of /lib/accesslib.php: call to context::instance_by_id()
* line 7128 of /lib/accesslib.php: call to context->get_parent_context()
* line 232 of /lib/classes/event/base.php: call to context_module->get_course_context()
* line 436 of /mod/quiz/locallib.php: call to core\event\base::create()
* line 60 of /local/deleteoldquizattempts/classes/helper.php: call to quiz_delete_attempt()
* line 228 of /local/deleteoldquizattempts/classes/helper.php: call to local_deleteoldquizattempts\helper->delete_attempts()
* line 52 of /local/deleteoldquizattempts/cli/delete_attempts.php: call to local_deleteoldquizattempts\helper->delete_attempts_cli_handler()
 !!
eschool@ds38:/var/www/eschool/eschool.dn.ua$ /usr/bin/php local/deleteoldquizattempts/cli/delete_attempts.php --date="2018-04-30 00:00:00"
eschool@ds38:/var/www/eschool/eschool.dn.ua$ /usr/bin/php local/deleteoldquizattempts/cli/delete_attempts.php --date="2018-04-30 00:00:00"
eschool@ds38:/var/www/eschool/eschool.dn.ua$ /usr/bin/php local/deleteoldquizattempts/cli/delete_attempts.php --date="2018-04-30 00:00:00"
В ответ на Алексей Буренко

Re: Ошибка работы Moodle или БД? Скрипты для оптимизации и поиска ошибок?

от Алексей Буренко -
Вроде заработало, повторно выполнял команду, по сто раз, даты по-немногу проскакивали, сейчас поперло)))
И размер таблиц в  БД вроде меньше стал...
УРА!!!
Всем спасибо за помощь...