Размеры таблиц mdl_question_states mdl_grade_grades_history mdl_question_sessions

Размеры таблиц mdl_question_states mdl_grade_grades_history mdl_question_sessions

от Виталий Лавров -
Количество ответов: 6
Изображение пользователя Эксперт по Moodle

Есть moodle 1.9, число записей в самых больших таблицах

mdl_question_states  6.200.000
mdl_question_sessions 2.300.000
mdl_grade_grades_history 2.100.000

Вопрос: уменьшится ли число записей в таблицах если изменить настройки "Grade history lifetime:" с "Never delete history" на "1000 дней" ( работает оно 2010 года)

связаны ли таблицы mdl_question_states и mdl_question_sessions с mdl_grade_grades_history ?

В ответ на Виталий Лавров

Re: Размеры таблиц mdl_question_states mdl_grade_grades_history mdl_question_sessions

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

В cron.php есть запись: grade_cron();

В function grade_cron() при НЕнулевом параметре $CFG->gradehistorylifetime будут очищаться таблицы 'grade_outcomes_history', 'grade_categories_history', 'grade_items_history', 'grade_grades_history', 'scale_history'

Выводы делайте сами улыбаюсь

В ответ на Vadim Tabunshchik

Re: Размеры таблиц mdl_question_states mdl_grade_grades_history mdl_question_sessions

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

Ага, с grade_history прояснилось.

А есть ли способ почистить mdl_question_states ? самый старая запись в ней 2009-03-30 т.е. с момента установки.

delete_attempt() удаляет оттуда данные.  Есть ли способ удалить все попытки до определенной даты, оставив только конечный результат выполнения задания.

В ответ на Виталий Лавров

Re: Размеры таблиц mdl_question_states mdl_grade_grades_history mdl_question_sessions

от Vadim Tabunshchik -
Изображение пользователя Developers
delete_attempt() удаляет оттуда данные

Это которая в questionlib.php?

Есть ли способ удалить все попытки до определенной даты, оставив только конечный результат выполнения задания.

Не задания, а теста, наверное? улыбаюсь

Я бы посмотрел, что за попытки остались в quiz_attempts после работы крона, выбрал timestart самой ранней попытки и удалил все записи из question_states с timestamp меньше, чем timestart

В ответ на Виталий Лавров

Re: Размеры таблиц mdl_question_states mdl_grade_grades_history mdl_question_sessions

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Там очень сложная структура.

В question_states хранятся внутренние состояния вопроса (показан, отвечен, оценен), которые связаны с попытками прохождения вопросов в question_attempts. Попытки ответа на вопрос свзязаны с попытками прохождения теста в quiz_attempts. По задумке авторов предполагалось, что вопросы могут быть использованы не только в тестах, поэтому попытки прохождения вопросов структурно были отделены от попыток прохождения теста, хотя сейчас вопросы из банка вопросов не используются нигде кроме тестов.

Поэтому для очистки question_states и question_attempts нужно удалять попытки прохождения теста. Но попытки прохождения тестов - это история обучения. Удалять попытки тестов, чтобы освобождать место в БД, это почти то же самое, что удалять файлы, присланные студентами в ответах на задания, чтобы освободить место на диске. То есть допустимо, когда это делает преподаватель осмысленно, но автоматически это не должно происходить. Если логи и история изменения оценок, это не критичные данные, которые можно удалять автоматом, то ответы студентов на тест или присланные работы удаляются только человеком, таков дизайн системы. В итоге, чтобы очищать эту таблицу, нужно либо выполнять очистку старых курсов, либо их удаление.

Можно, конечно, написать модуль, который будет выбирать в системе попытки тестирования, которые старше определенного возраста и удалять их. Но нужно понимать, как это согласуется с политикой хранения истории обучения в вашей организации. Если уж делать такой модуль, то стоит подумать и об удалении старых тем форумов, старых ответов на задания, старых попытках прохождения лекций - а в каждом модуле это отдельная задача.

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

Пока вижу такие глобальные пути решения этой проблемы:

- Запретить повторное использование курсов для следующих курсов. Новый поток студентов пришел - делается новый курс, импорт, а старый курс после окончания регламентированного срока хранения истории обучения студента удаляется.

- Делать очистку перед каждым новым потоком. Каждый год летом делать резервное копирование всей системы в архив, после чего делать очистку всех курсов.



В ответ на Vadim Dvorovenko

Re: Размеры таблиц mdl_question_states mdl_grade_grades_history mdl_question_sessions

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
А, только сейчас заметил, что обсуждается 1.9. Там немного другой механизм хранения вопросов (question_attempts появились после 2.0), но в остальном вся описанная логика та же. Всё только через очистку и удаления курсов