sys.dm_hadr_database_replica_states pokazuje stan synchronizacji poszczególnych baz w grupie dostępności.
Zastosowanie tego DMV w środowisku Always On
sys.dm_hadr_database_replica_states to funkcja dynamicznego zarządzania w Microsoft SQL Server, używana do odczytu bieżącego stanu baz uczestniczących w grupach dostępności Always On. Zwraca informacje dotyczące baz na replikach dostępności obsługiwanych przez lokalną instancję SQL Server. Nie jest to katalog konfiguracji ani historia zdarzeń: wynik przedstawia stan obserwowany w chwili wykonania zapytania.
Zakres zwracanych wierszy zależy od roli instancji. Na replice pomocniczej wynik obejmuje lokalne bazy pomocnicze. Na replice podstawowej widoczne są wiersze dotyczące baz podstawowych oraz dodatkowe informacje o odpowiadających im bazach pomocniczych znanych lokalnej replice. Z tego powodu liczby wierszy nie należy automatycznie utożsamiać z liczbą baz w całej grupie dostępności. Opis składni i kolumn znajduje się w dokumentacji Microsoft SQL Server.
Kolumny opisujące bazę, replikę i synchronizację
Podstawowe identyfikatory to database_id, group_id, replica_id oraz group_database_id. database_id można powiązać z widokiem katalogowym sys.databases. group_id identyfikuje grupę dostępności, a replica_id konkretną replikę w tej grupie. group_database_id identyfikuje daną bazę w obrębie grupy i pozostaje taki sam na replikach, do których baza została dołączona. Kolumna is_local wskazuje, czy wiersz opisuje bazę lokalną dla danej instancji, natomiast is_primary_replica informuje, czy baza znajduje się na replice podstawowej.
Do oceny postępu synchronizacji służą między innymi synchronization_state i synchronization_state_desc. Opis tekstowy może wskazywać między innymi stan NOT SYNCHRONIZING, SYNCHRONIZING albo SYNCHRONIZED. Kolumny synchronization_health i synchronization_health_desc przedstawiają zagregowaną ocenę zdrowia synchronizacji; typowe wartości opisowe to NOT_HEALTHY, PARTIALLY_HEALTHY oraz HEALTHY. Stan zdrowia nie zastępuje jednak analizy przyczyny problemu. Baza może chwilowo synchronizować się prawidłowo, a jednocześnie mieć rosnącą kolejkę dziennika z powodu ograniczeń sieci, zapisu na dysku lub pracy procesu redo.
Interpretacja kolejek dziennika i wartości LSN
log_send_queue_size określa ilość rekordów dziennika oczekujących na wysłanie do repliki pomocniczej, a redo_queue_size ilość dziennika oczekującego na ponowne wykonanie na replice pomocniczej. Uzupełniają je wskaźniki log_send_rate i redo_rate, które pokazują odpowiednio tempo wysyłania oraz tempo wykonywania dziennika. Wartości te należy analizować w czasie, wykonując zapytanie cyklicznie. Pojedynczy odczyt nie rozstrzyga, czy kolejka rośnie, maleje, czy jest tylko chwilowym skutkiem większej transakcji.
Wynik zawiera także kolumny związane z numerami sekwencji dziennika, między innymi last_hardened_lsn, last_received_lsn, last_redone_lsn, last_commit_lsn, end_of_log_lsn oraz truncation_lsn. Nie wszystkie wartości nazwane LSN są rzeczywistymi numerami sekwencji dziennika. W SQL Server część z nich odzwierciedla identyfikator bloku dziennika uzupełniony zerami. Dokumentacja wskazuje, że rzeczywistymi LSN są między innymi last_redone_lsn i last_commit_lsn. Ponadto wartości obserwowane na replice podstawowej mogą przedstawiać ostatnią informację dostępną dla tej repliki, a nie faktycznie najnowszy stan dysku na replice pomocniczej. Dane DMV mogą więc być chwilowo nieaktualne lub niedostępne podczas przełączania ról i innych operacji Always On.
Przykładowe zapytanie i ograniczenia diagnostyczne
Podstawowy odczyt można wykonać zapytaniem SELECT database_id, group_database_id, is_local, is_primary_replica, synchronization_state_desc, synchronization_health_desc, database_state_desc, log_send_queue_size, redo_queue_size, log_send_rate, redo_rate FROM sys.dm_hadr_database_replica_states;. Aby dodać nazwę bazy, wynik łączy się zwykle z sys.databases po kolumnie database_id. Przy interpretacji trzeba zachować ostrożność, ponieważ identyfikator bazy jest unikalny tylko w obrębie konkretnej instancji SQL Server, a nie w całej infrastrukturze.
Dostęp do DMV wymaga odpowiednich uprawnień serwerowych. W SQL Server 2019 i starszych wersjach jest to VIEW SERVER STATE, natomiast w SQL Server 2022 i nowszych wymagane jest VIEW SERVER PERFORMANCE STATE. Brak uprawnienia może skutkować błędem dostępu albo brakiem możliwości uzyskania danych, ale nie oznacza awarii synchronizacji. Sama funkcja nie pokazuje pełnego dziennika zdarzeń, przyczyn rozłączenia ani konfiguracji endpointów. W przypadku niezgodnych statusów należy zestawić jej wynik z widokami Always On dotyczącymi stanu replik i baz, logami SQL Server oraz informacjami o stanie klastra Windows Server Failover Clustering.