Skip to content

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

/label typebug
Edited by 🤖 GitLab Bot 🤖