Announcing Free SQL Server Performance Monitoring That Doesn’t Suck

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.

SQL Server Performance Monitor — Dashboard landing page with server health cardsFree SQL Server Performance Monitoring
NOC-out

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 PerformanceMonitor database 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)

Download on GitHub

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)

Full Dashboard with wait stats, CPU trends, and blocking chainsFree SQL Server Performance Monitoring
Actual Colors May Vary

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)

Lite Edition main window with sidebar and query performance chartsFree SQL Server Performance Monitoring
Lite Brite

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


Alert email notification showing blocking details with query textFree SQL Server Performance Monitoring
You oughta know.

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


Claude analyzing SQL Server performance data via the built-in MCP serverFree SQL Server Performance Monitoring
Thanks for the summaries

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

  1. Download the installer from GitHub Releases
  2. Run the GUI or CLI Installer and enter your server connection details
  3. Click Install, it creates the PerformanceMonitor database and SQL Agent jobs
  4. Repeat for each server you want to monitor
  5. Launch the Dashboard, add your servers, and data appears immediately

Lite Edition

  1. Download and extract the Lite Edition ZIP from GitHub Releases
  2. Run PerformanceMonitorLite.exe
  3. Click “Add Server” and enter your connection details
  4. 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.



45 thoughts on “Announcing Free SQL Server Performance Monitoring That Doesn’t Suck

  1. Thank you so much Erik… I have installed Lite ediiton, works just great, can I extract Dashborad zip and run it for the Lite Edition?

        1. The Lite version is a self-contained dashboard. You just run the .exe and point it at whatever SQL Servers you care about. It only collects data while it’s open.

          The Full version has some server-side dependencies (database, agent jobs). It’s always collecting data on the server in the background, and then you connect the separate Full dashboard to the server/database that holds the data.

          1. Hi Erik
            Again this is a great tool and after playing with Lite version we plan to install it on our new SQL Server 2025 server. I replied/asked to you on the LinkedIn post about this tool you posted some time ago regarding blocking and locking issues , so sorry for bothering you again ,can you please clarify a little bit on? I have plenty blocking \deadlocks on one my server but Lite version always shows me 0 , settings is set to >=1… Thank you again for your great contribution…

    1. Erik with a K is not good at things like writing read me files, or web design (have you seen this place?), so he had a robot write a read me file and do some web design and smush them together.

      Erik with a K did contribute some language around the read me content in web design format, but largely tried to stay out of the way on this one.

  2. I used the Lite Version very helpful, but I have some points
    1- IF you can the username in the Queries dashboard will be great to know this query running by which user. Like in Blocking report (blocking Login)
    2- IF we can add also the disk space will be great
    3- How we can customize the alerts like what kind of alerts and the threshold of it per server
    4- in CPU Dashboard if we can click on any point of the CPU and direct us to the query that was running at this time will be great

  3. Any thoughts on keeping this as a subscription based with on a low-cost bases that would allow more small scale industry to adopt this . Opensource doesn’t go with us due to compliances and support for future requirements .

    1. I am committed to having this tool remain free and open source. If your organization needs a support agreement, SLA, or compliance documentation, reach out and we can discuss a support arrangement.

  4. Our policies only allow us to use Copilot, or Github Copilot. Does that mean using the MCP Server is a no go for us?

  5. This is f**king awesome! I’ve been looking for a tool like this for my clients who don’t have the budget for professional monitoring tools. Thank you for committing to keeping this opensource.

  6. Superb tool. Bugs filed. Appreciate everything you have done and your excellent efforts on this alone.
    Hope this doesn’t burn you out on doing this.

    Class purchaser (under personal account), and greatly appreciative of this.

  7. Looks excellent, next time someone says “it’s not working” or “it’s slow” I’ll refer them here.
    Thanks, Erik !

  8. Completely new to the world of Claude Code.
    I understand from other comments that the MCP instructions is currently limited to Claude as LLM.

    My question though is will this work on the free Claude Code plan to test or must a Pro plan subscription be activated for use alongside Performance Monitor?

    **Currently test driving your tool on a pesky environment with a lot of Error 833 alerts for which the underlying root cause keeps eluding us.

    1. Hermann – that’s the exact opposite of my response to the other comments. You can use the MCP server with any LLM that supports it. It is not specific to Claude at all.

      1. Then I’ve misinterpreted the “No, MCP servers can be used by any LLM. I just have instructions for Claude because that’s what I use.” in response to Tony Fountain as “instructions in MCP focused on Claude” rather than “instructions provided on how to link Claude” to MCP.

        Will play around a bit to see if I can get it running against Claude.

        1. I’ve had enough time to gather data and converse with Claude on this. It helped a lot to zone in on CPU starvation from the hypervisor on which the VM runs. IT team currently investigating the host configuration.
          Very impressed with the tool from the MCP perspective (did not use the GI that much yet)

          For full deployment on a busy production environment, I’d suggest NOT leaving SQL Job “PerformanceMonitor – Collection” running indefinitely unless the retention days in SQL Job “PerformanceMonitor – Data Retention” is adjusted to a smaller value than the default 30 days.

          In my case the table grew to 150GB+ in under 3 days, almost killing some databases on the HDD it shared for data and logs.

          All said, an impressive tool – thank you for sharing it Erik.

  9. Any recommendations or anything special to consider for servers that are part of Availability Groups? Or just install on each replica and let it rip?

  10. Hi Erik,

    This is awesome!

    Which file specifically are you referring to here?

    “Download the installer from GitHub Releases
    Run the GUI or CLI Installer and enter your server connection details”

    don’t see an exe. Opened the .csproj file with Visual studio but don’t know what to do next

    I know I am a noob

    1. Most GitHub project do releases for the most current version of their code.

      The most recent version of mine (from Friday) is here.

      If you’re not sure which one to start with, go with Lite. I would recommend going over the readme file for full details though.

  11. It would be fantastic to have Managed Service Providers (MSPs) management to centralize monitoring across separate networks.
    In any case, thank you very much for the fantastic work!

  12. Oh man… seriously, you guys make us DBAs look like absolute rockstars.
    I’m over here getting showered with praise, and all I do is using your scripts and following your advice.
    And now this?!

    Seriously — thank you so much! You’re making me look way more talented than I actually am.

Comments are closed.