Part of #4511, the sync of plan analysis changes from PerformanceStudio (PS) to PerformanceMonitor (PM).
Rule 5 (PlanAnalyzer.cs:527) checks node.HasActualStats && node.EstimateRows > 0 && !node.Lookup, but not ActualExecutions. An operator in a branch that never ran returns 0 rows because it never executed. The rule then reports a Row Estimate Mismatch, but 0 rows from an operator that never ran says nothing about the estimate.
erikdarlingdata/PerformanceStudio@cc18844 (erikdarlingdata/PerformanceStudio#577) adds node.ActualExecutions > 0 to the condition. erikdarlingdata/PerformanceStudio@de1cac6 then removes the ActualExecutions > 0 ? ActualExecutions : 1 fallback inside the rule, because the new condition makes it unreachable. In PM, the fallback is at line 549.
Add the condition at line 527 and remove the fallback at line 549. Size S.
At 1899737f. dev has no later change to PerformanceMonitor.PlanAnalysis.
Part of #4511, the sync of plan analysis changes from PerformanceStudio (PS) to PerformanceMonitor (PM).
Rule 5 (
PlanAnalyzer.cs:527) checksnode.HasActualStats && node.EstimateRows > 0 && !node.Lookup, but notActualExecutions. An operator in a branch that never ran returns 0 rows because it never executed. The rule then reports a Row Estimate Mismatch, but 0 rows from an operator that never ran says nothing about the estimate.erikdarlingdata/PerformanceStudio@cc18844 (erikdarlingdata/PerformanceStudio#577) adds
node.ActualExecutions > 0to the condition. erikdarlingdata/PerformanceStudio@de1cac6 then removes theActualExecutions > 0 ? ActualExecutions : 1fallback inside the rule, because the new condition makes it unreachable. In PM, the fallback is at line 549.Add the condition at line 527 and remove the fallback at line 549. Size S.
At
1899737f.devhas no later change toPerformanceMonitor.PlanAnalysis.