reusing branch name in merge requests increases instance load
Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.
Summary
when reusing the same branchnames in merge requests (even closed ones) the UpdateMergeRequestsWorker and MergeRequestResetApprovalsWorker get continously slower as they need to query more and more merge requests for each action.
Steps to reproduce
create repository with approvals enabled
create a branch with a specific name
repeat following:
create a new merge request of the branch
push a change to the branch
close the merge request
The more merge requests exist the more data is queried from the database and the sidekiq jobs become increasingly slower
This can be seen in the logs of the sidekiq in the db_count and duration fields. At some point it will also trigger slow queries in the postgres statement log.
E.g.
2025-10-22_12:14:32.94631 LOG: duration: 1343.830 ms execute <unnamed>: /*application:sidekiq,correlation_id:01K85XD195SQM5AVCWA4SRPC57,jid:005dd953a3e459ace0ada6de,endpoint_id:UpdateMergeRequestsWorker,db_config_database:gitlabhq_production,db_config_name:main*/ SELECT "merge_requests"."id", "merge_requests"."target_branch", "merge_requests"."source_branch", "merge_requests"."source_project_id", "merge_requests"."author_id", "merge_requests"."assignee_id", "merge_requests"."title", "merge_requests"."created_at", "merge_requests"."updated_at", "merge_requests"."milestone_id", "merge_requests"."merge_status", "merge_requests"."target_project_id", "merge_requests"."iid", "merge_requests"."description", "merge_requests"."updated_by_id", "merge_requests"."merge_error", "merge_requests"."merge_params", "merge_requests"."merge_when_pipeline_succeeds", "merge_requests"."merge_user_id", "merge_requests"."merge_commit_sha", "merge_requests"."in_progress_merge_commit_sha", "merge_requests"."lock_version", "merge_requests"."title_html", "merge_requests"."description_html", "merge_requests"."time_estimate", "merge_requests"."cached_markdown_version", "merge_requests"."last_edited_at", "merge_requests"."last_edited_by_id", "merge_requests"."merge_jid", "merge_requests"."discussion_locked", "merge_requests"."latest_merge_request_diff_id", "merge_requests"."rebase_commit_sha", "merge_requests"."allow_maintainer_to_push", "merge_requests"."squash", "merge_requests"."state_id", "merge_requests"."approvals_before_merge", "merge_requests"."rebase_jid", "merge_requests"."squash_commit_sha", "merge_requests"."merge_ref_sha", "merge_requests"."draft", "merge_requests"."prepared_at", "merge_requests"."merged_commit_sha", "merge_requests"."override_requested_changes", "merge_requests"."head_pipeline_id", "merge_requests"."retargeted", "merge_requests"."imported_from" FROM "merge_requests" WHERE "merge_requests"."target_project_id" = 16092 AND "merge_requests"."source_branch" = 'project/branch' ORDER BY "merge_requests"."id" ASC LIMIT 1000
Issue encountered
In our case this issue occured in our instance due to a testing project creating and opening mrs reusing branch names and over time 15000 merge requests collected in the project. The jobs created for this project now take 40-120 seconds to process during high load times
This causes the sidekiq job queue to grow too large impacting the processing speed of jobs from other projects.
Results of GitLab environment info
Expand for output related to GitLab environment info
# gitlab-rake gitlab:env:info System information System: Debian 12 Current User: git Using RVM: no Ruby Version: 3.2.8 Gem Version: 3.7.1 Bundler Version:2.7.1 Rake Version: 13.0.6 Redis Version: 7.2.10 Sidekiq Version:7.3.9 Go Version: unknown GitLab information Version: 18.4.3-ee Revision: 4912fab157d Directory: /opt/gitlab/embedded/service/gitlab-rails DB Adapter: PostgreSQL DB Version: 16.10 Elasticsearch: no Geo: no Using LDAP: no Using Omniauth: yes Omniauth Providers: saml GitLab Shell Version: 14.45.2 Repository storages: - default: unix:/var/opt/gitlab/gitaly/gitaly.socket GitLab Shell path: /opt/gitlab/embedded/service/gitlab-shell Gitaly - default Address: unix:/var/opt/gitlab/gitaly/gitaly.socket - default Version: 18.4.3 - default Git Version: 2.50.1