Part of #4511, the sync of plan analysis changes from PerformanceStudio (PS) to PerformanceMonitor (PM).
Summary
BenefitScorer.ScoreWaitStats (BenefitScorer.cs:450) computes a benefit percentage for each wait in an actual plan, and it stores the result in stmt.WaitBenefits. No code turns a wait into a PlanWarning. So a query that spent most of its time waiting on I/O or locks gets no finding about the wait.
PerformanceStudio
Port
Port the end state, not the interim file. The descriptions are sparse on purpose, so the port is mostly the mechanism and the severity tiers. Size L. The benefit for external and preemptive waits is too low in PM today, and the issue that links here covers it.
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).
Summary
BenefitScorer.ScoreWaitStats(BenefitScorer.cs:450) computes a benefit percentage for each wait in an actual plan, and it stores the result instmt.WaitBenefits. No code turns a wait into aPlanWarning. So a query that spent most of its time waiting on I/O or locks gets no finding about the wait.PerformanceStudio
EmitWaitStatWarnings. It emits one "Wait: " finding for each wait, with the wait time and count. ForPAGEIOLATCH_*waits, it adds the average time per wait. Severity comes from the benefit: Critical at 50% or more, Warning at 10% or more, else Info.WaitStats.jsonresource, whichWaitStatsConfigreads. It deletes the interimWaitStatsKnowledge.cs.Port
Port the end state, not the interim file. The descriptions are sparse on purpose, so the port is mostly the mechanism and the severity tiers. Size L. The benefit for external and preemptive waits is too low in PM today, and the issue that links here covers it.
At
1899737f.devhas no later change toPerformanceMonitor.PlanAnalysis.