Performance Studio: A Cross-Platform SQL Server Execution Plan Analyzer

You have a slow query. You pull the execution plan in SSMS. You stare at the arrows. Some are thick, some are thin. There’s a yellow triangle somewhere. You’re pretty sure the problem is “in there,” but translating a ShowPlan XML tree into actionable tuning advice requires experience that takes years to build.
Performance Studio is a free, open-source execution plan analyzer built by Erik Darling of Darling Data. It parses your .sqlplan files, runs 30 analysis rules against the plan tree, and tells you what’s actually wrong – with severity ratings, benefit estimates, and actionable advice. MIT-licensed. No telemetry. Runs on Windows, macOS, and Linux.
I’ve known Erik for years, and his video training is top-notch – well crafted, practical, and genuinely helpful for any working SQL Server DBA. But this review is based on the code, not the friendship. I went through the repository and here’s what I found.
Four Ways to Use It
Performance Studio isn’t just a desktop app. It ships in four forms:
- Desktop GUI (Avalonia 11, cross-platform) – drag and drop
.sqlplanfiles, connect to live servers, browse Query Store, compare plans side by side - CLI (
planview analyze) – batch-process plan files from the command line with JSON or text output, suitable for CI/CD pipelines - SSMS Extension (Windows only) – right-click “Open in Performance Studio” from any plan in SSMS 18-22
- MCP Server (built into the GUI) – 13 tools for Claude Code, GitHub Copilot, Cursor, or any other MCP-compatible tool
The cross-platform support is significant. SSMS is Windows-only. If you’re a DBA who works on a Mac (it happens) or your development environment is Linux, this gives you native execution plan analysis without a Windows VM.
The 30-Rule Analysis Engine
The heart of Performance Studio is its PlanAnalyzer, which runs 30 rules against the parsed execution plan tree. Each rule produces warnings at Info, Warning, or Critical severity. Here’s a sampling of what it catches:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Rule What It Detects Severity ---- ---------------------------------------- -------- 2 Eager Index Spool Critical 5 Row Estimate Mismatch (100x+) Critical 7 Sort/Hash/Exchange Spills Warning/Critical 10 Key Lookup / RID Lookup Critical 11 Scan With Predicate Warning/Critical 12 Non-SARGable Predicate Warning 13 Data Type Mismatch (implicit conversion) Warning 20 Local Variables (parameter sniffing) Warning 22 Table Variable (cardinality = 1) Warning 29 Implicit Conversion (seek-blocking) Warning |
These aren’t surface-level pattern matches. The code has real analytical depth:
- Rule 5 (Row Estimate Mismatch) normalizes per-execution actuals, skips key lookups where per-execution estimates are misleading, and calls
AssessEstimateHarm()to only fire when the bad estimate causes observable harm. - Rule 8 (Parallel Skew) adjusts its threshold based on DOP (60% at DOP 2 vs. 50% at higher DOP), filters the coordinator thread, and explicitly handles batch mode sort behavior where all output lands on one thread by design.
- Rule 12 (Non-SARGable Predicate) uses multi-part bracket notation detection to distinguish function calls on the column side vs. the parameter side of predicates. It also handles bitmap filter
PROBE()expressions that look like residual predicates but aren’t. - Rule 3 (Serial Plan) distinguishes 29 specific
NonParallelPlanReasonvalues and maps them to actionable vs. informational severity. It even checks whether a MaxDOP 1 hint is in the query text vs. a server-level setting.
A second-pass BenefitScorer assigns each warning a MaxBenefitPercent – the theoretical maximum percentage of elapsed time you could save by addressing that specific finding. This helps you prioritize: a Critical warning on a 2ms operation is less urgent than a Warning on an operation consuming 80% of your query’s runtime.
Query Store Integration
Performance Studio can connect to a live SQL Server, browse Query Store, and fetch historical execution plans for analysis. You can filter by query_id, plan_id, query hash, plan hash, or module name (with wildcards). Plans fetched from Query Store are automatically parsed and loaded into the analyzer for immediate investigation.
This closes a common workflow gap. Previously, getting a Query Store plan into a tool for analysis meant exporting XML, saving to a file, and opening it. Here you just browse, click, and analyze.
Plan Sharing
The repository includes a PlanShare server – an ASP.NET Core API backed by SQLite that lets you share execution plans with colleagues via URL. Plans have configurable TTL (1-365 days), rate limiting, and privacy-preserving analytics (SHA256 visitor hashing, referrer domain-only stripping). No PII stored.
MCP Server for AI Analysis
Like its companion tool Performance Monitor, Performance Studio embeds an MCP server (localhost only, disabled by default). The 13 tools give an LLM structured access to loaded plans:
analyze_plan– full JSON analysis with statements, warnings, and operator treeget_plan_warnings– filtered by severityget_missing_indexes– with impact scores and ready-to-run CREATE INDEX statementsget_expensive_operators– top N by elapsed time or cost percentagecompare_plans– side-by-side cost, runtime, I/O, and wait diffget_repro_script– paste-readysp_executesqlreproduction scriptget_query_store_top– fetch and auto-analyze top queries from Query Store
Being able to say “analyze this plan and explain the top three problems” to Claude Code or GitHub Copilot, with Performance Studio providing structured data rather than raw XML, is a genuinely useful workflow.
The Code Is Clean
The C# codebase targets .NET 10 with modern idioms throughout: file-scoped namespaces, nullable enabled, pattern matching, switch expressions, record types. The ShowPlanParser and PlanAnalyzer are split into focused partial class files (5 and 6 respectively), keeping each file manageable.
The CONTRIBUTING.md says “No unnecessary abstractions – keep it simple and direct,” and the code delivers: the GUI uses code-behind rather than MVVM or ReactiveUI, making it accessible to SQL people who might want to contribute. Compiled regex patterns at the class level for predicate analysis. The Blazor web viewer cleverly source-links Core files directly into the WASM bundle to avoid incompatible dependencies.
What You Should Know
- macOS Windows Authentication doesn’t work – no Kerberos in typical macOS setups. SQL auth and Entra ID work fine.
- Linux credential store isn’t implemented yet – file analysis and SQL auth work, but no OS keychain integration.
- macOS binaries are unsigned – you’ll need
xattr -cr PerformanceStudio.appto bypass Gatekeeper. - The SSMS extension is distributed separately from the main release artifacts, from a specific release tag.
- 19 of the 30 warning types haven’t been migrated to the
BenefitScorerframework yet (tracked asLegacyWarningTypesin the code). They still fire correctly; they just don’t have benefit-percent estimates.
The License Is Exactly What It Says
MIT. Full source on GitHub. Every feature – plan analyzer, GUI, CLI, SSMS extension, MCP server, Query Store integration, PlanShare – is free. No premium tier, no feature gating, no open-core reservations.
The Companion Tool
Performance Studio tells you why a query’s execution plan is slow. Erik’s other tool, Performance Monitor, tells you which queries are hurting your server in the first place. I’ve written a separate review of Performance Monitor that covers its 32 collectors, alerting system, and Lite edition for agentless monitoring. The two tools share the same 30-rule plan analyzer engine and complement each other: Monitor identifies the problem queries over time, Studio explains what’s wrong with their plans.
Should You Use It?
If you tune SQL Server queries – and if you’re reading this blog, you probably do – this is worth trying. The analysis rules encode real performance tuning expertise. The benefit scoring helps you prioritize. The cross-platform support means you’re not locked to a Windows desktop. And the MCP integration means your AI assistant can actually read execution plans instead of hallucinating about them.
The release cadence is rapid (multiple releases per week, with nightly builds from the dev branch), the author is a recognized SQL Server performance expert, and external contributions are being accepted and acknowledged.
GitHub: erikdarlingdata/PerformanceStudio | erikdarling.com
Have questions about execution plan analysis? Let me know on Bluesky or LinkedIn.