Synchronizacja bazy danych SQL Server

21

Definicja problemu

Nasi użytkownicy potrzebują możliwości przeszukiwania bazy danych, która jest w większości aktualna. Dane mogą być nieaktualne do 24 godzin i jest to dopuszczalne. Jakie byłoby najtańsze podejście do uzyskania i aktualizacji drugiej bazy danych z kopią produkcyjną? Czy jest takie podejście, o którym nie myślę?

Obciążenie pracą

Mamy aplikację strony trzeciej, której używamy do monitorowania działalności w zakresie handlu akcjami. W ciągu dnia pojawia się wiele drobnych zmian w ramach różnych przepływów pracy (tak, ta transakcja była ważna. Nie, to jest podejrzane itp.). W nocy wykonujemy operacje na dużych zestawach (ładuj transakcje z poprzedniego dnia).

Obecne rozwiązanie i problem

Korzystamy z migawek baz danych . O godzinie 22 upuszczamy i ponownie tworzymy migawkę. Następnie rozpoczyna się przetwarzanie ETL. To oczywiście obciąża nasz dysk, ale pozwala użytkownikom na zapytanie do bazy danych bez blokowania bazy danych (używają interfejsu Access). Używają go późno w nocy i wcześnie rano, aby zauważyć przestoje.

Problem z tym podejściem jest dwojaki. Po pierwsze, w przypadku niepowodzenia nocnego przetwarzania i nie jest to strasznie rzadkie, możemy przywrócić bazę danych, co powoduje usunięcie migawki. Innym problemem jest to, że czasy przetwarzania przekraczają naszą umowę SLA. Staramy się rozwiązać ten problem, współpracując z dostawcą po zidentyfikowaniu źle napisanych zapytań i braku indeksowania. Migawka bazy danych jest również winowajcą tego spowolnienia, o czym świadczy różnica prędkości, gdy jest obecna, w porównaniu z nie - szokującym, wiem.

Podejścia brane pod uwagę

Grupowanie

Mieliśmy włączone klastrowanie baz danych, ale nie zaspokoiło to potrzeby udostępniania danych i po prostu ogólnie skomplikowało życie administratora. Od tego czasu został wyłączony.

Replikacja serwera SQL

Zaczęliśmy patrzeć na replikację w zeszłym tygodniu. Naszą teorią jest to, że możemy uzyskać drugi katalog wstawiony i zsynchronizowany z produkcyjną bazą danych. Przed rozpoczęciem ETL zerwamy połączenie i ponownie je włączymy dopiero po zakończeniu procesu ETL.

Administrator zaczął od replikacji migawek, ale obawia się, że generowanie migawki zajmuje wiele dni dużego zużycia procesora, a także wymaganego zużycia dysku. Wskazuje, że wydaje się, że zapisuje wszystkie dane do plików fizycznych przed wysyłką do subskrybenta, więc nasza baza danych .6TB będzie kosztować 1,8 TB kosztów przechowywania. Ponadto, jeśli wygenerowanie przystawki zajmie kilka dni, nie będzie pasować do pożądanej umowy SLA.

Po przeczytaniu dobrego artykułu wydaje się, że Snapshot może być sposobem na zainicjowanie subskrybentów, ale wtedy chcielibyśmy przejść do Transactional Replication, aby zachować synchronizację. Zakładam, że włączenie / wyłączenie replikacji transakcyjnej nie wymusi pełnej ponownej inicjalizacji? W przeciwnym razie rozwalimy nasze okno czasowe

Dublowanie bazy danych

Nasza baza danych jest w trybie odzyskiwania PEŁNYM, więc dublowanie bazy danych jest opcją, ale wiem o niej jeszcze mniej niż replikacja. Znalazłem odpowiedź SO, która wskazała: „Dublowanie bazy danych uniemożliwia bezpośredni dostęp do danych, dane lustrzane są dostępne tylko poprzez migawkę bazy danych”.

Przesyłka dziennika

Wygląda na to, że wysyłanie kłód może być również opcją, ale to kolejna z tych rzeczy, o których nic nie wiem. Czy byłoby to tańsze rozwiązanie (wdrożenie i utrzymanie) niż cokolwiek innego? Na podstawie komentarza Remusa „Wysyłka dziennika pozwala na dostęp tylko do odczytu do kopii repliki, ale rozłączy wszystkich użytkowników podczas stosowania następnego otrzymanego dziennika kopii zapasowej (np. Co 15-30 minut)”. Nie jestem pewien, jak długo przełożyłoby się to przestój, aby użytkownicy mogli trochę się niepokoić.

MS Sync

Słyszałem tylko o używaniu Sync w miniony weekend i jeszcze tego nie sprawdzałem. Nie chciałbym wprowadzać nowej technologii dla czegoś o wysokiej widoczności, takiego jak ten problem, ale jeśli jest to najlepsze podejście, niech tak będzie.

SSIS

Robimy tutaj wiele SSIS, więc generowanie kilkuset pakietów SSIS do synchronizacji wtórnej jest dla nas opcją, choć brzydką . Nie jestem fanem robienia tego, ponieważ to dużo kosztów utrzymania, wolałbym, aby mój zespół nie wziął na siebie.

Migawka „magiczna” SAN

W przeszłości słyszałem o tym, że nasz administrator używa technologii SAN do natychmiastowego tworzenia kopii zapasowych całych dysków. Być może istnieje trochę magii EMC, która mogłaby zostać wykorzystana do wykonania uberquickowych kopii mdf / ldf, a następnie możemy odłączyć / dołączyć docelową bazę danych.

Kopia zapasowa i przywracanie

Wydaje mi się, że raz w tygodniu wykonujemy pełne kopie zapasowe, różnice w nocy, a tlog co 15 minut. Jeśli użytkownicy mogliby żyć z 3-4 godzinną przerwą na pełne przywrócenie, to może to być podejście.

Ograniczenia

Windows 2008 R2, SQL Server 2008 R2 (Enterprise Edition), VMWare v5 Enterprise Edition, pamięć masowa EMC SAN z dyskami zamapowanymi na pliki vmdk, kopie zapasowe obsługi Commvault i .6 TB danych w katalogu źródłowym. Jest to aplikacja innej firmy, którą hostujemy wewnętrznie. Zmodyfikowanie ich struktury jest generalnie niezadowolone. Użytkownicy nie mogą przejść bez zapytania do bazy danych i odmówić ograniczenia poprzez proaktywną identyfikację tabel, które monitorują w celu wykonania swojej pracy.

Nasze DBA są w tej chwili wyłącznie wykonawcami. Pełne zegary wypłynęły i jeszcze ich nie zastąpiliśmy. Administratorzy aplikacji nie są dobrze zaznajomieni z kwestiami SQL Server i mamy zespół administratorów Storage / VM, którzy mogą pomóc / utrudnić ten wysiłek. Zespoły programistów nie są obecnie zaangażowane, ale można je zaciągnąć na podstawie tego podejścia. Preferowane byłoby zatem prostsze wdrożenie i utrzymanie rozwiązania.

Ja jestem po stronie programistów, więc mogę jedynie proponować podejścia i nie musiałem zajmować się administracją. Więc bez czasu w siodle administracyjnym, waham się powiedzieć, że jedno podejście byłoby lepsze od drugiego - wszystko zgodnie z dokumentami wygląda świetnie. Jestem gotów podążać w każdym kierunku, który sugerujecie, ponieważ, jak widzę, sprawi, że będę bardziej wartościowy jako profesjonalista DB. Mam taczkę, ale nie ma peleryny holokaustu .

Powiązane pytania

Edycje

Aby odpowiedzieć na pytania @ onpnt

Akceptacja opóźnienia danych

Użytkownicy przeglądają obecnie dane opóźnione do 24 godzin. Dane są aktualne dopiero od 2200

Ilość danych zmienia się w danej minucie, godzinie i dniu Nie wiem, jak to skwantyfikować. Godziny pracy, może setki zmian na godzinę. Przetwarzanie nocne, miliony wierszy na dzień roboczy

Łączność z urządzeniem pomocniczym

Sieć wewnętrzna, oddzielny wirtualny host i dedykowana pamięć masowa

Przeczytaj wymagania dotyczące drugiej instancji

Grupa Windows będzie miała dostęp do odczytu do wszystkich dodatkowych tabel

Czas działania drugiej instancji

Nie ma silnej definicji wymogu czasu działania. Użytkownicy chcą, aby był zawsze dostępny, ale czy są skłonni za to zapłacić, prawdopodobnie nie tyle. Realistycznie rzecz biorąc, powiedziałbym, że wystarczyłyby 23 godziny dziennie.

Zmiany w istniejącym schemacie i wszystkich obiektach

Rzadkie modyfikacje, może raz na kwartał dla obiektów tabeli. Może raz w miesiącu dla obiektów kodu.

Bezpieczeństwo

Brak specjalnych potrzeb bezpieczeństwa. Uprawnienia do produkcji będą pasować do uprawnień do kopii. Chociaż, gdy o tym myślę, moglibyśmy cofnąć użytkownikom dostęp do odczytu dla prod i pozwolić im tylko na odczytanie kopii ... Nie jest to jednak wymagane.

@darin cieśnina

Cofanie się do migawki może być opcją, ale myślę, że był jakiś powód, dla którego go nie realizowali. Sprawdzę u administratora

@cfradenburg

Moje założenie było takie, że zastosowalibyśmy tylko jedno z tych podejść, ale to dobrze, że przywracanie przerwałoby „inne” technologie synchronizacji. Prowadzą badania przy użyciu magii migawek EMC. Jak to opisał administrator, zrobiliby migawkę o 1900 roku i przeprowadzili migrację obrazu do strefy wtórnej. To powinno zakończyć się do 2200, a następnie wykonają odłączenie i ponowne podłączenie dodatkowej bazy danych.

Zakończyć

2012-10-29 Oceniliśmy magię migawek EMC i kilka innych opcji replikacji, ale DBA zdecydowali, że najlepiej wymyślą Mirroring. Przegłosowałem odpowiedzi, ponieważ wszyscy pomogli i dali mi wiele opcji, a także „zadanie domowe” do zbadania.

billinkc
źródło
Czy można cofnąć migawkę bazy danych, gdy występuje problem? To powinno zabrać cię z powrotem do miejsca, w którym znajdował się db, gdy wykonano migawkę. Następnie możesz zrobić nową migawkę, naprawić problem z przetwarzaniem i kontynuować. W przypadku wysyłki dziennika W / R / T niekoniecznie musisz przywracać kopie zapasowe dziennika do kopii przez cały dzień, w tym samym czasie, gdy je wykonujesz. Możesz pozwolić im gromadzić się, a następnie przywrócić je w kilka. Minimalizuje to przerwy w kopiowaniu przez użytkownika, ponieważ można to zrobić wolniej, a to oznacza, że ​​kopia nie będzie się zmieniać przez cały dzień.
cieśnina darina
Jeśli musisz okresowo przywracać bazę danych, jakakolwiek szybka metoda będzie wymagać ponownej inicjalizacji. Jeśli przywracasz kopie zapasowe DIFF lub LOG, konieczne będzie pełne przywrócenie, aby ponownie zsynchronizować bazy danych. To samo dotyczy kopii lustrzanej i nie jestem pewien co do replikacji. Najlepszym rozwiązaniem może być sprawdzenie, co EMC może dla Ciebie zrobić. Wiem, że kiedy rozmawiałem z NetApp, mają rozwiązanie, które zrobiłoby to, czego szukasz, ale jest to narzędzie dodatkowe.
cfradenburg

Odpowiedzi:

6

Zmodyfikowanie ich struktury jest zasadniczo niezadowolone

Replikacja jest bardziej niż prawdopodobna i wcześniej wyrzucę synchronizację. (z rzeczywistych testów transacitonal w rzeczywistym życiu na Sync Framework)

Jeśli wyjątek to opóźnienie danych wynoszące 3-4 godziny, wysyłanie dziennika będzie prawdopodobnie najlepszym rozwiązaniem dla kopii tylko do odczytu. Ale ile zmian dzieje się w dzienniku? przekonaj się, że monitoruj go, aby zobaczyć, jak szybko i ile musisz przeforsować.

Jeśli nie możesz przejść do kopii lustrzanej lub uaktualnić do wersji korporacyjnej z 2012 r., Jest to możliwe, chociaż byłaby to dobra strategia, gdybyś mógł przejść do wersji Enterprise, jeśli nie jest w niej zainstalowany.

SSIS nie ma na celu po prostu zrzucenia danych, ale może to zrobić. Jednak patrzysz na zbyt wiele w zakresie transformacji wyszukiwania, a zadanie byłoby kosztowne pod względem czasu i zasobów. Chociaż, jak powiedziałem, może to zrobić.

Naprawdę nastąpi wyraźne zawężenie wyborów oparte na udzieleniu odpowiedzi na kilka pytań

  • Akceptacja opóźnienia danych
  • Wielkość zmiany danych w danej minucie, godzinie i dniu Łączność z urządzeniem pomocniczym
  • Przeczytaj wymagania dotyczące drugiej instancji
  • Czas działania drugiej instancji
  • Zmiany w istniejącym schemacie i wszystkich obiektach
  • Bezpieczeństwo
onpnt
źródło
4

To będzie jedna z tych rzeczy, które musisz spróbować, aby znaleźć to, co działa najlepiej. Replikacja może być trudna, więc chociaż może nie być bezpośredniego kosztu pieniężnego, będzie to związane z utrzymaniem administracyjnym.

Aby rozwinąć Przesyłanie dzienników, nie trzeba przywracać dzienników co 15-30 minut. Jeśli chcesz, możesz to robić co cztery godziny lub raz dziennie. Rozwiązaniem podobnym do tego, które wdrożyłem, jest cotygodniowa pełna kopia zapasowa i przywracanie do bazy danych raportowania (co może chwilę potrwać i zdarza się w weekend). W ciągu tygodnia tworzone są kopie zapasowe różnicowe, które są przywracane do bazy danych raportowania co noc. Użytkownicy muszą zostać uruchomieni przed przywróceniem, ale ponieważ baza danych raportowania jest aplikacją godzin roboczych, nie ma z tym problemu. Dane są od dawna, co nie powinno stanowić problemu w oparciu o twoje wymagania.

Aby użyć do tego kopii lustrzanej bazy danych, musisz kupić Enterprise, aby móc korzystać z migawek, jeśli jeszcze nie korzystasz z Enterprise. Nie zapewniłoby również 100% aktualności danych, ponieważ migawka musi zostać usunięta (co oznacza, że ​​wszyscy użytkownicy muszą być wyłączeni), a następnie ponownie utworzona, aby uzyskać nowe dane. Byłoby to jednak mniej czasu niż przywracanie dziennika lub metoda opisana powyżej.

Jeśli aktualizacja do SQL 2012 jest opcją, możliwe jest skonfigurowanie pomocniczego tylko do odczytu, który będzie aktualizowany w podstawowej bazie danych. Wspominam o tym tylko dlatego, że prawdopodobnie będzie to najbardziej płynne rozwiązanie.

cfradenburg
źródło
4

O ile ludzie szarpią się na replikacji transakcyjnej, to brzmi jak dobre dopasowanie do twojej sytuacji. Kilka uwag:

  1. Nie musisz inicjować subskrybenta migawką. Możesz zrobić kopię zapasową wydawcy i zainicjować ją.
  2. Możesz wstrzymać dostarczanie poleceń subskrybentowi, po prostu zatrzymując zadanie dystrybucji (jest to po prostu normalne zadanie agenta SQL u dystrybutora lub subskrybenta, w zależności od tego, czy skonfigurowano je odpowiednio jako subskrypcję push lub pull). Pamiętaj tylko o swoim utrzymaniu u dystrybutora, abyś miał wystarczająco dużo historii, abyś mógł go nadrobić.
  3. Możesz zmienić indeksowanie u subskrybenta, aby dostosować się do obciążeń, które zostaną tam wykonane (przypuszczalnie typ raportowania) zamiast akceptować indeksowanie od wydawcy (prawdopodobnie typ OLTP), jeśli chcesz.
Ben Thul
źródło