Parametrisierte Filter - Optimierung für vorausberechnete PartitionenParameterized Filters - Optimize for Precomputed Partitions

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions)

Vorausberechnete Partitionen dienen der Leistungsoptimierung und können mit gefilterten Mergeveröffentlichungen verwendet werden.Precomputed partitions is a performance optimization that can be used with filtered merge publications. Vorausberechnete Partitionen sind darüber hinaus eine Anforderung für die Verwendung logischer Datensätze bei gefilterten Veröffentlichungen.Precomputed partitions is also a requirement for using logical records on filtered publications. Weitere Informationen zu logischen Datensätzen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.For more information about logical records, see Group Changes to Related Rows with Logical Records.

Wenn ein Abonnement eine Synchronisierung mit einem Verleger ausführt, muss der Verleger die Filter des Abonnenten auswerten. Dabei werden die Zeilen ermittelt, die zu dieser Abonnentenpartition oder zum Dataset gehören.When a Subscriber synchronizes with a Publisher, the Publisher must evaluate the Subscriber's filters to determine which rows belong to that Subscriber's partition, or data set. Dieses Ermitteln der Partitionsmitgliedschaft von Änderungen auf dem Verleger für jeden Abonnenten, der ein gefiltertes Dataset erhält, wird Partitionsauswertunggenannt.This process of determining partition membership of changes at the Publisher for each Subscriber receiving a filtered dataset is referred to as partition evaluation. Ohne vorausberechnete Partitionen muss die Partitionsauswertung für jede Änderung an einer gefilterten Spalte ausgeführt werden, die auf dem Verleger vorgenommen wurde, seit der Merge-Agent zuletzt für einen bestimmten Abonnenten ausgeführt wurde. Außerdem muss dieser Vorgang dann für jeden Abonnenten wiederholt werden, der eine Synchronisierung mit dem Verleger ausführt.Without precomputed partitions, partition evaluation must be performed for each change made to a filtered column at the Publisher since the last time the Merge Agent ran for a specific Subscriber, and this process has to be repeated for every Subscriber that synchronizes with the Publisher.

Wenn der Verleger und der Abonnent jedoch mit MicrosoftMicrosoft SQL Server 2005 (9.x)SQL Server 2005 (9.x) oder einer höheren Version ausgeführt werden und Sie vorausberechnete Partitionen verwenden, wird die Partitionsmitgliedschaft für alle Änderungen auf dem Verleger im Voraus berechnet und persistent gespeichert, während die Änderungen vorgenommen werden.However, if the Publisher and Subscriber are running on MicrosoftMicrosoft SQL Server 2005 (9.x)SQL Server 2005 (9.x) or a later version and you use precomputed partitions, partition membership for all changes at the Publisher is precomputed and persisted at the time that the changes are made. Als Folge kann ein Abonnent beim Synchronisieren mit dem Verleger sofort mit dem Download von Änderungen beginnen, die seine Partition betreffen, ohne die Partitionsauswertung durchlaufen zu müssen.As a result, when a Subscriber synchronizes with the Publisher, it can immediately start to download changes relevant to its partition without having to go through the partition evaluation process. Das kann zu einer erheblichen Verbesserung der Leistung führen, wenn eine Veröffentlichung eine große Zahl von Änderungen, Abonnenten oder Artikeln aufweist.This can lead to significant performance gains when a publication has a large number of changes, Subscribers, or articles in the publication.

Neben dem Verwenden von vordefinierten Partitionen generieren Sie vorab Momentaufnahmen und/oder ermöglichen Abonnenten das Anfordern der Momentaufnahmegenerierung und -anwendung beim ersten Synchronisieren.In addition to using precomputed partitions, pre-generate snapshots and/or allow Subscribers to request snapshot generation and application the first time they synchronize. Verwenden Sie eine oder beide dieser Optionen, um Momentaufnahmen für Veröffentlichungen bereitzustellen, die parametrisierte Filter verwenden.Use one or both of these options to provide snapshots for publications that use parameterized filters. Wenn Sie keine dieser beiden Optionen angeben, werden die Abonnements mit einer Reihe von SELECT- und INSERT-Anweisungen statt mit dem bcp -Hilfsprogramm initialisiert, wodurch sich der Prozess deutlich verlangsamt.If you do not specify one of these options, subscriptions are initialized using a series of SELECT and INSERT statements, rather than using the bcp utility; this process is much slower. Weitere Informationen finden Sie unter Snapshots for Merge Publications with Parameterized Filters.For more information, see Snapshots for Merge Publications with Parameterized Filters.

So verwenden Sie vorausberechnete PartitionenTo use precomputed partitions

Vorausberechnete Partitionen werden standardmäßig für alle neuen und vorhandenen Veröffentlichungen aktiviert, die den oben beschriebenen Richtlinien folgen.Precomputed partitions are enabled by default on all new and existing publications that adhere to the guidelines described above. Die Einstellung kann mithilfe von SQL Server Management StudioSQL Server Management Studio oder programmgesteuert geändert werden.The setting can be changed through SQL Server Management StudioSQL Server Management Studio or programmatically. Weitere Informationen finden Sie unter Optimize Parameterized Row Filters.For more information, see Optimize Parameterized Row Filters.

Anforderungen für die Verwendung vorausberechneter PartitionenRequirements for Using Precomputed Partitions

Wenn die folgenden Anforderungen erfüllt sind, werden neue Mergeveröffentlichungen standardmäßig mit vorausberechneten Partitionen aktiviert, und vorhandene Veröffentlichungen werden automatisch für die Verwendung dieser Funktion aktualisiert.If the following requirements are met, new merge publications are, by default, created with precomputed partitions enabled, and existing publications are automatically upgraded to use the feature. Erfüllt eine Veröffentlichung die Anforderungen nicht, kann sie geändert, und anschließend können vorausberechnete Partitionen aktiviert werden.If a publication does not meet the requirements, it can be changed, and then precomputed partitions can be enabled. Wenn einige Artikel den Anforderungen entsprechen und andere nicht, können Sie gegebenenfalls zwei Partitionen erstellen, von denen eine für vorausberechnete Partitionen aktiviert wird.If some articles meet these requirements and some do not, consider creating two publications, with one enabled for precomputed partitions.

Anforderungen für FilterklauselnRequirements for Filter Clauses

  • Alle in parametrisierten Zeilenfiltern verwendeten Funktionen, wie HOST_NAME() und SUSER_SNAME(), müssen direkt in die parametrisierte Filterklausel eingeschlossen sein und dürfen nicht innerhalb einer Sicht oder dynamischen Funktion geschachtelt sein.Any functions used in parameterized row filters, such as HOST_NAME() and SUSER_SNAME(), should appear directly in the parameterized filter clause and not be nested inside of a view or dynamic function. Weitere Informationen zu diesen Funktionen finden Sie unter HOST_NAME (Transact-SQL), SUSER_SNAME (Transact-SQL) und Parametrisierte Zeilenfilter.For more information about these functions, see HOST_NAME (Transact-SQL), SUSER_SNAME (Transact-SQL), and Parameterized Row Filters.

  • Die nach dem Erstellen der Partition für jeden Abonnenten zurückgegebenen Werte dürfen sich nicht ändern.The values returned for each Subscriber should not change after the partition is created. Wenn Sie z. B. HOST_NAME() in einem Filter verwenden (und den Wert von HOST_NAME() nicht überschreiben), ändern Sie nicht den Computernamen auf dem Abonnenten.For example, if you use HOST_NAME() in a filter (and do not override the HOST_NAME() value) do not change the computer name at the Subscriber.

  • Joinfilter dürfen keine dynamischen Funktionen enthalten (Funktionen wie HOST_NAME() und SUSER_SNAME(), die je nach Abonnent, der die Synchronisierung ausführt, zu einem unterschiedlichen Wert ausgewertet werden).Join filters should not contain dynamic functions (functions such as HOST_NAME() and SUSER_SNAME() that evaluate to a different value depending upon the Subscriber that is synchronizing). Nur parametrisierte Zeilenfilter dürfen dynamische Funktionen enthalten.Only parameterized row filters should contain dynamic functions.

  • Nicht deterministische Funktionen können nicht in einer Filterklausel verwendet werden.Nondeterministic functions cannot be used in a filter clause. Weitere Informationen zu nicht deterministischen Funktionen finden Sie unter Deterministic and Nondeterministic Functions.For more information about nondeterministic functions, see Deterministic and Nondeterministic Functions.

  • Sichten, auf die in Joinklauseln oder parametrisierten Filterklauseln verwiesen wird, dürfen keine dynamischen Funktionen enthalten.Views referenced in join filter clauses or parameterized filter clauses should not contain dynamic functions.

  • In der Veröffentlichung dürfen keine kreisförmigen Joinfilterbeziehungen enthalten sein.There should be no circular join filter relationships in the publication.

DatenbanksortierungDatabase Collation

  • Wenn vorausberechnete Partitionen verwendet werden, wird stets die Sortierung der Datenbank zu Vergleichen herangezogen und nicht die Sortierung der Tabelle oder Spalte.When precomputed partitions are used, the collation of the database is always used when making comparisons, rather than the collation of the table or column. Nehmen Sie das folgende Szenario als Beispiel:Consider the following scenario:

    • Eine Datenbank mit einer Sortierung, die Groß- und Kleinschreibung unterscheidet, enthält eine Tabelle mit einer Sortierung ohne Unterscheidung der Groß- und Kleinschreibung.A database with a case-sensitive collation contains a table with a case-insensitive collation.

    • Die Tabelle enthält eine ComputerName-Spalte, die mit dem Hostnamen des Abonnenten in einem parametrisierten Filter verglichen wird.The table contains a column ComputerName, which is compared against the host name of the Subscriber in a parameterized filter.

    • Die Tabelle enthält eine Spalte mit dem Wert "MYCOMPUTER" und eine Zeile mit dem Wert "mycomputer" in dieser Spalte.The table contains one row with the value "MYCOMPUTER" and one row with the value "mycomputer" in this column.

    Wenn der Abonnent mit dem Hostnamen "mycomputer" eine Synchronisierung ausführt, empfängt der Abonnent nur eine Zeile, da bei dem Vergleich Groß- und Kleinschreibung berücksichtigt wird (die Sortierung der Datenbank).If the Subscriber synchronizes with a host name of "mycomputer", the Subscriber receives only one row because the comparison is case-sensitive (the collation of the database). Werden keine vorausberechneten Partitionen verwendet, empfängt der Abonnent beide Zeilen, da die Tabelle eine Sortierung aufweist, bei der Groß- und Kleinschreibung nicht berücksichtigt wird.If precomputed partitions are not used, the Subscriber receives both rows, because the table has a case-insensitive collation.

Leistung vorausberechneter PartitionenPerformance of Precomputed Partitions

Bei vorausberechneten Partitionen besteht ein geringfügiger Leistungsabfall, wenn Änderungen vom Abonnenten auf den Verleger hochgeladen werden. Der Großteil der Zeit bei der Mergeverarbeitung wird jedoch für die Auswertung von Partitionen und den Download von Änderungen vom Verleger zum Abonnenten aufgewendet. Deshalb kann der Reingewinn noch immer erheblich sein.There is a small performance cost with precomputed partitions when changes are uploaded from the Subscriber to the Publisher, but the bulk of merge processing time is spent evaluating partitions and downloading changes from the Publisher to the Subscriber, so the net gain can still be significant. Der Leistungsvorteil variiert je nach Anzahl der Abonnenten, die gleichzeitig eine Synchronisierung ausführen, und der Anzahl von Updates pro Synchronisierung, bei denen Zeilen zwischen Partitionen verschoben werden.The performance benefit will vary, depending on the number of Subscribers synchronizing concurrently and the number of updates per synchronization that move rows from one partition to another.

Weitere InformationenSee Also

Parametrisierte ZeilenfilterParameterized Row Filters