Gitaly N+1 FindCommit queries in Projects::CommitController
As seen in #mech_symp_alerts (https://log.gitlab.net/goto/b0fd47e705f98b56458db83700bf6a9a), a commit message can have lots of references other commits, causing a large number of FindCommit
queries:
"lib/gitlab/gitaly_client.rb:145:in `call'",
"lib/gitlab/gitaly_client/commit_service.rb:436:in `call_find_commit'",
"lib/gitlab/gitaly_client/commit_service.rb:292:in `find_commit'",
"lib/gitlab/git/commit.rb:75:in `block in find_commit'",
"lib/gitlab/git/wraps_gitaly_errors.rb:7:in `wrapped_gitaly_errors'",
"lib/gitlab/git/commit.rb:74:in `find_commit'",
"lib/gitlab/git/rugged_impl/commit.rb:41:in `find_commit'",
"lib/gitlab/git/commit.rb:66:in `find'",
"app/models/repository.rb:1144:in `find_commit'",
"app/models/repository.rb:114:in `commit'",
"app/models/project.rb:788:in `commit'",
"lib/banzai/reference_parser/commit_parser.rb:27:in `block in find_commits'",
"lib/banzai/reference_parser/commit_parser.rb:26:in `find_commits'",
"lib/banzai/reference_parser/commit_parser.rb:13:in `block in referenced_by'",
"lib/banzai/reference_parser/commit_parser.rb:12:in `each'",
"lib/banzai/reference_parser/commit_parser.rb:12:in `flat_map'",
"lib/banzai/reference_parser/commit_parser.rb:12:in `referenced_by'",
"lib/banzai/reference_parser/base_parser.rb:209:in `gather_references'",
"lib/banzai/reference_parser/base_parser.rb:201:in `process'",
"lib/banzai/reference_extractor.rb:18:in `references'",
"lib/gitlab/reference_extractor.rb:23:in `references'",
"lib/gitlab/reference_extractor.rb:33:in `block (2 levels) in <class:ReferenceExtractor>'",
"app/models/commit.rb:395:in `has_been_reverted?'",
"app/views/projects/commit/_commit_box.html.haml:38:in `_app_views_projects_commit__commit_box_html_haml__902495674520933930_70336922872200'",
"app/views/projects/commit/show.html.haml:12:in `_app_views_projects_commit_show_html_haml___4525434022644571311_70336699624140'",
"app/controllers/application_controller.rb:121:in `render'",
"app/controllers/projects/commit_controller.rb:29:in `block (2 levels) in show'",
"app/controllers/projects/commit_controller.rb:27:in `show'",
"ee/lib/gitlab/ip_address_state.rb:10:in `with'",
"ee/app/controllers/ee/application_controller.rb:43:in `set_current_ip_address'",
"lib/gitlab/session.rb:11:in `with_session'",
"app/controllers/application_controller.rb:468:in `set_session_storage'",
"app/controllers/application_controller.rb:462:in `set_locale'",
"lib/gitlab/application_context.rb:46:in `block in use'",
"lib/gitlab/application_context.rb:46:in `use'",
"lib/gitlab/application_context.rb:19:in `with_context'",
"app/controllers/application_controller.rb:453:in `set_current_context'",
"lib/gitlab/error_tracking.rb:34:in `with_context'",
"app/controllers/application_controller.rb:546:in `sentry_context'",
"ee/lib/omni_auth/strategies/group_saml.rb:41:in `other_phase'",
"ee/lib/gitlab/jira/middleware.rb:19:in `call'"
]
Edited by Stan Hu