Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wewnętrzne elementy replikacji transakcyjnej serwera SQL — część 2

Replikacja transakcyjna serwera SQL jest jedną z najczęściej używanych technik replikacji używanych do kopiowania lub dystrybucji danych w wielu miejscach docelowych. W poprzednim artykule omówiliśmy replikację SQL Server, typy replikacji i podstawowe informacje wewnętrzne na temat działania replikacji transakcyjnej. Teraz zagłębimy się w zaawansowane informacje wewnętrzne o tym, jak działa replikacja transakcyjna SQL Server.

Architektura replikacji transakcyjnej

Zanim zaczniemy, polecam odświeżyć swoją wiedzę w moim poprzednim artykule tutaj.

Zacznijmy od przyjrzenia się architekturze replikacji transakcyjnej serwera SQL przedstawionej poniżej w dokumentacji firmy Microsoft.

W Bazie danych wydawców , utwórz publikację zawierający listę artykułów (Tabele , Wyświetlenia itp.), które należy zreplikować do subskrybenta Baza danych. Gdy artykuły zostaną włączone do replikacji, wszelkie zmiany zachodzące w tych artykułach zostaną oznaczone do replikacji w bazie danych dzienników transakcyjnych wydawcy.

SQL Server Transactional Replication można zainicjować z Wydawcy do Dystrybutora a potem do Subskrybenta baza danych przez Snapshot Agent lub Pełny Kopie zapasowe . Agent migawek może wykonać inicjowanie za pomocą Kreatora konfiguracji replikacji . Pełna kopia zapasowa jest obsługiwana tylko przez instrukcje T-SQL.

Agent czytnika dzienników skanuje dziennik transakcyjny bazy danych wydawcy w celu wykrycia śledzonych zmian oznaczonych jako replikacja. Ignoruje inne zmiany przechwycone w dziennikach transakcyjnych i kopiuje zmiany danych z dziennika transakcyjnego do bazy danych dystrybucji.

Baza danych dystrybucji może znajdować się w wydawcy lub subskrybencie lub może znajdować się w innym niezależnym wystąpieniu programu SQL Server. Zwróć uwagę na następujące rzeczy:

  • Agent czytnika dzienników działa w sposób ciągły z serwera dystrybutora w celu skanowania w poszukiwaniu nowych poleceń oznaczonych do replikacji. Jeśli jednak nie chcesz działać w sposób ciągły, a zamiast tego chcesz działać zgodnie z harmonogramem, możemy zmienić zadanie SQL Agent czytnika dzienników, które zostanie utworzone.
  • Agent czytnika dzienników pobiera wszystkie rekordy, które są oznaczone do replikacji z dziennika transakcyjnego w partiach i wysyła je do bazy danych dystrybucji.
  • Agent czytnika dzienników pobiera tylko transakcje zatwierdzone z dziennika transakcyjnego bazy danych wydawcy. Tak więc wszelkie długotrwałe zapytania w bazie danych wydawcy mogą bezpośrednio wpływać na replikację, ponieważ czeka ona na zakończenie aktywnej transakcji.

Agent dystrybucji pobiera wszystkie niedystrybuowane nowe polecenia z bazy danych dystrybucji i stosuje je do bazy danych subskrypcji za pomocą przycisku Push lub Pociągnij Mechanizm .

  • Wybierz subskrypcjęDystrybutor przejmuje prawo własności do zastosowania zmian z bazy danych dystrybucji do subskrybenta.
  • Pobierz subskrypcję – Subskrybent baza danych przejmuje prawo własności do pobierania zmian z bazy danych dystrybucji do subskrybenta.

Gdy rekordy zostaną pomyślnie rozesłane z dystrybucji do bazy danych subskrybentów, zostaną oznaczone jako Rozpowszechnione a także oznaczony do usunięcia z bazy danych dystrybucji .

Jednym z zadań konserwacji replikacji kluczy jest Czyszczenie dystrybucji :Zadanie Dystrybucja jest uruchamiane co 10 minut, aby usunąć rozproszone rekordy z bazy danych Dystrybucja w celu utrzymania pod kontrolą rozmiaru bazy danych Dystrybucja.

Dlatego naszym celem w tym artykule jest zbadanie następujących tematów:

  • Baza danych dystrybucji
  • Agenci replikacji
    • Agent migawek
    • Agent czytnika dzienników
    • Agent dystrybucyjny
  • Profile agenta replikacji
  • Zadania konserwacji replikacji
  • Opóźnienie replikacji i tokeny śledzenia
  • Narzędzie TableDiff
  • Alerty agenta SQL Server

Baza danych dystrybucji serwera SQL

Baza danych dystrybucji to systemowa baza danych tworzona podczas konfigurowania replikacji. Jest sercem replikacji, ponieważ większość procesu wyczerpuje się w bazie danych dystrybucji.

Ze względu na charakter bazy danych dystrybucji możemy wykonywać na niej tylko ograniczone operacje, takie jak Backup i Przywracanie. Nie możemy go usunąć bezpośrednio, tak jak bazy danych użytkowników.

W przypadku ogromnej bazy danych z dużą ilością replikowanych danych, musimy podjąć kilka specjalnych środków, aby poprawić przepustowość replikacji:

Domyślnie baza danych dystrybucji jest tworzona w domyślnej ścieżce instalacji skonfigurowanej w SQL Server . Jeśli nie jest skonfigurowany, zostanie utworzony w C : dysku lub w folderach instalacyjnych programu SQL Server. Zalecamy przeniesienie bazy danych dystrybucji do szybszej pamięci/dysku, aby poprawić wydajność.

Początkowy rozmiar pliku i autowzrost bazy danych dystrybucji zostanie ustawiona zgodnie z ustawieniami początkowego rozmiaru pliku bazy danych i autowzrostu bazy danych modelu. Skonfiguruj rozmiar pliku początkowego na lepszą wartość, np. 10 GB w przypadku replikacji bazy danych zajętej transakcyjnie. Właściwości Autogrowth powinny mieć maksymalnie 512 MB lub 1 GB zarówno dla plików danych, jak i dziennika. Wtedy nie będzie dużej fragmentacji plików danych i dzienników.

Skonfiguruj codziennie lub Rutynowe zadania kopii zapasowej dołączyć bazę danych dystrybucji do celów referencyjnych lub rozwiązywania problemów w przypadku uszkodzenia lub utraty danych.

Skonfiguruj Codzienną reorganizację indeksu lub Konserwacja prace aby dołączyć bazę danych dystrybucji. Baza danych zawiera ogromne ilości wstawianych danych do MSrepl_transactions i MSrepl_commands tabele.

Uwaga:Ciągłe odpytywanie tych 2 tabel i USUWANIE z nich po pomyślnym przesłaniu danych do bazy danych Subskrybentów zwiększa ryzyko fragmentacji. Ponowne budowanie tych tabel zgodnie z harmonogramem może poprawić wydajność bazy danych dystrybucji.

Aby wyświetlić i zmodyfikować dowolne atrybuty bazy danych dystrybucji związane z replikacją, kliknij prawym przyciskiem myszy Replikacja > Właściwości dystrybutora :

Kliknij wielokropek przycisk po prawej stronie, aby wyświetlić więcej szczegółów na temat poszczególnych wymienionych opcji.

Zwróć uwagę, zmiana dowolnych parametrów może wpłynąć na wydajność bazy danych dystrybucji. Dlatego wprowadzaj zmiany dopiero po uważnej ocenie wszystkich parametrów, które chcesz zmodyfikować.

Przechowywanie transakcji określa, ile danych ma być przechowywanych w bazie danych dystrybucji. Wartości minimalne i maksymalne można określić w godzinach lub dniach.

Wartość przechowywania transakcji ustawiona na 0 godzin wskazuje, że po pomyślnym zreplikowaniu rekordów do bazy danych subskrybentów można je usunąć z bazy danych dystrybucji. Jeśli zwiększysz tę wartość, zwiększy się rozmiar bazy danych dystrybucji. Dlatego musimy to odpowiednio zaplanować.

Przechowywanie historii określa okres przechowywania danych Historii wydajności replikacji transakcyjnej. Domyślnie jest to 48 godzin.

Aby usunąć bazę danych dystrybucji , musimy wyłączyć publikację powiązane z tą konkretną bazą danych dystrybucji, a następnie usuń ją za pomocą jednej z dwóch metod. Jednym z nich jest połączenie Wyłącz publikowanie i Kreatora dystrybucji. Inny używa sp_dropdistributor lub sp_dropdistributiondb procedury. Kreator wewnętrznie używa tych 2 procedur, aby wyłączyć dystrybucję i usunąć bazę danych dystrybucji.

Agenci replikacji serwera SQL

Agenci replikacji to samodzielne programy odpowiedzialne za śledzenie zmian danych od Wydawcy i propagowanie tych zmian w bazach danych Dystrybutorów i Subskrybentów. Są one wykonywane jako zadania agenta SQL Server.

Najpierw zobaczmy lokalizację tych samodzielnych programów.

Aby skonfigurować replikację, musimy mieć składniki replikacji instalowane za pomocą instalatora SQL Server. Po zakończeniu możemy zobaczyć samodzielne programy związane z agentem replikacji dostępne w ścieżce instalacji:

C:\Program Files\Microsoft SQL Server\130\COM

W moim przypadku wersja SQL Server to 2016. Dlatego jest poniżej 130 w ścieżce.

Dla każdego agenta replikacji możemy zobaczyć odpowiedni samodzielny program:

  • DISTRIB.exe – Agent dystrybucji
  • Logread.exe – Agent czytnika dzienników
  • Qrdrsvc.exe — Agent usługi czytnika kolejek
  • Replmerg.exe – agent replikacji scalania
  • Snapshot.exe – agent migawek
  • Tablediff.exe — narzędzie do porównywania tabel. Więcej szczegółów omówimy w dalszej części tego artykułu.

Teraz, gdy wiemy, za co odpowiedzialne są te samodzielne programy i gdzie się znajdują, możemy zrozumieć, w jaki sposób są one wykonywane za pomocą zadań SQL Server Agent.

Ponieważ mamy do czynienia z replikacją transakcyjną programu SQL Server, przejdziemy przez zadania agenta migawki, agenta odczytu dziennika i agenta dystrybucji (ta sama logika dotyczy wszystkich innych agentów).

Agent migawek

Snapshot Agent jest uruchamiany z serwera, na którym znajduje się baza danych dystrybucji. Przygotowuje schemat i dane początkowe wszystkich artykułów zawartych w publikacji na wydawcy, tworzy pliki migawek w folderze migawek i rejestruje szczegóły synchronizacji w bazie danych dystrybucji.

Z dystrybucji MSSnapshot_agents tabeli, możemy zidentyfikować zadanie agenta programu SQL Server, które wykonuje działania agenta migawki. Każda publikacja obejmuje dedykowane zadanie agenta SQL Server, które musi zająć się obowiązkami agenta migawki.

Rozwiń Agent serwera SQL i otwórz nazwę zadania wymienioną powyżej. Wyświetli szczegóły i Kategorię nazwa – RePL-Migawka

Kliknij Krok aby zobaczyć czynności wykonywane przez agenta Snapshot.

Kliknij konkretny krok, aby wyświetlić informacje o zadaniu agenta migawki.

Krok 1 rejestruje wpis w tabeli historii za każdym razem, gdy agent Snapshot jest uruchamiany przy użyciu sp_MSadd_snapshot_history procedura.

Tabela zawierająca historię szczegółów wykonywanych przez agenta migawki to MSsnapshot_history tabeli w bazie danych dystrybucji.

Będzie pasować do Wyświetl stan agenta migawki okno dialogowe.

Przejdź do Kroku 2Uruchom agenta . Spowoduje to uruchomienie zadania Snapshot Agent .

Pod Poleceniem , nie mogliśmy znaleźć żadnych instrukcji ani zapytań T-SQL. Podano tylko niektóre parametry. Tak więc odpowiedź znajduje się w wyróżnionej sekcji na powyższej ilustracji. Pokazuje, że etap zadaniaTyp to Migawka replikacji który uruchamia samodzielny program snapshot.exe do wykonywania obowiązków Snapshot Agent.

Więcej informacji na temat migawki.exe można znaleźć w tym artykule MSDN. Zajmiemy się również szczegółowymi informacjami podczas rozwiązywania problemów związanych z replikacją później.

Na koniec przejdziemy do Kroku 3 – ostatni krok pracy. Przechwytuje wszelkie nieoczekiwane wyłączenia zadań agenta i wylogowuje je.

Agent czytnika dzienników

Za każdym razem, gdy publikacja jest konfigurowana w bazie danych, wszelkie zmiany, które zachodzą w tych artykułach, są oznaczane do replikacji w dzienniku transakcji. Agent czytnika dzienników odczytuje te zmiany danych za pomocą logread.exe i przechowuje je w bazie danych dystrybucji za pomocą 2 oddzielnych procesów:

  • Odczytaj dzienniki transakcyjne – używa sp_replcmds rozszerzona procedura składowana do skanowania w poszukiwaniu zmian danych od Wydawcy. Ponieważ ta procedura składowana odwołuje się do plików DLL, wewnętrzne informacje o tym, jak dokładnie firma Microsoft odczytuje pliki dziennika, nie są identyfikowane. Możemy jednak wypróbować nieudokumentowane funkcje, takie jak fn_dblog() i fn_dump_dblog() aby zrozumieć, jak działa plik dziennika transakcji.
  • Zapis do bazy danych dystrybucji – używa sp_MSadd_replcmds procedura składowana w bazie danych dystrybucji w celu zapisania danych binarnych odczytanych z dzienników transakcyjnych bazy danych wydawcy. Zapisuje szczegóły transakcji w MSrepl_transactions tabeli i poszczególnych poleceń do MSrepl_commands stół.

Dla każdej opublikowanej bazy danych dostępne jest tylko jedno zadanie programu SQL Server Agent czytnika dzienników. Możesz zidentyfikować jego nazwę, jak pokazano poniżej:

Rozwiń SQL Server Agent i otwórz powyższe zadanie Log Reader Agent, aby wyświetlić kroki. Wyświetli pracę Kategoria w obszarze Czytnik dziennika replikacji.

Kliknij Kroki aby zobaczyć poszczególne kroki wykonywane przez agenta czytnika dzienników. Podobnie jak w przypadku zadania Snapshot Agent, możemy zobaczyć 3 równoważne kroki dla zadania Log Reader Agent.

Krok 1 wywołuje sp_MSadd_logreader_history procedura rejestrowania komunikatów historii stanu uruchamiania programu Log Reader Agent w MSlogreader_history tabela.

Krok 2 uruchamia proces Log Reader Agent przy użyciu samodzielnego programu logread.exe .

Więcej informacji na temat logread.exe można znaleźć w odpowiednim artykule MSDN. Później przyjrzymy się również krytycznym parametrom konfiguracyjnym agenta czytnika dzienników.

Krok 3 przechwytuje nagłe zamknięcie zadania agenta odczytującego dzienniki.

Agent dystrybucyjny

Agent dystrybucji (DISTRIB.exe) był używany przez replikację transakcyjną i migawkową do zastosowania początkowych plików migawek i przyrostowych lub zastosowania dostępnych oczekujących transakcji z bazy danych dystrybucji do bazy danych subskrybenta.

Ten agent działa z serwera dystrybutora dla subskrypcji wypychanych i serwera subskrybenta dla subskrypcji typu pull. Aby znaleźć nazwę zadania agenta SQL Server, które wykonuje obowiązki agenta dystrybucji, możemy wykonać określone zapytanie, jak pokazano poniżej:

Rozwiń zadanie SQL Server Agent i otwórz je, aby zobaczyć więcej informacji i kategorię przypisaną do dystrybucji replikacji.

Kliknij Kroki – zobaczysz kroki podobne do wcześniej ujawnionych kroków zadań Snapshot i Log Reader Agent.

Krok 1 wywołuje sp_MSadd_distribution_history procedura rejestrowania komunikatów historii stanu uruchamiania agenta odczytu dziennika w MSdistribution_history tabela.

Krok 2 uruchamia proces Agenta dystrybucji (DISTRIB.exe) z parametrami domyślnymi.

Aby uzyskać więcej informacji na temat programu DISTRIB.exe, przejdź do artykułu MSDN. Ponadto w następnych artykułach omówimy krytyczne parametry konfiguracyjne agenta dystrybucji.

Krok 3 przechwytuje szczegóły dotyczące nagłego zamknięcia zadania agenta dystrybucji.

Profile agenta replikacji

Z Właściwości dystrybutora , możemy uzyskać opcję przeglądania profili agenta replikacji . Pozostaw profile agenta z wartościami domyślnymi i zmieniaj je tylko w razie potrzeby w celu rozwiązywania problemów.

Kliknij Domyślne ustawienia profilu aby wyświetlić wartości domyślne skonfigurowane dla wszystkich agentów replikacji dostępnych na serwerze.

Wybierz Agentów dystrybucji i kliknij wielokropek przycisk obok Domyślnego profilu agenta aby zobaczyć skonfigurowane wartości. Zobacz poniższą ilustrację:

Wyświetl domyślny profil agenta agentów migawek Agent czytnika:

Domyślny profil agenta dla Czytnika dzienników Agent:

Praca konserwacji replikacji

Oprócz agentów replikacji mamy zadania konserwacji replikacji .

Są to zadania SQL Server Agent utworzone podczas konfigurowania replikacji transakcyjnej SQL Server. Są one dostępne, aby zapewnić prawidłowe działanie replikacji transakcyjnej.

Niektóre zadania związane z konserwacją replikacji są niezbędne dla replikacji transakcyjnej. Przejrzyjmy je.

  • Porządkowanie dystrybucji: Dystrybucja – wykonuje sp_MSdistribution_cleanup procedura usuwania poleceń replikacji z MSrepl_transactions i MSrepl_commands tabele. Oczyszczanie odbywa się w bazie danych dystrybucji po pomyślnym wysłaniu poleceń do bazy danych subskrybenta na podstawie wartości okresu przechowywania transakcji skonfigurowanej w bazie danych dystrybucji. Domyślnie to zadanie jest uruchamiane co 10 minut w bazie danych dystrybucji. Zmień te wartości dopiero po dogłębnej ocenie.
  • Agent Oczyszczanie historii:dystrybucja – wykonuje sp_MShistory_cleanup procedury w bazie danych dystrybucji, aby wyczyścić rekordy historyczne starsze niż okres przechowywania historii skonfigurowany w tej bazie danych. Domyślnie jest skonfigurowany na 48 dni i wykonywany co 10 minut. Jeśli chcesz zmienić te wartości, rozważ dokładnie wszystkie aspekty.
  • Wygasł Oczyszczanie subskrypcji – wykonuje sp_expired_subscription_cleanup procedura w bazie danych master, aby usunąć te subskrypcje, które wygasły lub były nieaktywne przez długi czas. Domyślnie ta procedura jest wykonywana raz dziennie.

Opóźnienie replikacji i tokeny śledzenia

Opóźnienie replikacji to czas wymagany przez proces Replikacji do śledzenia wszelkich zmian zachodzących w opublikowanych artykułach z bazy danych Wydawcy, aż do ich pomyślnego dostarczenia do Subskrybenta za pośrednictwem Dystrybutora.

Opóźnienie replikacji jest mierzone w milisekundach. Wartość docelowa od 0 (replikacja w czasie rzeczywistym) do bardzo niskiej wartości (przypadki idealne). Jest to jeden z kluczowych środków monitorowania wydajności replikacji.

Możemy zweryfikować opóźnienie replikacji za pomocą Monitora replikacji lub dedykowanych sp_replcounter procedura.

Od Monitora replikacji ma odświeżenie tempo, mogą wystąpić niewielkie odchylenia od obserwowanych wartości. Aby przezwyciężyć niewielkie odchylenia podczas obliczania opóźnienia replikacji, na ratunek przychodzą tokeny Tracer.

Kliknij Tokeny śledzenia (patrz obrazek powyżej), aby wysłać nowy zestaw poleceń testowych z Wydawcy. Następnie zmierz go, gdy dotrze do bazy danych dystrybutora i kiedy został wysłany do bazy danych subskrybenta. Kliknij Wstaw znacznik aby wysłać tokeny śledzące z bazy danych wydawców:

Gdy rekordy zostaną pomyślnie odebrane przez subskrybenta, możemy śledzić całkowite opóźnienie replikacji dla naszej bieżącej konfiguracji. W naszym przypadku jest to 9 sekund:4 sekundy od wydawcy do dystrybutora i 5 sekund od dystrybutora do subskrybenta.

Narzędzie Tablediff

Narzędzie Tablediff (tablediff.exe) zostanie zainstalowany w ścieżce C:\Program Files\Microsoft SQL Server\130\COM po zainstalowaniu komponentów replikacji.

Narzędzie TableDiff porównuje 2 tabele pod kątem braku zbieżności. Oznacza to, że możemy porównać 2 tabele i zidentyfikować różnice między nimi. Następnie synchronizuje tabelę Destination w porównaniu z tabelą Source, generując dedykowane skrypty INSERT/UPDATE/DELETE. Więcej szczegółów można znaleźć w oficjalnej dokumentacji.

Ponieważ replikacja transakcyjna programu SQL Server nie dba o ręczne zmiany w bazie danych subskrybenta, to narzędzie może pomóc w synchronizacji tego rodzaju tabel w razie potrzeby. Jednak nie ma kreatora ani interfejsu użytkownika – możesz uzyskać do niego dostęp tylko za pomocą wiersza polecenia lub z plików wsadowych.

Inne narzędzia mogą ułatwić porównywanie i synchronizację. dbForge Compare Bundle dla SQL Server sprawdza rozbieżności w bazach danych i identyfikuje je i analizuje w określonych tabelach. Generuje również niezbędne skrypty do ich synchronizacji. Oferuje wizualny interfejs i wiele opcji do szybkiego i prostego uruchamiania zadań.

Alerty agenta SQL Server

Wszystkie kluczowe składniki związane z agentami replikacji znajdują się jako zadania znajdujące się w zadaniach agenta programu SQL Server. Dlatego ważne jest, aby stale monitorować działanie zadań agenta SQL Server, aby zapewnić, że replikacja działa bez żadnych problemów. Najczęstsze problemy są poniżej:

  • Problem z uprawnieniami do wykonywania dowolnych zadań agenta replikacji
  • Problem z uprawnieniami do wykonywania jakichkolwiek zadań konserwacji replikacji.
  • Problem z uprawnieniami dostępu do bazy danych wydawców, dystrybucji lub subskrybentów.
  • Agent serwera SQL nie jest skonfigurowany do automatycznego uruchamiania po ponownym uruchomieniu serwera.
  • Kilka innych problemów z danymi związanych z replikacją, takich jak konflikty, brakujące dane itp.

Dlatego powinniśmy mieć odpowiedni mechanizm ostrzegania, aby natychmiast powiadomić DBA lub inną osobę o każdym problemie.

Aby ostrzec administratorów baz danych lub inne osoby w przypadku jakichkolwiek niepowodzeń lub błędów zadania, należy skonfigurować pocztę bazy danych do wysyłania alertów e-mail. Pozwala administratorowi na natychmiastową reakcję i rozwiązanie problemu. Omówimy, jak skonfigurować pocztę bazy danych i alerty w osobnym artykule później.

Podczas konfigurowania replikacji SQL Server domyślnie tworzy poniższy zestaw alertów. Możesz je łatwo skonfigurować pod kątem wymaganych kryteriów. Zapewnia również wysyłanie powiadomień do wymaganych osób w celu podjęcia natychmiastowych działań.

Wniosek

Dziękujemy za przeczytanie kolejnego ogromnego artykułu o replikacji. Mam nadzieję, że pomogło to w wyjaśnieniu elementów wewnętrznych replikacji transakcyjnej oraz szczegółów dotyczących bazy danych dystrybucji, agentów replikacji i odpowiedzialnych za nie programów autonomicznych. Zidentyfikowaliśmy również opóźnienie replikacji, alerty i tokeny śledzenia.

Teraz możemy zanurkować głębiej i dowiedzieć się, jak profesjonalnie leczyć i rozwiązywać problemy z replikacją. Czekajcie na następny artykuł!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL do wyboru dat między dwiema datami

  2. 7 sposobów na zwrócenie wszystkich tabel z kluczem podstawowym w SQL Server

  3. Przedstawiamy nową funkcję:Zawsze włączona grupa dostępności

  4. Jak zmienić kolumnę z wartości Null na Not Null w SQL Server

  5. Dlaczego podczas nawiązywania połączenia z programem SQL Server wystąpił błąd związany z siecią lub specyficzny dla wystąpienia?