Performance Studio 1.31: suppress one finding by query hash, and own CPU that adds up
1 hour ago
Performance Studio 1.31 lets you set aside a single finding for one query, with a reason, and keep it in the report. It also fixes an operator's own CPU when batch mode operators sit below it. And it pins two vulnerable packages that arrived through other dependencies.
Ask about this presentation
Chapters
Show transcriptHide transcript
Performance Studio 1.31 lets you set aside a single finding for one query, with a reason, and keep it in the report. It also fixes an operator's own CPU when batch mode operators sit below it. And it pins two vulnerable packages that arrived through other dependencies.
Suppressions go in .planview.json. Each one names a statement by its query hash, then a rule number, or a warning type for warnings SQL Server writes itself. An operator is optional, and part of its label is enough. A reason is required. The CLI and the desktop app both read the file.
A suppression deletes nothing. The text output tags the finding with its reason, the HTML report shows a badge, and the JSON marks it suppressed. It just stops counting: it leaves the warning totals, and the summary reports it in a new suppressed warnings count. The desktop app counts the same way.
A suppression missing its hash, its rule or type, or its reason stops the command with one line naming the file and the entry, and exit code 1. A malformed or unreadable file gets one line too, instead of a crash. The desktop app opens the plan with the defaults and shows the message in the toolbar. One limit: the MCP server doesn't read this file.
Batch mode operators report their own CPU, not a running total. So for a row mode Stream Aggregate above a batch Sort, subtracting only the Sort's time left the rest of the batch zone on the aggregate: nearly 15 seconds of own CPU, beside about 3 seconds of own elapsed. Subtracting the whole zone gives about 3.1 seconds.
The MCP tool get_expensive_operators uses these own times now. On an actual plan it ranked by elapsed time, which in row mode includes everything underneath, so parents crowded out the operator doing the work. Now it ranks by own time, leaves out exchanges, and matches the CLI's own list. Scripts that read ranked_by will see the new value.
SQL Client pulled in a Pkcs cryptography package with a high severity advisory. It's pinned to version 10, which the planview CLI package now carries. The SSMS extension builds against a patched MessagePack. And builds now fail on any high or critical advisory, transitive packages included.
To upgrade the CLI, run dotnet tool update. The desktop zips are on the releases page. The JSON output only adds fields: a suppressed flag on every warning, a rule number where a rule fired, and a suppressed count in the summary. Tools that read fields by name carry on, and anything that hashes the whole output sees new bytes. That's 1.31: set a finding aside by query hash, and get own CPU that adds up.







