Bulk insert/upsert cross referenced system notes
<!--IssueSummary start--> <details> <summary> Everyone can contribute. [Help move this issue forward](https://handbook.gitlab.com/handbook/marketing/developer-relations/contributor-success/community-contributors-workflows/#contributor-links) while earning points, leveling up and collecting rewards. </summary> - [Close this issue](https://contributors.gitlab.com/manage-issue?action=close&projectId=278964&issueIid=412565) </details> <!--IssueSummary end--> ## Summary When a commit description contains a reference to commit/merge request/issue, a cross-reference system note is [created](https://gitlab.com/gitlab-org/gitlab/blob/5af458b515fbf5de8f0568a4c3ca522ba0fa3809/app/models/concerns/mentionable.rb#L141-152). Even though the number of references is [limited](https://gitlab.com/gitlab-org/gitlab/blob/5af458b515fbf5de8f0568a4c3ca522ba0fa3809/lib/banzai/reference_parser/commit_parser.rb#L8), it still requires a lot of SQL request to create a reference one-by-one: - One SQL request is performed for each reference in order to check its [existence](https://gitlab.com/gitlab-org/gitlab/blob/5af458b515fbf5de8f0568a4c3ca522ba0fa3809/app/services/system_notes/issuables_service.rb#L394-397): `cross_reference_exists?`. - `N` requests per reference are [performed](https://gitlab.com/gitlab-org/gitlab/blob/5af458b515fbf5de8f0568a4c3ca522ba0fa3809/app/services/system_notes/issuables_service.rb#L260) in order to create a reference. ## Potential solution We should consider bulk inserting/upserting the system notes instead.
issue