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
/programming/525637/what-are-the-scenarios-for-using-mirroring-log-shipping-replication-and-cluste
/programming/4303020/sync-databases-mirroring-replication-log-shipping
/programming/4303020/sync-databases-mirroring-replication-log-shipping
http://nilebride.wordpress.com/2011/07/24/log-shipping-vs-mirroring-vs-replication/
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.
źródło
Odpowiedzi:
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ń
źródło
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.
źródło
O ile ludzie szarpią się na replikacji transakcyjnej, to brzmi jak dobre dopasowanie do twojej sytuacji. Kilka uwag:
źródło