Optimieren der Repositoryleistung

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Azure Repos bietet für die meisten Git-Repositorys hohe Leistung und Zuverlässigkeit. Git führt am besten aus, wenn Repositorys typische Quellcodeprojekte ähneln: Dateien sind relativ klein, Änderungen sind inkrementell und lokalisiert, und Verzeichnisse weisen eine gut organisierte Hierarchie auf. Diese Bedingungen ermöglichen es Git, Delta-Kompression zu verwenden und Repository-Bäume effizient zu durchlaufen.

Wenn ein Repository diese Bedingungen nicht erfüllt, muss Git mehr und größere Objekte lesen und übertragen. Daher werden häufige Vorgänge, z. B. Klonen, Abrufen und Browsen, langsamer.

In diesem Artikel wird erläutert, wie Sie den Repositorystatus analysieren, häufige Ursachen von Leistungsbeeinträchtigungen identifizieren und beheben und die Menge der während Klonen und Abrufen übertragenen Daten reduzieren.

Informationen zu den Ressourcengrenzwerten, die für Repositorys gelten, finden Sie unter Git-Grenzwerte.

Analyse des Repository-Zustands

Beginnen Sie mit dem integrierten Bereich Status und Nutzung. Es fasst die Repositorygröße, Objektanzahl, Referenzanzahl und andere Metriken zusammen. Außerdem werden Werte hervorgehoben, die sich den empfohlenen Schwellenwerten nähern oder überschreiten.

Dieser Bereich ist in älteren Versionen von Azure DevOps Server möglicherweise nicht verfügbar. Wenn dies nicht angezeigt wird, sollten Sie ein Upgrade auf eine neuere Version durchführen, um auf integrierte Metriken zur Repositoryintegrität zuzugreifen.

CLI-Tools

Führen Sie zur genaueren Überprüfung die folgenden Tools auf einem vollständigen Klon des Repositorys aus.

git-sizer

Verwenden Sie git-sizer für eine allgemeine Einschätzung der Repositorygröße und -komplexität. Es berechnet repositoryweite Metriken und weist jedem eine Bedenkenstufe zu. Laden Sie die neueste Version von der Versionsseite herunter, und folgen Sie den Ersten Schritten , um das Tool auszuführen und die Ausgabe zu überprüfen.

Git-Repositorystruktur

Verwenden Sie git repo structure als Alternative zu git-sizer. Dieser experimentelle Befehl wurde entwickelt, um ähnliche Funktionen nativ in Mainstream-Git bereitzustellen. Weitere Informationen finden Sie in der Git-Repositorydokumentation.

Git-Umfrage

Verwenden Sie git survey für die Analyse auf Pfadebene. Von diesen CLI-Tools bietet sie die detaillierteste Aufschlüsselung. Sie bewertet die obersten Verzeichnisse und Dateien nach Objektanzahl, Datenträgergröße und aufgeblasener Größe. Der Bericht hilft Ihnen, die wichtigsten Faktoren für die Größe des Repositorys zu identifizieren und gezielt für eine Bereinigung oder Umstrukturierung anzugehen.

Dieser Befehl ist in Git für Windows und in Microsofts Fork von Git enthalten. Die Verfügbarkeit in anderen Git-Verteilungen kann variieren.

Tipp

Das Wachstum des Repositorys lässt sich im Zeitverlauf am einfachsten interpretieren. Führen Sie diese Tools regelmäßig aus, und vergleichen Sie die Ergebnisse, um Wachstumstrends nachzuverfolgen und problematische Muster frühzeitig zu erkennen.

Häufige Probleme bei der Repositoryleistung und Gegenmaßnahmen

Die folgenden Muster sind die häufigsten Mitwirkenden zum Repositorywachstum und zu leistungseinbußen.

Große und häufig aktualisierte Dateien

Große Dateien reduzieren die Git-Leistung, unabhängig davon, ob sie Text oder binär sind. Die Auswirkungen sind am größten, wenn sie sich häufig ändern. Da jede Änderung in der Regel einen großen Teil der Datei umschreibt, wird die Delta-Komprimierung ineffektiv und bewirkt, dass Git fast eine vollständige Momentaufnahme für jede Überarbeitung speichert. Die Repositorygröße und die Objektanzahl werden dadurch schnell vergrößert.

  • Halten Sie große und häufig aktualisierte Dateien aus Git heraus. Speichern Sie sie in Git LFS oder Azure Artifacts, und übernehmen Sie keine Buildausgaben oder generierten Inhalte. Weitere Informationen finden Sie unter Arbeiten mit großen Dateien in Ihrem Git-Repository.
  • Wenn eine große Datei häufig in Git verbleiben muss und sich ändert, teilen Sie sie in kleinere logische Teile auf, die unabhängig voneinander versionsgelöst werden können.
  • Um zu verhindern, dass neue große Dateien in das Repository eingegeben werden, aktivieren Sie die Richtlinie für die maximale Dateigröße .

Verwenden Sie Git LFS nur für große Dateien, die sich nicht gut unterscheiden. Das Verschieben vieler kleiner Dateien in LFS verbessert die Leistung nicht und kann dies noch schlimmer machen.

Überdimensionierte oder flache Verzeichnisstrukturen

Ein Verzeichnis mit vielen direkten Einträgen, dateien und Unterverzeichnissen, wird als ein großes Strukturobjekt gespeichert. Jede Änderung darin veranlasst Git, eine neue Kopie des gesamten Objekts zu schreiben. Dieses Verhalten verlangsamt Git-Vorgänge und erhöht die Repositorygröße im Laufe der Zeit, auch wenn die Änderungen klein sind.

Halten Sie die Anzahl der unmittelbaren Einträge in einem Verzeichnis überschaubar. Eine Anzahl über ein paar Hundert ist ein Zeichen dafür, dass die Struktur neu ausgeglichen werden soll.

  • Organisieren Sie Einträge in einem ausgewogenen, hierarchischen Layout. Verteilen Sie Dateien und Unterverzeichnisse gleichmäßig, sodass kein einzelnes Verzeichnis eine übermäßige Anzahl von direkten Einträgen enthält.
  • Wenn Sie eine große Menge generierter Daten im Repository speichern müssen, partitionieren Sie sie in ein geschachteltes Layout wie Jahr/Monat/Tag.
  • Bewahren Sie generierte Inhalte in einer konsistenten Reihenfolge innerhalb jeder Datei auf. Das Hinzufügen oder Entfernen einer kleinen Datenmenge sollte sich nur auf die zugehörigen Zeilen auswirken, die restliche Datei nicht neu anordnen und einen großen Diff erstellen. Listenelemente werden z. B. immer auf die gleiche Weise sortiert.

Nicht verwendete Verzweigungen

Zu viele langlebige, nicht verwendete Verzweigungen können die Repositorygröße erhöhen und Vorgänge verlangsamen. Wenn Sie git clone ein Repository erstellen, lädt Git Objekte herunter, die von jeder Remote-Verzweigung erreichbar sind, einschließlich Dateien, die nie zusammengeführt mainwurden.

  • Löschen Sie veraltete oder nicht verwendete Verzweigungen regelmäßig.
  • Wenn Ihr Repository tatsächlich eine sehr große Anzahl von Branches benötigt, sollten Sie in Erwägung ziehen, Limited Refs zu aktivieren.

Beide Maßnahmen reduzieren die Anzahl der Refs, die die Clients und der Server bei jedem Fetch aushandeln.

Important

Der Speicher von Azure Repos ist auf dem Server nur zum Anhängen vorgesehen. Die Empfehlungen in diesem Artikel verhindern ein schnelles zukünftiges Wachstum, aber sie verkleinern kein Repository, das bereits gewachsen ist. Zuvor zugesicherte Dateien und Verzeichnisse verbleiben auf dem Server. Das erzwungene Pushen oder Löschen eines Branches gibt diesen Speicherplatz nicht frei. Die einzige Möglichkeit, die Daten vollständig zu entfernen, besteht darin, das Repository neu zu erstellen und nur die benötigten Inhalte zu migrieren.

Klonen und Abrufen beschleunigen

Unabhängig davon, wie fehlerfrei ein Repository ist, können Clients die Menge an Daten reduzieren, die sie herunterladen:

  • Ein oberflächlicher Klon begrenzt den Umfang der abgerufenen Historie, was sich gut für CI-Workflows eignet, die nur die neuesten Commits benötigen.
  • Ein teilweiser Klon behält den vollständigen Verlauf bei, lädt jedoch nur bei Bedarf Dateiinhalte herunter.

Weitere Informationen zu beiden Optionen finden Sie unter Git Partial Clone in Azure DevOps.