Performance regression running Bitbucket Server and Data Center with Git 2.38.0+

In Git 2.38.0 a change was made to ensure Git can restore pre-merge state after a git-merge. This involves doing more work resulting in increased disk IO and CPU usage. In the context of running Git as a client this is an insignificant impact; however in Bitbucket Server and Data Center this codepath is executed frequently to test the mergeability of pull request and the impact on performance of the system can be substantial. In addition some operations such as the time for the merge button on a pull request to become active may increase from a second or so to 10+ seconds for some repositories (in the case where mergability information was not already calculated and cached).

Note: This is an issue for Git installed on the server, Git 2.38.0+ is still fine for Git clients.

We are tracking our fix for this at Performance regression running Bitbucket with Git 2.38.0+ and encourage you to watch that issue for the latest information.

As a workaround you can install on the server a Git version prior to 2.38. Be sure to install a version that is compatible with the version of Bitbucket Server you are running. The Bitbucket Server/DC Supported Platforms page provides compatibility information (be sure to select the correct version of Bitbucket from the version selector).

1 comment

Jeff Thomas
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
April 28, 2023

Update - Earlier this month, we released changes to address this in the following versions:

  • Bitbucket 7.21.11+
  • Bitbucket 8.9.0+ (including future minor releases such as 8.10, etc.)
    However, the changes have not been applied to 8.0 thru 8.8; the expectation is that users on those versions can upgrade to 8.9 which conveniently is an LTS release too. Or just downgrade Git as described in the workaround.

The change involves moving from using `git merge` to `git merge-tree` to perform these tryMerge() operations (i.e. to test the mergeability of a pull request). The performance improvements result in even superior results compared to Git versions prior to 2.38. Here are some numbers for a tryMerge() on one of our larger internal repositories:
Git 2.34.3: 2041ms
Git 2.39.1: 6646ms
Git 2.39.1 with merge-tree: 26ms

If you're on 7.21.11+ of 8.9.0+, upgrading to Git 2.39 should provide a significant performance increase for these operations (after a restart of the application).

Comment

Log in or Sign up to comment
TAGS
AUG Leaders

Atlassian Community Events