diff --git a/Lite/Services/RemoteCollectorService.QueryStore.cs b/Lite/Services/RemoteCollectorService.QueryStore.cs index 53f8162..d466c47 100644 --- a/Lite/Services/RemoteCollectorService.QueryStore.cs +++ b/Lite/Services/RemoteCollectorService.QueryStore.cs @@ -44,27 +44,18 @@ DECLARE db_check CURSOR LOCAL FAST_FORWARD FOR SELECT /* PerformanceMonitorLite */ d.name FROM sys.databases AS d + LEFT JOIN sys.dm_hadr_database_replica_states AS drs + ON d.database_id = drs.database_id + AND drs.is_local = 1 WHERE d.database_id > 4 AND d.database_id < 32761 AND d.state_desc = N'ONLINE' AND d.name <> N'PerformanceMonitor' - AND d.database_id NOT IN - ( - SELECT - d2.database_id - FROM sys.databases AS d2 - JOIN sys.availability_replicas AS r - ON d2.replica_id = r.replica_id - WHERE NOT EXISTS - ( - SELECT - 1/0 - FROM sys.dm_hadr_availability_group_states AS s - WHERE s.primary_replica = r.replica_server_name - ) - AND r.secondary_role_allow_connections_desc = N'READ_ONLY' - AND r.replica_server_name = @@SERVERNAME - ) + AND + ( + drs.database_id IS NULL /*not in any AG*/ + OR drs.is_primary_replica = 1 /*primary replica*/ + ) OPTION(RECOMPILE); OPEN db_check; diff --git a/Lite/Services/RemoteCollectorService.ServerConfig.cs b/Lite/Services/RemoteCollectorService.ServerConfig.cs index b0f325f..4e32c6b 100644 --- a/Lite/Services/RemoteCollectorService.ServerConfig.cs +++ b/Lite/Services/RemoteCollectorService.ServerConfig.cs @@ -332,27 +332,18 @@ private async Task CollectDatabaseScopedConfigAsync(ServerConnection server SELECT d.name FROM sys.databases AS d +LEFT JOIN sys.dm_hadr_database_replica_states AS drs + ON d.database_id = drs.database_id + AND drs.is_local = 1 WHERE (d.database_id > 4 OR d.database_id = 2) AND d.database_id < 32761 AND d.name <> N'PerformanceMonitor' AND d.state_desc = N'ONLINE' -AND d.database_id NOT IN - ( - SELECT - d2.database_id - FROM sys.databases AS d2 - JOIN sys.availability_replicas AS r - ON d2.replica_id = r.replica_id - WHERE NOT EXISTS - ( - SELECT - 1/0 - FROM sys.dm_hadr_availability_group_states AS s - WHERE s.primary_replica = r.replica_server_name - ) - AND r.secondary_role_allow_connections_desc = N'READ_ONLY' - AND r.replica_server_name = @@SERVERNAME - ) +AND +( + drs.database_id IS NULL /*not in any AG*/ + OR drs.is_primary_replica = 1 /*primary replica*/ +) ORDER BY d.name OPTION(RECOMPILE);"; diff --git a/install/09_collect_query_store.sql b/install/09_collect_query_store.sql index 6794ea9..769ccfd 100644 --- a/install/09_collect_query_store.sql +++ b/install/09_collect_query_store.sql @@ -299,28 +299,19 @@ BEGIN SELECT d.name FROM sys.databases AS d + LEFT JOIN sys.dm_hadr_database_replica_states AS drs + ON d.database_id = drs.database_id + AND drs.is_local = 1 WHERE d.state_desc = N'ONLINE' AND d.database_id > 4 AND d.is_read_only = 0 AND d.name <> N'PerformanceMonitor' AND d.database_id < 32761 /*exclude contained AG system databases*/ - AND d.database_id NOT IN - ( - SELECT - d2.database_id - FROM sys.databases AS d2 - JOIN sys.availability_replicas AS r - ON d2.replica_id = r.replica_id - WHERE NOT EXISTS - ( - SELECT - 1/0 - FROM sys.dm_hadr_availability_group_states AS s - WHERE s.primary_replica = r.replica_server_name - ) - AND r.secondary_role_allow_connections_desc = N'READ_ONLY' - AND r.replica_server_name = @@SERVERNAME - ) + AND + ( + drs.database_id IS NULL /*not in any AG*/ + OR drs.is_primary_replica = 1 /*primary replica*/ + ) OPTION(RECOMPILE); OPEN @db_check_cursor; diff --git a/install/39_collect_database_configuration.sql b/install/39_collect_database_configuration.sql index 1bac443..f6a4202 100644 --- a/install/39_collect_database_configuration.sql +++ b/install/39_collect_database_configuration.sql @@ -161,27 +161,18 @@ BEGIN database_id = d.database_id, database_name = d.name FROM sys.databases AS d + LEFT JOIN sys.dm_hadr_database_replica_states AS drs + ON d.database_id = drs.database_id + AND drs.is_local = 1 WHERE d.database_id > 4 AND d.name != DB_NAME() AND d.state_desc = N'ONLINE' AND d.database_id < 32761 /*exclude contained AG system databases*/ - AND d.database_id NOT IN - ( - SELECT - d2.database_id - FROM sys.databases AS d2 - JOIN sys.availability_replicas AS r - ON d2.replica_id = r.replica_id - WHERE NOT EXISTS - ( - SELECT - 1/0 - FROM sys.dm_hadr_availability_group_states AS s - WHERE s.primary_replica = r.replica_server_name - ) - AND r.secondary_role_allow_connections_desc = N'READ_ONLY' - AND r.replica_server_name = @@SERVERNAME - ) + AND + ( + drs.database_id IS NULL /*not in any AG*/ + OR drs.is_primary_replica = 1 /*primary replica*/ + ) ORDER BY d.name OPTION (RECOMPILE);