Skip to content

Commit ac3d821

Browse files
Merge pull request #360 from erikdarlingdata/fix/ag-secondary-filter-v2
Fix AG secondary filter to skip all inaccessible databases
2 parents 213c529 + ffdbf27 commit ac3d821

4 files changed

Lines changed: 32 additions & 68 deletions

File tree

Lite/Services/RemoteCollectorService.QueryStore.cs

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,27 +44,18 @@ DECLARE db_check CURSOR LOCAL FAST_FORWARD FOR
4444
SELECT /* PerformanceMonitorLite */
4545
d.name
4646
FROM sys.databases AS d
47+
LEFT JOIN sys.dm_hadr_database_replica_states AS drs
48+
ON d.database_id = drs.database_id
49+
AND drs.is_local = 1
4750
WHERE d.database_id > 4
4851
AND d.database_id < 32761
4952
AND d.state_desc = N'ONLINE'
5053
AND d.name <> N'PerformanceMonitor'
51-
AND d.database_id NOT IN
52-
(
53-
SELECT
54-
d2.database_id
55-
FROM sys.databases AS d2
56-
JOIN sys.availability_replicas AS r
57-
ON d2.replica_id = r.replica_id
58-
WHERE NOT EXISTS
59-
(
60-
SELECT
61-
1/0
62-
FROM sys.dm_hadr_availability_group_states AS s
63-
WHERE s.primary_replica = r.replica_server_name
64-
)
65-
AND r.secondary_role_allow_connections_desc = N'READ_ONLY'
66-
AND r.replica_server_name = @@SERVERNAME
67-
)
54+
AND
55+
(
56+
drs.database_id IS NULL /*not in any AG*/
57+
OR drs.is_primary_replica = 1 /*primary replica*/
58+
)
6859
OPTION(RECOMPILE);
6960
7061
OPEN db_check;

Lite/Services/RemoteCollectorService.ServerConfig.cs

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -332,27 +332,18 @@ private async Task<int> CollectDatabaseScopedConfigAsync(ServerConnection server
332332
SELECT
333333
d.name
334334
FROM sys.databases AS d
335+
LEFT JOIN sys.dm_hadr_database_replica_states AS drs
336+
ON d.database_id = drs.database_id
337+
AND drs.is_local = 1
335338
WHERE (d.database_id > 4 OR d.database_id = 2)
336339
AND d.database_id < 32761
337340
AND d.name <> N'PerformanceMonitor'
338341
AND d.state_desc = N'ONLINE'
339-
AND d.database_id NOT IN
340-
(
341-
SELECT
342-
d2.database_id
343-
FROM sys.databases AS d2
344-
JOIN sys.availability_replicas AS r
345-
ON d2.replica_id = r.replica_id
346-
WHERE NOT EXISTS
347-
(
348-
SELECT
349-
1/0
350-
FROM sys.dm_hadr_availability_group_states AS s
351-
WHERE s.primary_replica = r.replica_server_name
352-
)
353-
AND r.secondary_role_allow_connections_desc = N'READ_ONLY'
354-
AND r.replica_server_name = @@SERVERNAME
355-
)
342+
AND
343+
(
344+
drs.database_id IS NULL /*not in any AG*/
345+
OR drs.is_primary_replica = 1 /*primary replica*/
346+
)
356347
ORDER BY d.name
357348
OPTION(RECOMPILE);";
358349

install/09_collect_query_store.sql

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -299,28 +299,19 @@ BEGIN
299299
SELECT
300300
d.name
301301
FROM sys.databases AS d
302+
LEFT JOIN sys.dm_hadr_database_replica_states AS drs
303+
ON d.database_id = drs.database_id
304+
AND drs.is_local = 1
302305
WHERE d.state_desc = N'ONLINE'
303306
AND d.database_id > 4
304307
AND d.is_read_only = 0
305308
AND d.name <> N'PerformanceMonitor'
306309
AND d.database_id < 32761 /*exclude contained AG system databases*/
307-
AND d.database_id NOT IN
308-
(
309-
SELECT
310-
d2.database_id
311-
FROM sys.databases AS d2
312-
JOIN sys.availability_replicas AS r
313-
ON d2.replica_id = r.replica_id
314-
WHERE NOT EXISTS
315-
(
316-
SELECT
317-
1/0
318-
FROM sys.dm_hadr_availability_group_states AS s
319-
WHERE s.primary_replica = r.replica_server_name
320-
)
321-
AND r.secondary_role_allow_connections_desc = N'READ_ONLY'
322-
AND r.replica_server_name = @@SERVERNAME
323-
)
310+
AND
311+
(
312+
drs.database_id IS NULL /*not in any AG*/
313+
OR drs.is_primary_replica = 1 /*primary replica*/
314+
)
324315
OPTION(RECOMPILE);
325316

326317
OPEN @db_check_cursor;

install/39_collect_database_configuration.sql

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -161,27 +161,18 @@ BEGIN
161161
database_id = d.database_id,
162162
database_name = d.name
163163
FROM sys.databases AS d
164+
LEFT JOIN sys.dm_hadr_database_replica_states AS drs
165+
ON d.database_id = drs.database_id
166+
AND drs.is_local = 1
164167
WHERE d.database_id > 4
165168
AND d.name != DB_NAME()
166169
AND d.state_desc = N'ONLINE'
167170
AND d.database_id < 32761 /*exclude contained AG system databases*/
168-
AND d.database_id NOT IN
169-
(
170-
SELECT
171-
d2.database_id
172-
FROM sys.databases AS d2
173-
JOIN sys.availability_replicas AS r
174-
ON d2.replica_id = r.replica_id
175-
WHERE NOT EXISTS
176-
(
177-
SELECT
178-
1/0
179-
FROM sys.dm_hadr_availability_group_states AS s
180-
WHERE s.primary_replica = r.replica_server_name
181-
)
182-
AND r.secondary_role_allow_connections_desc = N'READ_ONLY'
183-
AND r.replica_server_name = @@SERVERNAME
184-
)
171+
AND
172+
(
173+
drs.database_id IS NULL /*not in any AG*/
174+
OR drs.is_primary_replica = 1 /*primary replica*/
175+
)
185176
ORDER BY
186177
d.name
187178
OPTION (RECOMPILE);

0 commit comments

Comments
 (0)