Announcing Free SQL Server Performance Monitoring
For years, enterprise SQL Server monitoring tools have been charging you an arm and a leg for stagnating products made by people who have never done an ounce of SQL Server performance tuning or DBA work. They phone home with your data, lock you into annual contracts, and still can’t tell you why your server is slow without you doing half the work yourself.
That is, if you survive the installation process. Active Directory. Domain accounts. Firewalls. Security policies. Additional database servers. Annoying.
Or just send everything to the cloud, somewhere.
I got real tired of dealing with that, so I built a free, open-source SQL Server performance monitoring tool that isn’t any of those things, and doesn’t suck.
You can find it on GitHub.

Here’s what it does, and why you might want to check it out.
The Short Version
SQL Server Performance Monitor is a free tool that collects and visualizes performance data from your SQL Servers.
It comes in two editions:
- Full Edition — installs a
PerformanceMonitordatabase on each server with T-SQL collectors running via SQL Agent. A separate WPF Dashboard connects to view everything in that database, and that database only. It can’t see anything beyond that. - Lite Edition — a single desktop app that monitors SQL Servers remotely. Nothing gets installed on the target server. Data gets pulled into a local embedded DuckDB, with automatic Parquet archival.
At no point does your monitoring data go anywhere outside of your server or your computer, and the connection method is the same one SSMS uses.
Both editions include real-time alerts (system tray & email), pretty charts and graphs, and a built-in MCP server for LLM-powered analysis with tools like Claude.
Supported platforms:
- SQL Server 2016, 2017, 2019, 2022, 2025
- Azure SQL Managed Instance
- AWS RDS for SQL Server
- Azure SQL Database (Lite only)
Who Is This For?
Not everyone needs enterprise-scale monitoring. If any of these sound familiar, this tool is for you:
- Solo DBAs and small teams: You’re responsible for a handful of SQL Servers. You need to know what’s happening, but you don’t need a platform that costs more than the servers it monitors and only tells you when PLE is low and how many KB of free space your disks have.
- Consultants and contractors: Drop it on a client’s server, collect real data, diagnose their problems without having to spend time on data collection. The Lite Edition doesn’t even require installation on the target, just connect and go.
- Developers who care: Your app is slow and you suspect the database (as everyone does). Point this at your server, run your workload, and see exactly which queries are hurting your server.
Two Editions, One Goal
Full Edition (Server-Installed)

The Full Edition installs a PerformanceMonitor database directly on each SQL Server you want to monitor. T-SQL collector stored procedures run via SQL Agent, gathering everything from wait stats and query performance to blocking chains and deadlock graphs and more.
What you get:
- 30+ specialized T-SQL collectors running every 5 minutes (you can control the schedule, and which ones run)
- Data stored in SQL Server tables you control (query them directly in SSMS or whatever)
- Community tools installed automatically (sp_WhoIsActive, sp_BlitzLock, sp_HealthParser)
- NOC-style landing page with green/yellow/red health cards per server
- Automatic data retention (30 days default, configurable per table)
- Built-in MCP server with read-only tools for AI analysis (disabled by default)
Best for: Production servers where you want continuous 24/7 collection with maximum data fidelity and access.
Requirements: sa on the target server for database install, SQL Server Agent running. Collectors only need VIEW SERVER STATE or VIEW PERFORMANCE STATE.
Lite Edition (Standalone Desktop App)

The Lite Edition is a single WPF application that monitors SQL Servers remotely. It queries DMVs directly over the network and stores data locally in embedded DuckDB with automatic Parquet archival. Nothing is installed on the target server.
What you get:
- 20+ collectors with configurable schedules
- Local DuckDB storage with ZSTD-compressed Parquet archives (~10x compression)
- Multi-server monitoring from one seat
- Azure SQL Database support (the only edition that supports it)
- Single executable — extract, run, connect
- Built-in MCP server with 31 read-only tools for AI analysis
Best for: Quick triage, Azure SQL Database, locked-down servers where you can’t install anything, consultants, firefighting.
Requirements: VIEW SERVER STATE on the target server (VIEW DATABASE STATE for Query Store), or just VIEW PERFORMANCE STATE where supported.
Side-by-Side Comparison
| Feature | Full Edition | Lite Edition |
|---|---|---|
| Installation on SQL Server | Required (database + jobs) | Not required |
| Collectors | 30+ (via SQL Agent) | 20+ (in-app) |
| Data Storage | SQL Server (on target) | DuckDB + Parquet (local) |
| Azure SQL Database | Not supported | Supported |
| Alerts (tray + email) | Blocking, deadlocks, CPU | Blocking, deadlocks, CPU |
| Agent Job Monitoring | Duration vs avg/p95 | Duration vs avg/p95 |
| MCP Server (AI) | Yes | Yes |
| Community Tools | sp_WhoIsActive, sp_BlitzLock | Not needed |
| Execution Plans | Collected, downloadable | Collected, downloadable |
| Portability | Server-bound | Single executable |
Alerts That Actually Tell You Something

Both editions include a real-time alert engine that runs independently of which tab is visible, even when the app is minimized to the system tray.
What gets monitored:
- Blocking: fires when the longest blocked session exceeds your threshold
- Deadlocks: fires when new deadlocks are detected
- High CPU: fires when total CPU exceeds your threshold
- Connection changes: fires when a monitored server goes offline or comes back online
How you get notified:
- System tray balloons with a 5-minute per-metric cooldown
- SMTP email with styled HTML, query text, blocking chains, and deadlock graph XML attached for offline analysis
- Resolved alerts: automatic “Cleared” notification when the condition ends
All thresholds are configurable. You can acknowledge and silence alerts per-server and per-tab with a right-click.
MCP Server: AI-Powered Analysis

Both editions include a built-in Model Context Protocol (MCP) server. Enable it in Settings, register it with Claude Code or Cursor (but definitely not Co-Pilot).
The MCP server only works off of a set of read only tools, and can only look at your collected performance data.
They can’t see anything in any other databases, or execute custom SQL commands.
You can ask questions like:
- “What are the top wait types on sql2022?”
- “Are there any blocking or deadlock issues?”
- “Show me CPU utilization for the last 4 hours”
- “What are the most expensive queries by CPU?”
- “Give me a full health check across all servers”
They cover wait stats, query performance, CPU, memory, blocking, deadlocks, I/O latency, TempDB, perfmon counters, and more.
Setup is one command:
claude mcp add --transport http --scope user sql-monitor http://localhost:5151/
Your Data, Your Tables
With the Full Edition, everything lands in SQL Server tables you own. No APIs. No export wizards. Open SSMS and write a query.
-- What were my top waits yesterday? SELECT TOP (10) wait_type, waiting_tasks_count, wait_time_ms, avg_wait_ms FROM PerformanceMonitor.collect.wait_stats WHERE collection_time >= DATEADD(DAY, -1, GETDATE()) ORDER BY wait_time_ms DESC;
Reporting views are included for common questions, but you’re not limited to them. Join the collection tables however you want.
Build Power BI reports?
Export to Excel?
Something with Fabric?
I don’t care.
It’s just tables.
What Gets Collected
The Full Edition runs 30+ collectors via SQL Agent. The Lite Edition runs 20 collectors directly in the app. Here’s what they cover:
| Category | What’s Collected |
|---|---|
| Query Performance | Query stats from plan cache, procedure stats, Query Store metrics, active query snapshots, waiting tasks |
| Wait & Resource Stats | Wait statistics (delta-based), latch statistics, spinlock statistics, CPU utilization, perfmon counters |
| Memory & I/O | Memory grants, memory clerks, buffer pool pressure, file I/O latency, TempDB usage |
| Blocking & Events | Blocked process reports, deadlock graphs, ring buffer events, default trace analysis, system health events |
All collectors compute deltas automatically — you see actual work done between snapshots, not cumulative totals that reset on service restart.
Security: We Care A Lot
You’re giving a monitoring tool access to your SQL Servers (I hope, anyway). I did my best to make sure we’re not doing or allowing anything stupid.
What it does:
- Stores passwords in Windows Credential Manager (DPAPI encryption), never in config files or plain text. Same as SSMS.
- SQL connections default to mandatory TLS with certificate validation
- Every SQL query uses parameterized queries, zero string concatenation
- All monitoring queries run at READ UNCOMMITTED to avoid blocking your production workload
- Every line of code is open source on GitHub for you to audit, make fun of, steal, fall in love with, etc.
What it doesn’t do:
- No telemetry: zero analytics, tracking, or usage reporting
- No phone-home: the app never contacts any external server
- No cloud dependency: everything stays on your machines and your SQL Servers
- No auto-updates: you choose when to update, and if you want to check for updates
- No hidden network calls: the only outbound traffic is SMTP email alerts you configure yourself
Getting Started
Full Edition
- Download the installer from GitHub Releases
- Run the GUI or CLI Installer and enter your server connection details
- Click Install, it creates the PerformanceMonitor database and SQL Agent jobs
- Repeat for each server you want to monitor
- Launch the Dashboard, add your servers, and data appears immediately
Lite Edition
- Download and extract the Lite Edition ZIP from GitHub Releases
- Run
PerformanceMonitorLite.exe - Click “Add Server” and enter your connection details
- That’s it. Data collection starts within 1-5 minutes.
Why I Built This
I spend a lot of time looking at SQL Server performance problems. Clients call me when things are on fire, and the first thing I need is data. What’s waiting, what’s blocking, what’s eating CPU, which queries are the worst offenders, and a bunch of other contextual information to go along with it.
If they don’t have a monitoring tool, we’re at the mercy of aggregated metrics, restarts, and maybe just not looking at the right thing at exactly the right time. It’s also really hard to show improvements over time.
Most monitoring tools are either expensive enterprise platforms, or one-off scripts that don’t persist anything (and certainly don’t give you any pretty graphs to look at).
I wanted something in between: a real monitoring tool that collects meaningful data, shows it clearly, and doesn’t require a procurement process to install.
So I built one. And now you can use it too.
Support & Professional Services
This project is free and open source. Use it freely. No strings attached.
If you find it valuable, here are two optional ways to support continued development:
- Sponsor on GitHub — fund new features, ongoing maintenance, and SQL Server version support
- Consulting & Training — need help analyzing the data this tool collects? Want expert assistance fixing the issues it uncovers? That’s what I do.
Download SQL Server Performance Monitor
MIT License | .NET 8 | Source on GitHub
Going Further
If this is the kind of SQL Server stuff you love learning about, you’ll love my training. Blog readers get 25% off the Everything Bundle — over 100 hours of performance tuning content. Need hands-on help? I offer consulting engagements from targeted investigations to ongoing retainers. Want a quick sanity check before committing to a full engagement? Schedule a call — no commitment required.