-
Bug
-
Resolution: Fixed
-
Major
-
3.5.1, 4.0.6, 4.1.1, 4.2
In our moodle-environment the cronjob task \core\task\badges_cron_task fails regularly with:
{{
Scheduled task failed: Auszeichnungen vergeben (core\task\badges_cron_task),Fehler beim Lesen der Datenbank
Debug info:
Too many tables; MariaDB can only use 61 tables in a join
SELECT DISTINCT u.id
FROM mdl_user u
LEFT JOIN mdl_course_modules_completion cmc38152 ON
cmc38152.userid = u.id AND
cmc38152.coursemoduleid = ? AND
( cmc38152.completionstate = ? OR
cmc38152.completionstate = ? ) LEFT JOIN mdl_course_modules_completion cmc37442 ON
cmc37442.userid = u.id AND
cmc37442.coursemoduleid = ? AND
( cmc37442.completionstate = ? OR
cmc37442.completionstate = ? ) LEFT JOIN mdl_course_modules_completion cmc37444 ON
cmc37444.userid = u.id AND
cmc37444.coursemoduleid = ? AND
( cmc37444.completionstate = ? OR
cmc37444.completionstate = ? ) LEFT JOIN mdl_course_modules_completion cmc37443 ON
cmc37443.userid = u.id AND
cmc37443.coursemoduleid = ? AND
( cmc37443.completionstate = ? OR
cmc37443.completionstate = ? ) LEFT JOIN mdl_course_modules_completion cmc37477 ON
cmc37477.userid = u.id AND
cmc37477.coursemoduleid = ? AND
( cmc37477.completionstate = ? OR
cmc37477.completionstate = ? ) LEFT JOIN mdl_course_modules_completion cmc38138 ON
cmc38138.userid = u.id AND
cmc38138.coursemoduleid = ? AND
( cmc38138.completionstate = ? OR
cmc38138.completionstate = ? ) LEFT JOIN mdl_course_modules_completion cmc38139 ON
cmc38139.userid = u.id AND
cmc38139.coursemoduleid = ? AND
( cmc38139.completionstate = ? OR
cmc38139.completionstate = ? ) LEFT JOIN mdl_course_modules_completion cmc37647 ON
cmc37647.userid = u.id AND
cmc37647.coursemoduleid = ? AND
( cmc37647.completionstate = ? OR
cmc37647.completionstate = ? )
[...]
Backtrace:
- line 1277 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
- line 503 of /lib/badgeslib.php: call to mysqli_native_moodle_database->get_fieldset_sql()
- line 78 of /badges/cron.php: call to badge->review_all_criteria()
- line 34 of /badges/cron.php: call to badge_review_cron()
- line 48 of /lib/classes/task/badges_cron_task.php: call to badge_cron()
- line 105 of /lib/cronlib.php: call to core\task\badges_cron_task->execute()
- line 67 of /lib/cronlib.php: call to cron_run_inner_scheduled_task()
- line 61 of /admin/cli/cron.php: call to cron_run()
}}
I believe that this problem only occurs in production environments, since the join is probably only then performed over +61 tables.