Skip to content

Commit da2df88

Browse files
Merge pull request #179 from erikdarlingdata/feature/web-blazor-wasm
Gate XML MemoryGrantWarning at 1 GB threshold
2 parents b77f57c + 19a008b commit da2df88

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

src/PlanViewer.Core/Services/ShowPlanParser.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1665,20 +1665,26 @@ private static List<PlanWarning> ParseWarningsFromElement(XElement warningsEl)
16651665
});
16661666
}
16671667

1668-
// Memory grant warning
1668+
// Memory grant warning (from plan XML) — gate at 1 GB to avoid noise on small grants
1669+
// All values are in KB, consistent with MemoryGrantInfo element
16691670
var memWarnEl = warningsEl.Element(Ns + "MemoryGrantWarning");
16701671
if (memWarnEl != null)
16711672
{
16721673
var kind = memWarnEl.Attribute("GrantWarningKind")?.Value ?? "Unknown";
16731674
var requested = ParseLong(memWarnEl.Attribute("RequestedMemory")?.Value);
16741675
var granted = ParseLong(memWarnEl.Attribute("GrantedMemory")?.Value);
16751676
var maxUsed = ParseLong(memWarnEl.Attribute("MaxUsedMemory")?.Value);
1676-
result.Add(new PlanWarning
1677+
if (granted >= 1048576) // 1 GB in KB
16771678
{
1678-
WarningType = "Memory Grant",
1679-
Message = $"{kind}: Requested {requested:N0} KB, Granted {granted:N0} KB, Used {maxUsed:N0} KB",
1680-
Severity = PlanWarningSeverity.Warning
1681-
});
1679+
var grantedMB = granted / 1024.0;
1680+
var usedMB = maxUsed / 1024.0;
1681+
result.Add(new PlanWarning
1682+
{
1683+
WarningType = "Memory Grant",
1684+
Message = $"{kind}: Granted {grantedMB:N0} MB, Used {usedMB:N0} MB",
1685+
Severity = PlanWarningSeverity.Warning
1686+
});
1687+
}
16821688
}
16831689

16841690
// Implicit conversions

tests/PlanViewer.Core.Tests/PlanAnalyzerTests.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,14 +173,15 @@ public void Rule08_ParallelSkew_DetectedOnHighRowScan()
173173
// ---------------------------------------------------------------
174174

175175
[Fact]
176-
public void Rule09a_ExcessiveMemoryGrant_DetectedInLazySpoolPlan()
176+
public void Rule09a_ExcessiveMemoryGrant_SmallGrantSuppressed()
177177
{
178+
// lazy_spool_plan has a 1 MB grant — well under the 1 GB threshold.
179+
// The XML MemoryGrantWarning should be suppressed (not worth surfacing).
178180
var plan = PlanTestHelper.LoadAndAnalyze("lazy_spool_plan.sqlplan");
179-
// The parser may surface this as a plan-level warning from XML
180181
var allWarnings = PlanTestHelper.AllWarnings(plan);
181182

182-
Assert.Contains(allWarnings, w =>
183-
w.WarningType.Contains("Memory Grant") || w.WarningType == "Excessive Memory Grant");
183+
Assert.DoesNotContain(allWarnings, w =>
184+
w.WarningType == "Memory Grant");
184185
}
185186

186187
// ---------------------------------------------------------------

0 commit comments

Comments
 (0)