自 Cumulative Update 9 起,在 SQL Server 2019 中,有两个与可用性组相关的新 DMV:
sys.dm_hadr_cached_replica_states
sys.dm_hadr_cached_database_replica_states
我从What's New & Undocumented in SQL Server 2019 Cumulative Update 9 中了解了它们。
显然,可以从其他现有的 DMV 中找到相同的信息,但是这些新的 DMV 可能会返回一些过时(缓存)的信息,而不是现有 DMV 返回的实时数据。
中的信息sys.dm_hadr_cached_database_replica_states
类似于以下查询返回的信息:
SELECT ag.group_id AS ag_id, ag.name AS ag_name,
ar.replica_id, ar.replica_server_name AS replica_name,
adc.group_database_id AS ag_db_id, adc.database_name AS ag_db_name,
rs.is_local, rs.is_primary_replica, rs.synchronization_state, rs.synchronization_state_desc
FROM sys.dm_hadr_database_replica_states rs
INNER JOIN sys.availability_groups ag ON ag.group_id = rs.group_id
INNER JOIN sys.availability_replicas ar ON ar.replica_id = rs.replica_id
INNER JOIN sys.availability_databases_cluster adc ON adc.group_database_id = rs.group_database_id
中的信息sys.dm_hadr_cached_replica_states
与以下查询返回的信息几乎相似:
SELECT ag.group_id AS ag_id, ag.name AS ag_name,
ar.replica_id, ar.replica_server_name AS replica_name,
ars.is_local, ar.availability_mode, ag.sequence_number,
ars.role, ars.role_desc, ars.synchronization_health, ars.synchronization_health_desc
FROM sys.availability_groups ag
INNER JOIN sys.availability_replicas ar ON ar.group_id = ag.group_id
INNER JOIN sys.dm_hadr_availability_replica_states ars ON ars.replica_id = ar.replica_id
但是,在我的情况下,新的 DMV 总是synchronization_health_desc
在辅助角色的列中返回“PARTIALLY_HEALTHY”,而不是“HEALTHY”或“NOT_HEALTHY”。
有谁知道新DMV的目的是什么?考虑到名称中包含“缓存”一词,新DMV中的信息何时实际更新?
我相信在 SQL Server 2022 的文档完成后,这些问题的答案可能会更加清晰(希望这些新的 DMV 将在那里记录)。但也许有人有更多关于这些 DMV 的信息,甚至可以在此之前对它们有更多的了解。
它实际上是作为缓存数据存在的,因此可以经常命中 DMV 而不会导致某些性能损失(想想编排操作和轮询)。它并不是真正为外部使用而制造的,可能应该隐藏在盒装产品版本中。