Udostępnij za pośrednictwem


W jaki sposób replikacja łączenia ocenia partycji w publikacji filtrowania

Gdy jeden lub więcej tabel w publikacja seryjnej jest filtrowana za pomocą sparametryzowanych filtry i filtry łączyć, dane w tabelach opublikowanych jest podzielony na partycje.A partycji jest po prostu podzbiór wierszy w tabela.Podczas synchronizacji z wydawcą subskrybent Wydawca musi określić wiersze, które należą do firmy subskrybent partycji, na podstawie wartości dostawy subskrybent dla funkcje systemowe SUSER_SNAME() and/or HOST_NAME().Ten proces określania członkostwa partycji o zmianach w Wydawca dla poszczególnych subskrybent otrzymywania filtrowanych danych jest określany jako Ocena partycji.

W zależności od danych w tabelach opublikowane i ustawienia wybrane podczas tworzenia filtru sparametryzowana i filtry powiązanych łączyć każdy wiersz w tabela opublikowanych mogą wykonywać następujące czynności:

  • Należą do jednej partycji i być replikowane na tylko jeden subskrybent (wartość 3 for the sp_addmergearticle Parametr @ partition_options).Na przykład w AdventureWorks Baza danych, można filtrować Pracownika tabela z następującą klauzula filtru: WHERE Employee.LoginID = SUSER_SNAME().The row matching each Login ID is sent to only one Subscriber.

  • Należą do jednej partycji i być replikowane na więcej niż jeden subskrybent (wartość 2 for @ partition_options).Na przykład w AdventureWorks Baza danych, można filtrować Produkty tabela z następującą klauzula filtru: WHERE Products.ProductLine = HOST_NAME().The HOST_NAME() value is overridden such that the group of salespeople responsible for mountain bike sales receive all rows with a value of "M" in the ProductLine column; each row with a value of "M" belongs to only one partition, but it is sent to more than one Subscriber.Aby uzyskać więcej informacji o korzystaniu z HOST_NAME(), zobacz temat "Filtrowanie z HOST_NAME()" sekcja w Sparametryzowana filtry wierszy.

  • Należą do więcej niż jedną partycję i być replikowane na więcej niż jeden subskrybent (wartość 0 or 1 for @ partition_options).Na przykład w AdventureWorks Baza danych, można filtrować Produkty tabela z następującą klauzula filtru: WHERE Products.ProductLine = HOST_NAME() or Products.ListPrice < 100.In this case, sales people responsible for mountain bike sales can also sell products in other categories as long as the sale price is less than $100 dollars.Z powodu OR w klauzula filtru wiersza może należeć do więcej niż jedną partycję.

W jaki sposób są oceniane partycji

Ocena partycji pojawia się na dwa sposoby w replikacja łączenia, w zależności od tego, czy jest używana funkcja precomputed partycji.Jeżeli liczba wymagania są spełnione, nowych publikacji korespondencji seryjnej są domyślnie tworzone precomputed partycji włączone, a istniejących publikacji są automatycznie uaktualniane do korzystania z funkcji.Aby uzyskać pełną listę wymagań zobacz Optymalizacja sparametryzowana wydajności filtr z Precomputed partycji.

Ocena partycji przy użyciu Precomputed partycji

Precomputed partycji członkostwa partycji dla wszystkich zmian przez wydawcę precomputed i zachowywane na czas czy zmiany są wprowadzane opublikowanych tabel.W rezultacie podczas subskrybent z Wydawca, można go natychmiast rozpocząć pobieranie zmian odnoszących się do jego partycji bez konieczności przechodzenia przez proces oceny partycji.Może to prowadzić do wzrost wydajności znaczący, gdy publikacja zawiera dużą liczbę zmian, subskrybentów lub artykułów w publikacji.

W partycji precomputed oceny tabele systemowe są następujące:

  • MSmerge_partition_groups

  • MSmerge_current_partition_mappings

  • MSmerge_past_partition_mappings

MSmerge_partition_groups zawiera jeden wiersz dla każdej partycji, która jest zdefiniowana w publikacja.Partycje mogą być:

  • Zdefiniowane jawnie przy użyciu sp_addmergepartition or the Partycje danych strona w oknie dialogowym właściwości publikacja.

  • Tworzone automatycznie podczas synchronizowania subskrybent, jeśli subskrybent wymaga partycji, która jeszcze nie ma wpisu MSmerge_partition_groups.

Pozostałych dwóch tabel)MSmerge_current_partition_mappings and MSmerge_past_partition_mappings) są wprowadzane zmiany są wprowadzane opublikowanych tabel.Każdy czas zmian w opublikowanej tabelę w bazie danych, do publikacja, wyzwalacza seryjnego rekordy metadane i uruchomieniu:

  • MSmerge_current_partition_mappings zawiera jeden wiersz dla każdej kombinacji unikatowych wierszy w MSmerge_contents and MSmerge_partition_groups.Na przykład jeśli wiersz w tabela użytkownik należy do dwie partycje, a wiersz zostanie zaktualizowany, jeden wiersz jest wstawiany do MSmerge_contents w celu uwzględnienia aktualizacji i dwa wiersze są wstawiane do MSmerge_current_partition_mappings, aby wskazać, że zaktualizowanych wierszy należy do dwie partycje.

  • MSmerge_past_partition_mappings zawiera jeden wiersz dla każdego wiersza, która należy już w danej partycji.Jeśli wiersz przenosi się z partycji:

    • Wiersz jest usuwany.Usunięcie wiersza z tabela użytkowników zostanie wstawiony wiersz MSmerge_tombstone i jeden lub więcej wierszy są wstawiane do MSmerge_past_partition_mappings.

    • Zmieniona wartość kolumna używane do filtrowania.Na przykład jeżeli sparametryzowana filtr jest oparty na stanie, w którym jest siedzibą firmy i przenosi firmy, wiersza dla firmy (i powiązane wiersze w innych tabelach) może przenieść z jednego sprzedaży osoby partycji danych do partycji dla innego sprzedawcy.Jeśli wiersz został zaktualizowany w taki sposób, że należy ono już w partycji, wiersz jest wstawiany lub aktualizowany w MSmerge_contents i jeden lub więcej wierszy są wstawiane do MSmerge_past_partition_mappings.

    Uwaga

    Jeśli nonoverlapping partycji z jednym subskrypcja na partycji (wartość 3 for the sp_addmergearticle Parametr @ partition_options) jest używana, system tabel MSmerge_current_partition_mappings and MSmerge_past_partition_mappings nie są używane do śledzenia wierszy mapowania partycji, ponieważ każdy wiersz należy do tylko jednej partycji i może zostać zmieniona na tylko jeden subskrybent.

Ocena partycji przy użyciu procesu SetupBelongs

Bez precomputed partycje, proces ten jest znany jako SetupBelongs jest używany.Podczas synchronizacji, oceny partycji jest wykonywane dla każdej zmiany dokonane od czas ostatniego scalania Agent filtrowanej tabela przez wydawcę, który został uruchomiony dla określonego subskrybent.Ten proces jest powtarzany dla każdego subskrybent, która synchronizuje z Wydawca.

Aby wykonać ocenę partycji abonenta, Agent korespondencji seryjnej wymaga systemowa procedura składowana sp_MSsetupbelongs, which:

  1. Powoduje utworzenie dwóch tabel tymczasowych dla każdej filtrowanej artykuł: # belongs_<RandomNumber> i # notbelongs_<RandomNumber>.

  2. Używa wartości zwróconej przez SUSER_SNAME() and/or HOST_NAME() wyświetlanie funkcji przez subskrybent, aby wykonać kwerendę dotyczącą systemu; kwerendy jest używana do określenia, czy wiersz w MSmerge_contents or MSmerge_tombstone odnosi się do partycji abonenta.

  3. Jeśli wiersz nie jest istotne dla subskrybent wcale (na przykład Wstaw na innej partycji), metadane dla tego wiersza nie jest przechowywana w należy # or #notbelongs.Jeżeli wiersz jest istotne, istnieją dwie możliwe wyniki:

    • Wiersz jest dodawany do należy # if: w wierszuMSmerge_contents jest insert, która należy do partycji lub wiersza MSmerge_contents jest aktualizacja, która nie powoduje zmiany wartości w każdej kolumny, używane do filtrowania.

    • Wiersz jest dodawany do #notbelongs if: w wierszuMSmerge_contents jest aktualizacja, która powoduje zmianę wartości w dowolnej kolumna używane do filtrowania (innymi słowy, przesuwania wiersza do nowej partycji), lub wiersza MSmerge_tombstone reprezentuje usunięcie wiersza w partycji.

Uwaga

Nawet jeśli precomputed partycje są włączone, proces SetupBelongs jest używany po raz pierwszy subskrypcji synchronizacji, jeśli subskrypcja jest tworzony po innych subskrypcji miała się rozpocząć odbieranie zmian.