Testowałem funkcję grup dostępności w SQL Server 2012 i stwierdzam, że jest około 15 sekund przestoju, gdy serwer główny przechodzi w tryb awaryjny do serwera pomocniczego. Wszystkie zapytania SQL wykonane w tym czasie kończą się niepowodzeniem, dopóki przejście do trybu failover nie zostanie zakończone.
Czy jest jakiś sposób, aby zmniejszyć to do 0 sekund i zapobiec awarii zapytań podczas przejścia w tryb failover?
Innymi słowy, czy istnieje sposób, aby zapytania nie działały podczas przekierowania na serwer główny zamiast awarii ... i czy istnieje sposób na uzyskanie nowych połączeń db, aby natychmiast połączyć się z serwerem pomocniczym zamiast nie połączyć podczas przejścia w tryb failover?
Obecnie mam 2 serwery skonfigurowane w grupie dostępności.
Odpowiedzi:
Nie, nie ma sposobu na przejście w tryb failover z zerowym przestojem za pomocą AlwaysOn (lub, ogólnie rzecz biorąc, w SQL Server). Aby to zrobić, SQL Server, z którym jesteś połączony, musiałby wykonać transfer stanu do innego węzła w połowie zapytania, a ponieważ wiele przełączeń awaryjnych jest nieoczekiwanych, nie jest to możliwe.
Możesz jednak włączyć „Secondary tylko do odczytu” w AlwaysOn, a wtedy czytelnicy mieliby zero przestojów, gdy główny serwer przejdzie w tryb awaryjny - ponieważ i tak łączą się z dodatkową kopią, aby wykonać swoje zapytania SELECT, nie zrobiliby tego nawet zauważ przełączenie awaryjne. Użytkownicy nadal mieliby przerwę z połączeniem „Zapis”, ale przynajmniej część bazy użytkowników byłaby nieprzerwana.
źródło