Below is some investigation from adding error_log((new Exception())->getTraceAsString());
to the count_submissions_need_grading
function.
The same time we saw a log in the error log for the stack trace, there was a corresponding log in the access log for POST /lib/ajax/service.php?sesskey=xyz&info=core_calendar_get_calendar_monthly_view
The users which are triggering all the calls to the "needs grading" function are also students.
Below is the stack trace for one of the error log entries. For this one student, the AJAX request called the function 8 times before the entry was truncated.
[Fri Oct 23 12:51:41.438547 2020] [proxy_fcgi:error] [pid 20501:tid 140645424310016] [client IP HIDDEN:0] AH01071: Got error 'PHP message:
#0 /mod/assign/lib.php(1893): assign->count_submissions_need_grading()\n
#1 /lib/moodlelib.php(7719): mod_assign_core_calendar_provide_event_action(Object(calendar_event), Object(core_calendar\\action_factory), '103581')\n
#2 /calendar/classes/local/event/container.php(299): component_callback('mod_assign', 'core_calendar_p...', Array)\n
#3 /calendar/classes/local/event/factories/event_factory.php(42): core_calendar\\local\\event\\container::apply_component_provide_event_action(Object(core_calendar\\local\\event\\entities\\event))\n
#4 /calendar/classes/local/event/factories/event_abstract_factory.php(197): core_calendar\\local\\event\\factories\\event_factory->apply_component_action(Object(core_calendar\\local\\event\\entities\\event))\n
#5 /calendar/classes/local/event/data_...\nPHP message:
#0 /mod/assign/lib.php(1893): assign->count_submissions_need_grading()\n
#1 /lib/moodlelib.php(7719): mod_assign_core_calendar_provide_event_action(Object(calendar_event), Object(core_calendar\\action_factory), '103581')\n
#2 /calendar/classes/local/event/container.php(299): component_callback('mod_assign', 'core_calendar_p...', Array)\n
#3 /calendar/classes/local/event/factories/event_factory.php(42): core_calendar\\local\\event\\container::apply_component_provide_event_action(Object(core_calendar\\local\\event\\entities\\event))\n
#4 /calendar/classes/local/event/factories/event_abstract_factory.php(197): core_calendar\\local\\event\\factories\\event_factory->apply_component_action(Object(core_calendar\\local\\event\\entities\\event))\n
#5 /calendar/classes/local/event/data_...\nPHP message:
#0 /mod/assign/lib.php(1893): assign->count_submissions_need_grading()\n
#1 /lib/moodlelib.php(7719): mod_assign_core_calendar_provide_event_action(Object(calendar_event), Object(core_calendar\\action_factory), '103581')\n
#2 /calendar/classes/local/event/container.php(299): component_callback('mod_assign', 'core_calendar_p...', Array)\n
#3 /calendar/classes/local/event/factories/event_factory.php(42): core_calendar\\local\\event\\container::apply_component_provide_event_action(Object(core_calendar\\local\\event\\entities\\event))\n
#4 /calendar/classes/local/event/factories/event_abstract_factory.php(197): core_calendar\\local\\event\\factories\\event_factory->apply_component_action(Object(core_calendar\\local\\event\\entities\\event))\n
#5 /calendar/classes/local/event/data_...\nPHP message:
#0 /mod/assign/lib.php(1893): assign->count_submissions_need_grading()\n
#1 /lib/moodlelib.php(7719): mod_assign_core_calendar_provide_event_action(Object(calendar_event), Object(core_calendar\\action_factory), '103581')\n
#2 /calendar/classes/local/event/container.php(299): component_callback('mod_assign', 'core_calendar_p...', Array)\n
#3 /calendar/classes/local/event/factories/event_factory.php(42): core_calendar\\local\\event\\container::apply_component_provide_event_action(Object(core_calendar\\local\\event\\entities\\event))\n
#4 /calendar/classes/local/event/factories/event_abstract_factory.php(197): core_calendar\\local\\event\\factories\\event_factory->apply_component_action(Object(core_calendar\\local\\event\\entities\\event))\n
#5 /calendar/classes/local/event/data_...\nPHP message:
#0 /mod/assign/lib.php(1893): assign->count_submissions_need_grading()\n
#1 /lib/moodlelib.php(7719): mod_assign_core_calendar_provide_event_action(Object(calendar_event), Object(core_calendar\\action_factory), '103581')\n
#2 /calendar/classes/local/event/container.php(299): component_callback('mod_assign', 'core_calendar_p...', Array)\n
#3 /calendar/classes/local/event/factories/event_factory.php(42): core_calendar\\local\\event\\container::apply_component_provide_event_action(Object(core_calendar\\local\\event\\entities\\event))\n
#4 /calendar/classes/local/event/factories/event_abstract_factory.php(197): core_calendar\\local\\event\\factories\\event_factory->apply_component_action(Object(core_calendar\\local\\event\\entities\\event))\n
#5 /calendar/classes/local/event/data_...\nPHP message:
#0 /mod/assign/lib.php(1893): assign->count_submissions_need_grading()\n
#1 /lib/moodlelib.php(7719): mod_assign_core_calendar_provide_event_action(Object(calendar_event), Object(core_calendar\\action_factory), '103581')\n
#2 /calendar/classes/local/event/container.php(299): component_callback('mod_assign', 'core_calendar_p...', Array)\n
#3 /calendar/classes/local/event/factories/event_factory.php(42): core_calendar\\local\\event\\container::apply_component_provide_event_action(Object(core_calendar\\local\\event\\entities\\event))\n
#4 /calendar/classes/local/event/factories/event_abstract_factory.php(197): core_calendar\\local\\event\\factories\\event_factory->apply_component_action(Object(core_calendar\\local\\event\\entities\\event))\n
#5 /calendar/classes/local/event/data_...\nPHP message:
#0 /mod/assign/lib.php(1893): assign->count_submissions_need_grading()\n
#1 /lib/moodlelib.php(7719): mod_assign_core_calendar_provide_event_action(Object(calendar_event), Object(core_calendar\\action_factory), '103581')\n
#2 /calendar/classes/local/event/container.php(299): component_callback('mod_assign', 'core_calendar_p...', Array)\n
#3 /calendar/classes/local/event/factories/event_factory.php(42): core_calendar\\local\\event\\container::apply_component_provide_event_action(Object(core_calendar\\local\\event\\entities\\event))\n
#4 /calendar/classes/local/event/factories/event_abstract_factory.php(197): core_calendar\\local\\event\\factories\\event_factory->apply_component_action(Object(core_calendar\\local\\event\\entities\\event))\n
#5 /calendar/classes/local/event/data_...\nPHP message:
#0 /mod/assign/lib.php(1893): assign->count_submissions_need_grading()\n
#1 /lib/moodlelib.php(7719): mod_assign_core_calendar_provide_event_action(Object(calendar_event), Object(core_calendar\\action_factory), '103581')\n
#2 /calendar/classes/local/event/container.php(299): component_callback('mod_assign', 'core_calendar_p...', Array)\n
#3 /calendar/classes/local/event/factories/event_factory.php(42): core_calendar\\local\\event\\container::apply_component_provide_event_action(Object(core_calendar\\local\\event\\entities\\event))\n
#4 ...
We could have 800-1000 students logging in at around the same time to access resources/quizzes and the amount of times this function is called with the performance of the query isn't a good mix.