HADR_SYNC_COMMIT
W naszym otoczeniu zauważamy ciekawy wzór oczekiwania. Mamy trzy repliki; jedna podstawowa, jedna pomocnicza synchronizacja i jedna asynchroniczna pomocnicza w centrum danych, a my właśnie dodaliśmy trzy kolejne repliki ASYNC w innym centrum danych (w odległości około 2400 mil).
Od tego czasu zaczęliśmy zauważać ogromny wzrost HADR_SYNC_COMMIT
oczekiwań. Kiedy patrzymy na aktywne sesje, widzimy szereg COMMIT TRANSACTION
zapytań oczekujących na replikę SYNC
Na zrzucie ekranu wyraźnie widać, że nastąpił skok w HADR_SYNC_COMMIT
oczekiwaniu na 29 czerwca i ostatecznie upuściliśmy „dwie” trzy repliki asynchronicznej w zdalnym centrum danych 1 lipca w południe. To znacznie skróciło czas oczekiwania.
Co sprawdziliśmy do tej pory - kolejka wysyłania dziennika, kolejka Ponów, czas ostatniego zahartowania i czas ostatniego zatwierdzenia w zdalnych replikach. Mamy ciągłe serie małych transakcji w godzinach pracy, dlatego kolejki wysyłania są dość małe w danym znaczniku czasu (gdziekolwiek między 60 KB a 1 MB).
Zdalne repliki są prawie zsynchronizowane, różnica między czasem ostatniego zatwierdzenia a czasem ostatniego zahartowania jest bardzo mała dla każdego pojedynczego lsn w replikach.
Rura sieciowa ma rozmiar 10G i zmieniliśmy rozmiar bufora nadawczego z 256 megabajtów na 2 gigabajty, przy założeniu, że sieć upuszcza pakiety i przesyła je ponownie; tak czy inaczej, to niewiele pomogło.
Zastanawiam się więc, co repliki ASYNC mają wspólnego z HADR_SYNC_COMMIT
oczekiwaniem? Czy replika SYNC nie powinna polegać sama na tym typie oczekiwania, czego tu brakuje?
źródło
Odpowiedzi:
Najpierw opis zdarzenia oczekiwania, którego dotyczy Twoje pytanie, to:
Zagłębiając się w mechanikę tego czekania, masz bloki dziennika przesyłane i hartowane, ale odzyskiwanie nie zostało ukończone na zdalnych serwerach. W takim przypadku i biorąc pod uwagę, że dodałeś dodatkowe repliki, jest oczywiste, że Twój HADR_SYNC_COMMIT może wzrosnąć z powodu wzrostu wymagań dotyczących przepustowości. W tym przypadku Aaron Bertrand ma dokładnie rację w swoich komentarzach do pytania.
Źródło: http://blogs.msdn.com/b/psssql/archive/2013/04/26/alwayson-hadron-learning-series-hadr-sync-commit-vs-writelog-wait.aspx
Zagłębiam się w drugą część pytania na temat tego, jak to oczekiwanie może być związane ze spowolnieniem działania aplikacji. Uważam, że jest to kwestia związku przyczynowego. Patrzysz na rosnące oczekiwania i ostatnią skargę użytkownika i wyciągasz wniosek potencjalnie niepoprawnie, że obydwoje mają związek, gdy wcale tak nie jest. Fakt, że dodałeś pliki tempdb, a twoja aplikacja stała się bardziej wrażliwa na mnie, wskazuje, że mogłeś mieć pewne podstawowe problemy rywalizacji, które mogły zostać zaostrzone przez dodatkowe obciążenie wynikające z domyślnego poziomu izolacji migawki, gdy baza danych znajduje się w grupie dostępności. To mogło mieć niewiele lub nic wspólnego z Twoimi oczekiwaniami HADR_SYNC_COMMIT.
Jeśli chcesz to przetestować, możesz użyć rozszerzonego śledzenia zdarzeń, które sprawdza XEvent hadr_db_commit_mgr_update_harden w podstawowej replice i uzyskać linię bazową. Po ustaleniu linii bazowej możesz ponownie dodawać repliki pojedynczo i sprawdzać zmiany śledzenia. Gorąco zachęcam do korzystania z pliku znajdującego się na woluminie, który nie zawiera żadnych baz danych oraz do ustawienia najazdu i maksymalnego rozmiaru. Dostosuj odpowiednio filtr czasu trwania, aby zbierać zdarzenia pasujące do Twoich oczekiwań, abyś mógł dalej rozwiązywać problemy i korelować je z innymi zespołami, które muszą być zaangażowane.
źródło