Skip to content

Commit 3db895c

Browse files
Cap query/procedure/query store grid results to TOP 500
GetQueryStatsAsync, GetProcedureStatsAsync, and GetQueryStoreDataAsync were returning unbounded result sets. With 49 databases and 742K rows in query_stats over 3 days, the GROUP BY with plan XML could produce thousands of rows and timeout after 120 seconds. TOP 500 ordered by avg CPU desc is plenty for a grid view and prevents the query from consuming unbounded memory on large installations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 523a91c commit 3db895c

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

Dashboard/Services/DatabaseService.QueryPerformance.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,7 @@ GROUP BY
11101110
qs.query_hash,
11111111
qs.creation_time
11121112
)
1113-
SELECT
1113+
SELECT TOP (500)
11141114
database_name = pl.database_name,
11151115
query_hash = CONVERT(nvarchar(20), pl.query_hash, 1),
11161116
object_type = MAX(pl.object_type),
@@ -1345,7 +1345,7 @@ GROUP BY
13451345
ps.object_name,
13461346
ps.cached_time
13471347
)
1348-
SELECT
1348+
SELECT TOP (500)
13491349
database_name = pl.database_name,
13501350
object_id = MAX(pl.object_id),
13511351
object_name = QUOTENAME(pl.schema_name) + N'.' + QUOTENAME(pl.object_name),
@@ -1520,7 +1520,7 @@ public async Task<List<QueryStoreItem>> GetQueryStoreDataAsync(int hoursBack = 2
15201520
string query = @"
15211521
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
15221522
1523-
SELECT
1523+
SELECT TOP (500)
15241524
database_name = qsd.database_name,
15251525
query_id = qsd.query_id,
15261526
execution_type_desc = MAX(qsd.execution_type_desc),

0 commit comments

Comments
 (0)