Free, open-source SQL Server performance monitoring — 32 collectors, real-time alerts, graphical plan viewer, MCP server for AI analysis. Supports SQL 2016-2025, Azure SQL, AWS RDS.
# Add to your Claude Code skills
git clone https://github.com/erikdarlingdata/PerformanceMonitorFree, open-source monitoring that replaces the tools charging you thousands per server per year. 30+ collectors, real-time alerts, built-in MCP server for AI analysis. Nothing phones home. Your data stays on your server and your machine.
Supported: SQL Server 2016–2025 | Azure SQL Managed Instance | AWS RDS for SQL Server | Azure SQL Database (Lite only)


👉 Not sure which edition to pick? Start with Lite. One download, nothing installed on your server, data flowing in under 5 minutes.
| | Full Edition | Lite Edition |
|---|---|---|
| What it does | Installs a PerformanceMonitor database with 30 T-SQL collectors running via SQL Agent. Separate dashboard app connects to view everything. | Single desktop app that monitors remotely. Stores data locally in DuckDB + Parquet. Nothing touches your server. |
| Best for | Production 24/7 monitoring, long-term baselining | Quick triage, Azure SQL DB, locked-down servers, consultants, firefighting |
| Requires | SQL Agent running (see permissions) | VIEW SERVER STATE (see permissions) |
| | Run the installer, open the dashboard | Download, run, add a server, done |
No comments yet. Be the first to share your thoughts!
Both editions include real-time alerts (system tray + email + webhooks), charts and graphs, dark and light themes, CSV export, and a built-in MCP server for AI-powered analysis with tools like Claude.
All release binaries are digitally signed via SignPath — no more Windows SmartScreen warnings.
"You guys make us DBAs look like absolute rockstars. I'm over here getting showered with praise, and all I do is use your scripts and follow your advice."
"replaced SentryOne and had it running in 10 minutes"
"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."
🔍 32 specialized T-SQL collectors running on configurable schedules with named presets (Aggressive, Balanced, Low-Impact) — wait stats, query performance, blocking chains, deadlock graphs, memory grants, file I/O, tempdb, perfmon counters, FinOps/capacity, and more. Query text and execution plan collection can be disabled per-collector for sensitive environments.
🚨 Real-time alerts for blocking, deadlocks, and high CPU — system tray notifications, styled HTML emails with full XML attachments, and webhook notifications for external integrations
📊 NOC-style dashboard with green/yellow/red health cards, auto-refresh, configurable time ranges, and dark/light themes
📋 Graphical plan viewer with native ShowPlan rendering, 30-rule PlanAnalyzer, operator-level cost breakdown, and a standalone mode for opening .sqlplan files without a server connection
🤖 Built-in MCP server with 51-63 read-only tools for AI analysis — ask Claude Code or Cursor "what are the top wait types on my server?" and get answers from your actual monitoring data
🧰 Community tools installed automatically — sp_WhoIsActive, sp_BlitzLock, sp_HealthParser, sp_HumanEventsBlockViewer
🔒 Your data never leaves — no telemetry, no cloud dependency, no phoning home. Credentials stored in Windows Credential Manager with OS-level encryption.




PerformanceMonitorLite.exeData starts flowing within 1–5 minutes. That's it. No installation on your server, no Agent jobs, no sysadmin required.
Upgrading from zip? Click Import Settings then Import Data in the sidebar and point both at your old Lite folder. Settings imports server connections, alert thresholds, SMTP config, and schedules. Data imports historical DuckDB + Parquet archives. Auto-update users (installed via Setup.exe) get updates automatically — no manual import needed.
Always On AG? Enable ReadOnlyIntent in the connection settings to route Lite's monitoring queries to a readable secondary, keeping the primary clear. Enable MultiSubnetFailover for multi-subnet failover scenarios.
23 collectors run on independent, configurable schedules:
| Collector | Default | Source |
|---|---|---|
| query_snapshots | 1 min | sys.dm_exec_requests + sys.dm_exec_sessions |
| blocked_process_report | 1 min | XE ring buffer session |
| waiting_tasks | 1 min | sys.dm_os_waiting_tasks |
| wait_stats | 1 min | sys.dm_os_wait_stats (deltas) |
| query_stats | 1 min | sys.dm_exec_query_stats (deltas) |
| procedure_stats | 1 min | sys.dm_exec_procedure_stats (deltas) |
| cpu_utilization | 1 min | sys.dm_os_ring_buffers scheduler monitor |
| file_io_stats | 1 min | sys.dm_io_virtual_file_stats (deltas) |
| memory_stats | 1 min | sys.dm_os_sys_memory + memory counters |
| memory_grant_stats | 1 min | sys.dm_exec_query_memory_grants |
| tempdb_stats | 1 min | sys.dm_db_file_space_usage |
| perfmon_stats | 1 min | sys.dm_os_performance_counters (deltas) |
| deadlocks | 1 min | system_health Extended Events session |
| session_stats | 1 min | sys.dm_exec_sessions active session tracking |
| memory_clerks | 5 min | sys.dm_os_memory_clerks |
| query_store | 5 min | Query Store DMVs (per database) |
| running_jobs | 5 min | msdb job history with duration vs avg/p95 |
| database_size_stats | 15 min | sys.master_files + FILEPROPERTY + dm_os_volume_stats |
| server_properties | 15 min | SERVERPROPERTY() hardware and licensing metadata |
| server_config | On connect | sys.configurations |
| database_config | On connect | sys.databases |
| database_scoped_config | On connect | Database-scoped configurations |
| trace_flags | On connect | DBCC TRACESTATUS |
All data is stored in %LOCALAPPDATA%\PerformanceMonitorLite\ — separate from the executable, so auto-updates don't affect your data.