sys.dm_hadr_internal_* and the Other Availability Group Additions in SQL Server 2025

You upgrade an availability group monitoring script for SQL Server 2025, and two new columns appear. The documented views now expose is_internal, and the catalog has two new sys.dm_hadr_internal_* dynamic management views (DMVs). The name includes internal, so I do not treat these views as stable monitoring interfaces.

A woman DBA with a lantern stands on a stone bridge between two lighthouses, looking at a new teal lamp added to one of them.

This post is part of the Undocumented Changes in SQL Server 2022 and 2025 series. The contents page lists every part in order.

I am comparing SQL Server 2022 CU25 with SQL Server 2025 CU9 for the first post on SQL Server 2025. I am using the same inventory method that started in the first post in this series. CU means cumulative update. RTM means release to manufacturing, the initial release build.

The previous post covered versioned internal tables in SQL Server 2025. This post stays with availability groups and high availability disaster recovery (HADR). Microsoft documents a large SQL Server 2025 availability section, including distributed availability group synchronization, contained distributed availability groups, group commit timing, Universal Communication Service (UCS) flow control, listener IP removal, routing URL changes, TLS 1.3, and backups on secondary replicas.[1] Those documented feature names are where this inventory connects to Microsoft documentation.

The compact count

The 2022 to 2025 diff has four new HADR or availability-group objects: two views, and two extended stored procedures. It also has 47 matching new columns, 2 configuration options, 3 HADR_ wait types, 8 HADR or availability-group Extended Events (XE) events, and 28 related messages. XE means Extended Events. I did not find any new HADR-named latch classes. I also did not find a new HADR spinlock, although SQL Server 2025 still has the older HADR spinlocks already present in the inventory.

Most of that count is support surface around features Microsoft does document elsewhere. The SQL Server 2025 What’s New article documents feature areas such as group commit wait, UCS flow control, distributed availability group synchronization, contained distributed availability groups, and listener IP removal. The inventory shows the catalog and diagnostic names that sit beside those features.[2]

The new internal views

The two new views are sys.dm_hadr_internal_availability_groups and sys.dm_hadr_internal_availability_replicas. Both exist in the SQL Server 2025 RTM and CU9 inventories, and neither exists in the SQL Server 2022 CU25 inventory. I searched the MicrosoftDocs SQL, Azure, and Fabric repositories for their full names and for the names without the sys. prefix. I did not find matches.

On the 2025 instance, a read-only probe showed both views in sys.all_objects. SELECT TOP (0) succeeded for both, and each returned zero rows on that test instance. The documented HADR replica-state DMVs also returned zero rows. The zero-row result is consistent with the instance not hosting an availability group for the probe. It does not prove that the views are unused.

The column lists are the part worth comparing. sys.dm_hadr_internal_availability_groups has 20 columns. Most of them match availability group metadata you already know: group_id, name, failure_condition_level, health_check_timeout, automated_backup_preference, cluster_type, required_synchronized_secondaries_to_commit, sequence_number, and is_contained. The columns that make the internal view different include distributed_availability_group_id and group_database_id.

sys.dm_hadr_internal_availability_replicas has 23 columns. It looks like replica metadata with distributed availability group additions: replica_id, group_id, replica_server_name, endpoint_url, availability_mode, failover_mode, session_timeout, routing URLs, seeding mode, and distributed_availability_group_replica_id.

The internal name matters because Microsoft does not document these views for monitoring use. I do not build monitoring on these views while the documented DMVs can answer the question. The practical part for a DBA is narrower: the columns suggest that the new views relate to distributed availability group membership.

Four columns on documented views

Four of the new columns landed on documented catalog views or DMVs.

View New column Learn page lists it
sys.availability_groups cluster_connection_options No
sys.availability_groups_cluster cluster_connection_options No
sys.dm_hadr_availability_replica_states is_internal Yes
sys.dm_hadr_database_replica_states is_internal Yes

The two is_internal columns are practical. Microsoft’s pages for sys.dm_hadr_availability_replica_states and sys.dm_hadr_database_replica_states list them and mark them as internal use only.[3] If your scripts select explicit column lists from those DMVs, nothing changes. If they use SELECT *, your result shape changed in 2025.

The two cluster_connection_options columns are different. They exist in the 2025 instance, but I did not find them in the Learn pages for sys.availability_groups or sys.availability_groups_cluster that I read.[4] Microsoft does document CLUSTER_CONNECTION_OPTIONS in the CREATE AVAILABILITY GROUP and ALTER AVAILABILITY GROUP areas for strict encryption between Windows Server Failover Cluster and an availability group replica.[5] The mismatch is the finding: the option is documented, but the catalog columns I found are not listed on the view pages.

Configuration, wait types, and XE events

The two configuration options are both new in 2025 when compared to SQL Server 2022 CU25. They also appear in the SQL Server 2025 RTM inventory, so they are not CU9 additions. availability group commit time (ms) has minimum 0, maximum 10, and is dynamic and advanced on the tested instance. max UCS send boxcars has minimum 256, maximum 2048, is advanced, and is not dynamic on the tested instance.

Microsoft documents both options. The availability group commit time (ms) page says the option is available starting with SQL Server 2025 and controls the group commit time in milliseconds for an availability group replica.[6] The max ucs send boxcars page says the option is available starting with SQL Server 2025, and that a SQL Server 2022 registry override existed before the sp_configure option.[7]

The new HADR_ wait types are HADR_GLOBAL_DATABASE_FLOW_CONTROL, HADR_HARDENED_BLOCK, and HADR_SEEDING_QUERY_FORCE_TIMEOUT. They all existed in the 2025 RTM inventory. None appeared in the parsed wait-type table from the sys.dm_os_wait_stats page, and the Always On wait-types article still gives a pattern query for waits with %hadr% rather than documenting these individual names.[8]

The eight new HADR or availability-group XE event names use terms that also appear in the documented 2025 availability features: group-state processing, global flow control, listener IP removal, recovery-fork messages, log replay stats, and activity tracing. I did not find Learn source hits for the eight event names in the SQL, Azure, or Fabric documentation repositories.

Messages label the related features

The message text gives the most direct labels for the related features. Most of the 28 related messages mention distributed availability groups, SQL Managed Instance, internal distributed availability groups, listener IP removal, CLUSTER_CONNECTION_OPTIONS, or sp_mi_dag_repair. One message says, “Availability group commit time has been set to %d millisecond(s).” Two messages mention Managed Instance link operations and custom persistent version store filegroups.

Microsoft’s error-message include files list all 28 IDs that I counted. That is message documentation, not behavioural documentation for the internal views or procedures. sp_mi_dag_repair appears in those message rows, but I did not find a Learn page for the procedure itself. I also did not run sp_mi_dag_check or sp_mi_dag_repair. They are extended stored procedures, and their names and messages suggest state-checking and repair paths for distributed availability groups.[9]

Where I use this

I treat the documented additions as actionable. The new configuration options and the CLUSTER_CONNECTION_OPTIONS syntax are documented SQL Server 2025 availability changes. The two is_internal columns are listed on the DMV pages, and they can matter if your query reads from those DMVs.

I treat the sys.dm_hadr_internal_* views differently. Their column names help explain what changed, but their names and lack of a reference page make them poor dependencies for monitoring code. If a regular DMV or catalog view has the same information, use the documented one first.

Next, I am looking at sp_dw_* and the Trident procedures in SQL Server 2025.

If these is_internal columns or HADR wait types appear in your 2025 monitoring, I want to see the example. Tell me on Bluesky or LinkedIn, and I will update the notes.

References

  1. What’s new in SQL Server 2025 - Microsoft Learn. The availability and disaster recovery section lists the SQL Server 2025 availability group feature additions cited near the start of this post. ↩
  2. What’s new in SQL Server 2025 - Microsoft Learn. Availability section used to map documented SQL Server 2025 feature areas to the supporting inventory names. ↩
  3. sys.dm_hadr_availability_replica_states and sys.dm_hadr_database_replica_states - Microsoft Learn. The documentation source lists is_internal on both pages and marks it internal use only. ↩
  4. sys.availability_groups and sys.availability_groups_cluster - Microsoft Learn. The documentation source checked for the cluster_connection_options column. ↩
  5. Connect with strict encryption - Microsoft Learn. Mentions CLUSTER_CONNECTION_OPTIONS for availability group encryption paths. ↩
  6. Server configuration: availability group commit time (ms) - Microsoft Learn. Documents the SQL Server 2025 configuration option and its range. ↩
  7. Server configuration: max ucs send boxcars - Microsoft Learn. Documents the SQL Server 2025 configuration option and the earlier SQL Server 2022 registry override. ↩
  8. Identify waits associated with availability groups - Microsoft Learn. Provides the Always On availability group wait-type query pattern checked against the new HADR_ wait types. ↩
  9. Database Engine events and errors 19000 to 20999, 31000 to 41399 and 41400 to 49999 - Microsoft Learn. Together these pages list the 28 new message IDs counted in this post. ↩