sys.dm_hadr_availability_group_states zwraca bieżący stan i kondycję poszczególnych grup dostępności.
Do czego służy sys.dm_hadr_availability_group_states
sys.dm_hadr_availability_group_states to dynamiczny widok zarządzania dostępny w Microsoft SQL Server dla funkcji Always On Availability Groups. Zwraca bieżące informacje o stanie grup dostępności, które mają co najmniej jedną replikę dostępności na lokalnym wystąpieniu SQL Server. Wynik nie jest historycznym dziennikiem zdarzeń. Pokazuje stan obserwowany w chwili wykonania zapytania, dlatego do analizy zmian w czasie trzeba okresowo zapisywać rezultaty albo korzystać z dodatkowego monitoringu.
Każdy wiersz odpowiada jednej grupie dostępności widzianej z lokalnego wystąpienia. Widok służy do szybkiej oceny, czy grupa ma rozpoznaną replikę podstawową, czy proces odzyskiwania replik jest zakończony oraz czy ogólny stan synchronizacji jest prawidłowy. Nie pokazuje jednak szczegółów każdej bazy danych ani wszystkich przyczyn problemów. Do pełnej diagnostyki trzeba połączyć go z innymi widokami Always On, między innymi sys.dm_hadr_availability_replica_states oraz sys.dm_hadr_database_replica_states.
Kolumny i znaczenie zwracanych wartości
Kolumna group_id zawiera identyfikator grupy dostępności typu uniqueidentifier. Można go połączyć z kolumną group_id w widoku katalogowym sys.availability_groups, aby odczytać nazwę grupy. primary_replica wskazuje nazwę wystąpienia SQL Server obsługującego aktualną replikę podstawową. Wartość NULL oznacza, że lokalne wystąpienie nie jest podstawową repliką i nie może uzyskać tej informacji z klastra WSFC.
primary_recovery_health i secondary_recovery_health mają typ tinyint. Wartość 0 oznacza, że odzyskiwanie jest w toku, a wartość 1 — że replika jest online. Odpowiadające im kolumny tekstowe primary_recovery_health_desc oraz secondary_recovery_health_desc zwracają odpowiednio ONLINE_IN_PROGRESS albo ONLINE. Na replice pomocniczej primary_recovery_health może być NULL, ponieważ stan podstawowej repliki nie jest lokalnie oceniany w taki sam sposób. Na replice podstawowej secondary_recovery_health jest NULL. NULL w tych kolumnach nie należy automatycznie traktować jako awarii, ponieważ może wynikać z roli wystąpienia w grupie.
synchronization_health jest zagregowaną oceną synchronizacji wszystkich replik dostępności w grupie. Wartość 0 oznacza NOT_HEALTHY, czyli brak repliki ze zdrowym stanem synchronizacji. Wartość 1, opisana jako PARTIALLY_HEALTHY, oznacza, że zdrowa jest tylko część replik. Wartość 2, czyli HEALTHY, oznacza zdrowy stan synchronizacji każdej repliki uwzględnionej w agregacji. Pole tekstowe synchronization_health_desc przedstawia ten sam wynik w postaci opisowej.
Przykładowe zapytanie i interpretacja wyniku
Podstawowy odczyt można wykonać zapytaniem: SELECT group_id, primary_replica, primary_recovery_health_desc, secondary_recovery_health_desc, synchronization_health_desc FROM sys.dm_hadr_availability_group_states;. Jeżeli potrzebna jest nazwa grupy, wynik można połączyć z sys.availability_groups po identyfikatorze group_id. Przykładowo zapytanie może zwracać ag.name, nazwę wystąpienia podstawowego oraz opis zbiorczego stanu synchronizacji.
Stan HEALTHY nie oznacza, że każda baza działa bez opóźnień, że aplikacja może połączyć się z listenerem ani że nie występują błędy sieciowe. Jest to podsumowanie stanu synchronizacji replik. Gdy wynik wynosi PARTIALLY_HEALTHY, należy sprawdzić poszczególne repliki oraz bazy, aby ustalić, która replika nie osiąga wymaganego stanu. Dla replik w trybie synchronicznego zatwierdzania oczekiwany jest stan zsynchronizowany, natomiast dla replik w trybie asynchronicznym prawidłowa ocena może oznaczać stan synchronizowania.
Ten widok jest przydatny w skryptach kontrolnych, raportach monitoringu i diagnostyce po przełączeniu awaryjnym. Warto porównywać primary_replica z oczekiwanym wystąpieniem, obserwować zmianę pól odzyskiwania podczas uruchamiania usługi oraz alarmować dla wartości synchronizacji 0 lub 1. Sam odczyt nie wykonuje przełączenia awaryjnego, nie zmienia konfiguracji grupy i nie naprawia synchronizacji.
Uprawnienia i ograniczenia diagnostyczne
W SQL Server 2019 i wcześniejszych wersjach odczyt tego widoku wymaga uprawnienia serwerowego VIEW SERVER STATE. W SQL Server 2022 i nowszych wersjach wymagane jest VIEW SERVER PERFORMANCE STATE. Brak odpowiedniego uprawnienia może uniemożliwić wykonanie zapytania albo spowodować, że użytkownik monitorujący nie uzyska oczekiwanych danych. Uprawnienia należy nadawać kontu monitorującym zgodnie z przyjętym modelem bezpieczeństwa SQL Server.
Podczas diagnostyki należy ustalić, na którym wystąpieniu wykonano zapytanie. Ten sam mechanizm Always On może być widziany z perspektywy repliki podstawowej albo pomocniczej, a część kolumn będzie wtedy miała wartości NULL zgodnie z rolą lokalnej repliki. Jeżeli problem dotyczy konkretnej bazy, trzeba przejść do sys.dm_hadr_database_replica_states i sprawdzić między innymi stan synchronizacji, stan bazy oraz ewentualne opóźnienia. Jeżeli problem dotyczy komunikacji między wystąpieniami, pomocne są dane o stanie połączenia replik, konfiguracji endpointów i kondycji klastra WSFC. Rzetelna ocena wymaga więc traktowania sys.dm_hadr_availability_group_states jako punktu wyjścia do dalszej analizy, a nie jako kompletnego raportu o całym środowisku.