Freigeben über


Leistungsprobleme bei der Synchronisierung mit SharePoint Foundation

Letzte Änderung: Donnerstag, 8. Oktober 2009

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Wartezeit
Durchsatz
Bandbreite
Seitenverwaltung
Filterung und Sortierung

Bei einer Synchronisierung mit einem Server müssen bestimmte Aspekte berücksichtigt werden, die sich auf die Systemleistung auswirken können, z. B. Wartezeit, Durchsatz, Bandbreite, Seitenverwaltung sowie die Filterung und Sortierung zur Rückgabe bestimmter Datasets.

Wartezeit

Wartezeit, die zwischen dem Erstellen einer Benutzeranforderung und der Rückgabe von Informationen vom Server anfällt, ist ein wichtiger Aspekt für Benutzer. Häufig gelten Grenzwerte für die zulässige Dauer der Verarbeitung einer an eine Datenbank oder einen Front-End-Webserver gesendeten Anforderung sowie für die Größe der Anforderung selbst, sodass aus extrem langen Anforderungen verweigerte Anforderungen werden können.

Das Aktivieren der rowLimit-Eigenschaft für GetListItemChangesSinceToken zum Begrenzen der jeweils angeforderter Datenmenge ist aus den zuvor genannten Gründen wichtig. Es muss jedoch herausgestellt werden, dass diese Eigenschaft auch die Gesamtdauer erhöht, die bis zum Abschluss des Synchronisierungsvorgangs erforderlich ist.

Durchsatz

Die Verringerung der Gesamtanzahl der für die Verarbeitung einer Anforderung erforderlichen Zyklen steigert fraglos die Leistung, da die Wartezeit verkürzt wird. Doch bei mehreren Clients ist es wichtiger, die nachteiligen Auswirkungen zu minimieren, die ein Client auf andere hat. Zumeist ist es einfacher, sicherer und effektiver, den Server einige Verarbeitungsaufgaben ausführen zu lassen, anstatt dieselbe Verarbeitung auf mehreren Clients zu implementieren. Zum Steigern des Durchsatzes ist es jedoch fast immer vorteilhafter, die Verarbeitung auf dem Client erfolgen zu lassen. Wenngleich der Server meistenteils mehr Verarbeitungsleistung bietet, verfügt der Client wahrscheinlich über mehr CPU-Zeit. Von einem Synchronisierungsclient stammende Datenanforderungen an den Server sollten so klein und einfach wie möglich sein.

Bandbreite

Angestrebt werden Umgebungen mit hoher Bandbreite, doch auch in diesen ist es wichtig, die Menge der zu übertragenden Daten zu minimieren. Wenn ein Client bestimmte Informationen nicht benötigt, sollte die Anforderung diese nicht enthalten.

Seitenverwaltung

Bei einer vollständigen Synchronisierung (ohne Änderungstoken) sollte der Client über den rowLimit-Parameter eine maximale Anzahl von pro Seite zurückgegebenen Elementen anfordern. Wenn die gefilterte Anzahl von Elementen in der Liste größer als die maximale Anzahl der pro Seite zurückgegebenen Elemente ist, gibt der Server ein ListItemCollectionPositionNext-Attribut zurück, das zum Anfordern der nächsten Seite verwendet werden soll.

Es wird nur das aktuelle Änderungstoken der Liste auf der ersten Seite zurückgegeben, sodass Änderungen an der ersten Seite nicht verloren gehen. Der Client speichert das Änderungstoken der ersten Seite für eine nachfolgende inkrementelle Synchronisierung.

HinweisHinweis

Sekundäre Seiten enthalten keine Listen- und globalen Eigenschaften wie Berechtigungen, alternative URLs oder Werte für die Gültigkeitsdauer.

Verwenden des Zeilenlimits

Das rowLimit-Element wird auch für die inkrementelle Synchronisierung (bei vorhandenem Änderungstoken) unterstützt, doch bei dieser Art der Synchronisierung begrenzt dieses Element die Verarbeitung des internen Änderungsprotokolls. Zudem gilt ein interner Grenzwert von 100 Zeilen pro Seite. Wenngleich der Client sicher sein kann, dass die Anzahl der zurückgegebenen Elemente diesen Grenzwert nicht überschreitet, werden unter bestimmten Umständen ggf. nicht alle Änderungen synchronisiert, auch wenn die Anzahl der zurückgegebenen Elemente kleiner als dieser Grenzwert ist. Dies geschieht, wenn Sie die Verarbeitung des Änderungsprotokolls beenden, sobald eine Anzahl von Aktualisierungen erreicht wird, die diesem Grenzwert entspricht. In diesem Fall müssen Sie das MoreChanges-Attribut zurückgeben, um anzugeben, dass das Änderungsprotokoll weitere Änderungen enthält. Anstatt auf die nächste Synchronisierungsaktualisierung zu warten, sollte der Client mithilfe des zurückgegebenen Änderungstokens weitere Änderungen sofort anfordern.

Das rowLimit-Element wirkt sich wie folgt auf inkrementelle Synchronisierungen aus:

  • Es gilt ein interner Grenzwert von 100 Zeilen pro Seite. Es gibt keinen modifizierten Zeitindex, der zum Filtern der zurückgegebenen Elemente genutzt werden kann. Darüber hinaus gilt für SQL Server ein Grenzwert von 160 ORs in einer Abfrage, und sobald dieser Wert nahezu erreicht ist, beginnt sich die Leistung zu verschlechtern. Der Wert 100 lässt einen Spielraum von zusätzlich 60 als Teil des Filters zu, der vom Client angefordert wird.

  • Möglich wäre, mehrere getrennte SQL-Abfragen zu erstellen, doch das würde die Unterstützung der gesamten Sortierung und Filterung auf der mittleren Ebene implizieren.

Aus diesem Grund müssen Sie ein nicht aktuelles Änderungstoken zurückgeben, damit zusätzliche Änderungen in einem gesonderten Aufruf verarbeitet werden können. Sie können dennoch das gesamte Änderungsprotokoll untersuchen, um den spätesten Punkt besser bestimmen zu können, an dem die Anzahl der zurückgegebenen Elemente kleiner als der Grenzwert wäre, doch auch dieser Vorgang wäre ohne Filterung auf der mittleren Ebene nicht präzise.

Filterung und Sortierung

Wenn Sie mit einer Filterung arbeiten, können Sie eine bestimmte Menge von Elementen in einer Liste anstatt die gesamte Liste zurückgeben. Die beiden gängigsten Szenarien, in denen die Filterung zum Einsatz kommt, sind die Ordnersynchronisierung, bei der der Benutzer nur die Elemente in einem Ordner erhält, und bestimmte Gruppenszenarien, bei denen der Benutzer nur die Elemente erhält, die ihm zugeordnet sind.

Die Filterung kann anhand des Parameters contains oder query erfolgen. Contains ist einschränkender, da es sich im Wesentlichen um die WHERE-Klausel einer CAML-Abfrage (Collaborative Application Markup Language) handelt, während query die vollständige Abfrage darstellt. Contains ist sicherer, da Sie bestimmte Szenarien optimieren können.

Der The Query-Parameter ist leistungsstärker und flexibler als der contains-Parameter, doch müssen Sie damit vertraut sein, wie er sich auf die Leistung auswirkt. Es folgen Arten der Strukturierung des Query-Parameters, die sich auf die Leistung auswirken können:

  • Clients sollten die Filterung anhand einer nicht indizierten Spalte vermeiden. Andernfalls erfordert der Abruf einer Seite eine Durchsuchung der gesamten Liste, bis die Anzahl der angeforderten Elemente gefunden wurde.

  • Clients sollten ferner die Sortierung anhand einer Spalte vermeiden, es sei denn, die Spalte ist indiziert, denn sonst erfordert der Abruf einer Seite zumindest eine Sortierung des gesamten gefilterten Datasets.

  • Wenn der Filter nicht für dieselbe indizierte Spalte wie die Sortierung gilt, muss SQL Server dennoch ggf. die gesamte Liste durchsuchen, um die Sortierung des gefilterten Datasets zu vermeiden.

Eine inkrementelle Synchronisierung weist einen impliziten Filter auf. Sie können auch Elemente mit einer spezifischen ID anfordern. In diesem Fall muss der Client stets Elemente zurückgeben, die nur anhand der ID sortiert wurden. Sie können zum Filtern auch andere Kategorien wählen, da das Dataset auf maximal 100 beschränkt ist.

Zum Filtern nach Ordner können Sie die Abfrageoption Folder verwenden, doch die Liste muss anhand von FileLeafRef sortiert werden. Eine rekursive Abfrage sollte zuerst anhand von FileDirRef sortiert werden.

Es gibt auch eine Möglichkeit der Filterung anhand mehrerer Ordner mithilfe von Code wie dem folgenden:

[Codeheader hinzufügen]

"<Or><BeginsWith><FieldRef Name="FileRef"/><Value Type="Note">Shared Documents/folder1/</Value></BeginsWith><BeginsWith><FieldRef Name="FileRef"/><Value Type="Note">Shared Documents/folder2/</Value></BeginsWith></Or>". 

Hierdurch wird der gesamte Inhalt von folder1 und folder2 synchronisiert.

Der Client sollte diesen Code mit dem contains-Parameter verwenden und die folgende Abfrageoption hinzufügen.

"<OptimizeFor>FolderUrls</OptimizeFor> "

Dies stellt sicher, dass die SQL Server-Abfrage entsprechend optimiert wird, indem Sie anhand von FileDirRef und FileLeafRef sortiert wird und die rechten Spalten eingeschränkt werden.

Siehe auch

Konzepte

GetListItemChangesSinceToken und Synchronisieren von Anwendungen