General developer forum

mod/quiz/attempt is verly slow, flame graph is attached

 
Picture of Eran Levin
mod/quiz/attempt is verly slow, flame graph is attached
 

Hi,

I try to investigate why my moodle is so slow, especially mod/quiz/attempt.

Ut takes 22 seconds!!! to the page to be loaded.


I attached a flame graph. 

Can someone tell if it's normal?

 
Average of ratings: -
Tim at Lone Pine Koala Sanctuary
Re: mod/quiz/attempt is verly slow, flame graph is attached
Core developersDocumentation writersParticularly helpful MoodlersPlugin developers

I am not used to reading flame graphs, but it seems less helpful that properly profiling output. I normally use XHProf to work out why particular Moodle pages are slow: https://docs.moodle.org/dev/Setting_up_xhprof_on_Moodle / https://tjhunt.blogspot.co.uk/2013/05/performance-testing-moodle.html

 
Average of ratings: -
Picture of Tomasz Muras
Re: mod/quiz/attempt is verly slow, flame graph is attached
Core developersParticularly helpful MoodlersPlugin developersPlugins guardiansTranslators

This one basically points to moodle_database::get_record. I suggest you enable logging of all the queries in MySQL, refresh only this single page and attach the results.


 
Average of ratings: -
Picture of Eran Levin
Re: mod/quiz/attempt is verly slow, flame graph is attached
 

I attach the xhprof file from which the flame graph has been created:

https://ufile.io/jiv2r

 
Average of ratings: -
Picture of Eran Levin
Re: mod/quiz/attempt is verly slow, flame graph is attached
 

another issue,

I've implemented a plugin that allow users to add quizzes .

Meaning each student can add  as many quizzes as he wants to the courses.

Is it related to the slowness?

here is a row count for the whole DB.


+----------------------------------+------------+

| table_name                       | table_rows |

+----------------------------------+------------+

| mdl_glossary_categories          |          0 |

| mdl_assignfeedback_editpdf_queue |          0 |

| mdl_tool_cohortroles             |          0 |

| mdl_label                        |          0 |

| mdl_events_queue                 |          0 |

| mdl_wiki_synonyms                |          0 |

| mdl_groups                       |          0 |

| mdl_question_calculated          |          0 |

| mdl_workshop_old                 |          0 |

| mdl_scorm_seq_ruleconds          |          0 |

| mdl_qtype_ddmarker               |          0 |

| mdl_book_chapters                |          0 |

| mdl_feedback_template            |          0 |

| mdl_competency_templatecomp      |          0 |

| mdl_portfolio_instance_config    |          0 |

| mdl_competency_evidence          |          0 |

| mdl_course_request               |          0 |

| mdl_imscp                        |          0 |

| mdl_assignsubmission_onlinetext  |          0 |

| mdl_events_handlers              |          0 |

| mdl_wiki_subwikis                |          0 |

| mdl_groupings_groups             |          0 |

| mdl_workshop_grades_old          |          0 |

| mdl_course_completions           |          0 |

| mdl_scorm_seq_rulecond           |          0 |

| mdl_qtype_ddimageortext_drops    |          0 |

| mdl_book                         |          0 |

| mdl_feedback_sitecourse_map      |          0 |

| mdl_competency_templatecohort    |          0 |

| mdl_portfolio_instance           |          0 |

| mdl_glossary_alias               |          0 |

| mdl_message_popup                |          0 |

| mdl_assignfeedback_editpdf_cmnt  |          0 |

| mdl_assignsubmission_file        |          0 |

| mdl_event_subscriptions          |          0 |

| mdl_wiki_pages                   |          0 |

| mdl_groupings                    |          0 |

| mdl_workshop_grades              |          0 |

| mdl_course_completion_criteria   |          0 |

| mdl_scorm_seq_rolluprulecond     |          0 |

| mdl_grade_outcomes_history       |          0 |

| mdl_qtype_ddimageortext_drags    |          0 |

| mdl_blog_external                |          0 |

| mdl_feedback_item                |          0 |

| mdl_competency_template          |          0 |

| mdl_question_truefalse           |          0 |

| mdl_registration_hubs            |          0 |

| mdl_page                         |          0 |

| mdl_glossary                     |          0 |

| mdl_message_contacts             |          0 |

| mdl_assignfeedback_editpdf_annot |          0 |

| mdl_task_adhoc                   |          0 |

| mdl_competency_coursecompsetting |          0 |

| mdl_workshop_elements_old        |          0 |

| mdl_course_completion_crit_compl |          0 |

| mdl_scorm_seq_rolluprule         |          0 |

| mdl_grade_outcomes_courses       |          0 |

| mdl_qtype_ddimageortext          |          0 |

| mdl_blog_association             |          0 |

| mdl_feedback_completedtmp        |          0 |

| mdl_competency_relatedcomp       |          0 |

| mdl_question_statistics          |          0 |

| mdl_rating                       |          0 |

| mdl_forum_track_prefs            |          0 |

| mdl_message_airnotifier_devices  |          0 |

| mdl_assignfeedback_comments      |          0 |

| mdl_tag_instance                 |          0 |

| mdl_competency_coursecomp        |          0 |

| mdl_assignment_upgrade           |          0 |

| mdl_wiki_locks                   |          0 |

| mdl_gradingform_rubric_levels    |          0 |

| mdl_course_completion_aggr_methd |          0 |

| mdl_scorm_seq_objective          |          0 |

| mdl_grade_outcomes               |          0 |

| mdl_block_rss_client             |          0 |

| mdl_feedback_completed           |          0 |

| mdl_competency_plancomp          |          0 |

| mdl_question_response_count      |          0 |

| mdl_quiz_statistics              |          0 |

| mdl_workshopform_rubric_levels   |          0 |

| mdl_forum_subscriptions          |          0 |

| mdl_assign_user_mapping          |          0 |

| mdl_tag_correlation              |          0 |

| mdl_competency                   |          0 |

| mdl_user_devices                 |          0 |

| mdl_assignment_submissions       |          0 |

| mdl_enrol_paypal                 |          0 |

| mdl_wiki_links                   |          0 |

| mdl_gradingform_rubric_fillings  |          0 |

| mdl_enrol_lti_lti2_share_key     |          0 |

| mdl_workshop_comments_old        |          0 |

| mdl_scorm_seq_mapinfo            |          0 |

| mdl_grade_letters                |          0 |

| mdl_qpractice                    |          0 |

| mdl_feedback                     |          0 |

| mdl_competency_plan              |          0 |

| mdl_question_response_analysis   |          0 |

| mdl_workshopform_rubric_config   |          0 |

| mdl_mnetservice_enrol_enrolments |          0 |

| mdl_forum_read                   |          0 |

| mdl_lti_types_config             |          0 |

| mdl_assign_user_flags            |          0 |

| mdl_comments                     |          0 |

| mdl_enrol_lti_users              |          0 |

| mdl_wiki                         |          0 |

| mdl_gradingform_rubric_criteria  |          0 |

| mdl_enrol_lti_lti2_resource_link |          0 |

| mdl_workshop_assessments_old     |          0 |

| mdl_log                          |          0 |

| mdl_question_numerical_units     |          0 |

| mdl_workshopform_rubric          |          0 |

| mdl_mnetservice_enrol_courses    |          0 |

| mdl_forum_queue                  |          0 |

| mdl_lti_types                    |          0 |

| mdl_assign_submission            |          0 |

| mdl_url                          |          0 |

| mdl_enrol_lti_tools              |          0 |

| mdl_user_private_key             |          0 |

| mdl_gradingform_guide_fillings   |          0 |

| mdl_enrol_lti_lti2_nonce         |          0 |

| mdl_qtype_shortanswer_options    |          0 |

| mdl_workshop_assessments         |          0 |

| mdl_lock_db                      |          0 |

| mdl_scorm_scoes_track            |          0 |

| mdl_profiling                    |          0 |

| mdl_competency_modulecomp        |          0 |

| mdl_lti_tool_settings            |          0 |

| mdl_assign_plugin_config         |          0 |

| mdl_tag                          |          0 |

| mdl_enrol_lti_tool_consumer_map  |          0 |

| mdl_gradingform_guide_criteria   |          0 |

| mdl_enrol_lti_lti2_context       |          0 |

| mdl_workshop_aggregations        |          0 |

| mdl_badge_issued                 |          0 |

| mdl_context_temp                 |          0 |

| mdl_scorm_scoes_data             |          0 |

| mdl_competency_framework         |          0 |

| mdl_question_numerical_options   |          0 |

| mdl_workshopform_numerrors_map   |          0 |

| mdl_mnet_sso_access_control      |          0 |

| mdl_forum_posts                  |          0 |

| mdl_enrol_lti_lti2_user_result   |          0 |

| mdl_user_password_resets         |          0 |

| mdl_gradingform_guide_comments   |          0 |

| mdl_enrol_lti_lti2_consumer      |          0 |

| mdl_workshop                     |          0 |

| mdl_lesson_timer                 |          0 |

| mdl_badge_external               |          0 |

| mdl_grade_import_values          |          0 |

| mdl_scorm_scoes                  |          0 |

| mdl_block_community              |          0 |

| mdl_question_numerical           |          0 |

| mdl_quiz_overview_regrades       |          0 |

| mdl_workshopform_numerrors       |          0 |

| mdl_mnet_session                 |          0 |

| mdl_forum_discussions            |          0 |

| mdl_lti_tool_proxies             |          0 |

| mdl_assign_overrides             |          0 |

| mdl_choice_options               |          0 |

| mdl_enrol_lti_lti2_tool_proxy    |          0 |

| mdl_user_password_history        |          0 |

| mdl_grading_instances            |          0 |

| mdl_enrol_flatfile               |          0 |

| mdl_lesson_pages                 |          0 |

| mdl_badge_criteria_param         |          0 |

| mdl_mnet_log                     |          0 |

| mdl_grade_import_newitem         |          0 |

| mdl_scorm_aicc_session           |          0 |

| mdl_question_gapselect           |          0 |

| mdl_question_multianswer         |          0 |

| mdl_quiz_overrides               |          0 |

| mdl_workshopform_comments        |          0 |

| mdl_forum_discussion_subs        |          0 |

| mdl_lti_submission               |          0 |

| mdl_assign_grades                |          0 |

| mdl_survey_answers               |          0 |

| mdl_qtype_randomsamatch_options  |          0 |

| mdl_choice_answers               |          0 |

| mdl_lesson_overrides             |          0 |

| mdl_badge_criteria_met           |          0 |

| mdl_mnet_host2service            |          0 |

| mdl_scorm                        |          0 |

| mdl_question_ddwtos              |          0 |

| mdl_badge_manual_award           |          0 |

| mdl_question_hints               |          0 |

| mdl_workshopform_accumulative    |          0 |

| mdl_forum_digests                |          0 |

| mdl_lti                          |          0 |

| mdl_assign                       |          0 |

| mdl_survey_analysis              |          0 |

| mdl_filter_config                |          0 |

| mdl_choice                       |          0 |

| mdl_tool_recyclebin_course       |          0 |

| mdl_grading_definitions          |          0 |

| mdl_badge_criteria               |          0 |

| mdl_scale_history                |          0 |

| mdl_question_datasets            |          0 |

| mdl_workshopallocation_scheduled |          0 |

| mdl_workshopeval_best_settings   |          0 |

| mdl_qtype_match_subquestions     |          0 |

| mdl_chat_users                   |          0 |

| mdl_competency_userevidencecomp  |          0 |

| mdl_tool_recyclebin_category     |          0 |

| mdl_post                         |          0 |

| mdl_user_info_field              |          0 |

| mdl_grading_areas                |          0 |

| mdl_editor_atto_autosave         |          0 |

| mdl_lesson_grades                |          0 |

| mdl_question_dataset_items       |          0 |

| mdl_workshop_submissions_old     |          0 |

| mdl_folder                       |          0 |

| mdl_log_queries                  |          0 |

| mdl_qtype_match_options          |          0 |

| mdl_files_reference              |          0 |

| mdl_chat_messages_current        |          0 |

| mdl_competency_userevidence      |          0 |

| mdl_tool_monitor_subscriptions   |          0 |

| mdl_portfolio_tempdata           |          0 |

| mdl_user_info_data               |          0 |

| mdl_grade_settings               |          0 |

| mdl_data_records                 |          0 |

| mdl_lesson_branch                |          0 |

| mdl_badge_backpack               |          0 |

| mdl_course_published             |          0 |

| mdl_qtype_essay_options          |          0 |

| mdl_chat_messages                |          0 |

| mdl_competency_usercompplan      |          0 |

| mdl_tool_monitor_rules           |          0 |

| mdl_resource_old                 |          0 |

| mdl_portfolio_mahara_queue       |          0 |

| mdl_assignment                   |          0 |

| mdl_data_fields                  |          0 |

| mdl_lesson_attempts              |          0 |

| mdl_badge                        |          0 |

| mdl_messageinbound_messagelist   |          0 |

| mdl_role_sortorder               |          0 |

| mdl_question_dataset_definitions |          0 |

| mdl_workshop_submissions         |          0 |

| mdl_course_modules_completion    |          0 |

| mdl_qtype_ddmarker_drops         |          0 |

| mdl_feedback_valuetmp            |          0 |

| mdl_chat                         |          0 |

| mdl_competency_usercompcourse    |          0 |

| mdl_tool_monitor_history         |          0 |

| mdl_resource                     |          0 |

| mdl_portfolio_log                |          0 |

| mdl_assignfeedback_file          |          0 |

| mdl_data_content                 |          0 |

| mdl_lesson_answers               |          0 |

| mdl_backup_logs                  |          0 |

| mdl_role_names                   |          0 |

| mdl_workshop_stockcomments_old   |          0 |

| mdl_tool_monitor_events          |          0 |

| mdl_portfolio_instance_user      |          0 |

| mdl_glossary_entries             |          0 |

| mdl_assignfeedback_editpdf_quick |          0 |

| mdl_data                         |          0 |

| mdl_lesson                       |          0 |

| mdl_backup_courses               |          0 |

| mdl_events_queue_handlers        |          0 |

| mdl_wiki_versions                |          0 |

| mdl_messageinbound_datakeys      |          0 |

| mdl_glossary_entries_categories  |          0 |

| mdl_groups_members               |          0 |

| mdl_question_calculated_options  |          0 |

| mdl_workshop_rubrics_old         |          0 |

| mdl_qtype_ddmarker_drags         |          0 |

| mdl_cache_filters                |          0 |

| mdl_feedback_value               |          0 |

| mdl_competency_usercomp          |          0 |

| mdl_backup_controllers           |          1 |

| mdl_user_info_category           |          1 |

| mdl_event                        |          1 |

| mdl_tag_coll                     |          1 |

| mdl_block_positions              |          1 |

| mdl_external_services_users      |          1 |

| mdl_repository_instance_config   |          2 |

| mdl_external_tokens              |          2 |

| mdl_tool_usertours_tours         |          2 |

| mdl_mnet_host                    |          2 |

| mdl_scale                        |          2 |

| mdl_mnet_application             |          2 |

| mdl_external_services            |          2 |

| mdl_cache_flags                  |          2 |

| mdl_filter_active                |          3 |

| mdl_messageinbound_handlers      |          3 |

| mdl_message_processors           |          4 |

| mdl_mnet_service                 |          4 |

| mdl_quiz_reports                 |          4 |

| mdl_survey                       |          5 |

| mdl_course_categories            |          6 |

| mdl_qpractice_session            |          7 |

| mdl_tag_area                     |          7 |

| mdl_glossary_formats             |          7 |

| mdl_repository                   |          9 |

| mdl_cohort                       |          9 |

| mdl_license                      |          9 |

| mdl_repository_instances         |          9 |

| mdl_role_allow_switch            |         10 |

| mdl_role_allow_override          |         11 |

| mdl_block_recent_activity        |         11 |

| mdl_role_allow_assign            |         13 |

| mdl_role                         |         13 |

| mdl_tool_usertours_steps         |         14 |

| mdl_grade_categories             |         14 |

| mdl_sessions                     |         14 |

| mdl_mnet_service2rpc             |         15 |

| mdl_mnet_rpc                     |         15 |

| mdl_mnet_remote_service2rpc      |         16 |

| mdl_mnet_remote_rpc              |         16 |

| mdl_modules                      |         23 |

| mdl_forum                        |         24 |

| mdl_course                       |         25 |

| mdl_grade_items                  |         28 |

| mdl_role_context_levels          |         29 |

| mdl_message_providers            |         31 |

| mdl_block                        |         42 |

| mdl_grade_grades                 |         51 |

| mdl_task_scheduled               |         53 |

| mdl_grade_categories_history     |         55 |

| mdl_course_format_options        |         73 |

| mdl_survey_questions             |         73 |

| mdl_enrol                        |         92 |

| mdl_grade_grades_history         |        190 |

| mdl_log_display                  |        193 |

| mdl_external_services_functions  |        211 |

| mdl_grade_items_history          |        229 |

| mdl_my_pages                     |        281 |

| mdl_tool_customlang_components   |        328 |

| mdl_external_functions           |        341 |

| mdl_message_read                 |        342 |

| mdl_question_categories          |        343 |

| mdl_files                        |        503 |

| mdl_config                       |        528 |

| mdl_user_lastaccess              |        529 |

| mdl_cohort_members               |        582 |

| mdl_capabilities                 |        629 |

| mdl_user                         |        638 |

| mdl_message_working              |        691 |

| mdl_block_instances              |        824 |

| mdl_message                      |        838 |

| mdl_user_enrolments              |        939 |

| mdl_stats_monthly                |        988 |

| mdl_role_assignments             |       1075 |

| mdl_config_plugins               |       1298 |

| mdl_config_log                   |       1380 |

| mdl_user_preferences             |       1849 |

| mdl_course_sections              |       1877 |

| mdl_role_capabilities            |       2046 |

| mdl_upgrade_log                  |       2473 |

| mdl_stats_weekly                 |       2959 |

| mdl_stats_user_monthly           |       3382 |

| mdl_qtype_multichoice_options    |       5321 |

| mdl_stats_daily                  |       7093 |

| mdl_stats_user_weekly            |       9226 |

| mdl_quiz_grades                  |      14372 |

| mdl_question                     |      16177 |

| mdl_stats_user_daily             |      22267 |

| mdl_tool_customlang              |      23535 |

| mdl_quiz_attempts                |      25262 |

| mdl_question_answers             |      25765 |

| mdl_question_usages              |      30509 |

| mdl_course_modules               |      30531 |

| mdl_quiz_feedback                |      33180 |

| mdl_quiz_sections                |      33356 |

| mdl_quiz                         |      34511 |

| mdl_context                      |      35042 |

| mdl_question_attempts            |     843695 |

| mdl_quiz_slots                   |     867834 |

| mdl_logstore_standard_log        |    1202708 |

| mdl_question_attempt_steps       |    1447393 |

| mdl_question_attempt_step_data   |    1864711 |

+----------------------------------+------------+


 
Average of ratings: -
Picture of Richard Oelmann
Re: mod/quiz/attempt is verly slow, flame graph is attached
Core developersParticularly helpful MoodlersPlugin developersTesters

I may be misreading this, but 25 courses, with 34,500 quizzes (=> over 1000 quizzes per course) - although "only" 16000 actual questions...?

Are they redundant rows left behind when the quizzes have been deleted, or do you actually have that many quizzes on those courses? If so then I think some cleaning out and then some user training might be the first thing I'd look at. Along with restricting that plugin to users who have had some kind of input about what they are doing.

That may not be the reason for the speed issues you are asking about, but it will help the usability of your course pages and the quizzes themselves no end!

 
Average of ratings: -