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?