Skip to content

Releases: erikdarlingdata/PerformanceMonitor

Nightly Build (2.10.0-nightly.20260516)

16 May 07:06
b4aa8de

Choose a tag to compare

Pre-release

Automated nightly build from dev branch.

Version: 2.10.0-nightly.20260516
Commit: b4aa8de
Built: 2026-05-16 07:05 UTC

These builds include the latest changes and may be unstable.
For production use, download the latest stable release.

v2.10.0 - All Travels, Foreign and Domestic

04 May 23:56
d429e44

Choose a tag to compare

Planes and Plans

This week I'm off to Pass Summit East in Chicago, and SQLDay in Wroclaw, Poland. One after the other. Last week I was in Florida for Data Saturday Jacksonville. Hopefully that explains why this week's release is a) early and b) pretty light on changes. It will also hopefully explain why there won't be a release next week. I can see, hear, smell, and feel your hearts breaking on that news.

So while I'm off spending all my Zlotys on Okocim and Kielbasa, you can just imagine that the CPU spikes you see in this here monitoring tool is about what my blood pressure and cholesterol are doing.

Fixed

  • Memory tab tooltip stops working after switching away and returning to the tab. Both Dashboard and Lite Memory tab crosshair tooltip handlers now reattach correctly on tab re-entry; the same popup-wedge fix is also applied to CorrelatedCrosshairManager (#916)
  • FinOps memory recommendation now bases sizing on a 7-day P95 of memory samples instead of a single snapshot, so recommendations no longer swing based on instantaneous workload state. Applied in both Dashboard and Lite (#917)

Changed

  • Per-database grants for FinOps Index Analysis documented in the README — sp_IndexCleanup-backed Index Analysis requires per-database EXECUTE grants on each user database you want to analyze (#915)

See CHANGELOG.md for full details.

v2.9.0 - Get Some Exercise

29 Apr 11:23
531dae3

Choose a tag to compare

Very Nearly Three

I seem to recall there being some super-shifting feature getting added for 2.0 and 2.5 versions. As we approach 3.0, I don't quite have one of those ready.

I'm also starting to wonder if the weekly releases are still necessary. That's a bit of a relief, to be honest. For a bit it felt like I was shipping big fixes and changes at a frantic pace. Now I'm half-tempted to start labeling things "stable" or "LTS" or "dude-trust-me".

Anyway, changelog and all that is below.

If you want to chime in on the future of Full/Lite dashboards, check out this discussion.

If you want to report an issue, request a feature, or pitch in some code, head over here.

Highlights

  • Per-database collector exclusions — exclude noisy databases from per-database collectors. Full Edition adds config.collector_database_exclusions (8 collectors filtered); Lite adds ExcludedDatabases per server (9 collectors filtered). (#887)
  • Resume gap detectionquery_stats, procedure_stats, and query_store skip the historical sweep on first run after an Off preset, Agent stoppage, or server reboot, preventing tempdb blowouts. (#892)
  • Total non-idle CPU on Lite Overview — headline shows total CPU with SQL-only alongside; new alert mode toggle (Total / SqlOnly). (#899)
  • Purge Now action in Manage Servers (Full) with mode picker and reworked config.data_retention semantics — @retention_days = NULL respects per-collector retention, 0 truncates every table, N > 0 overrides every table to N days. (#900)
  • Off collection presetconfig.apply_collection_preset @preset_name = N'Off' disables every collector in one call. (#888)
  • Right-click View Plan on Dashboard BPR + Deadlocks grids and Lite Deadlocks grid. (#880)
  • Open Log Folder sidebar button in Lite. (#873)
  • Installed Version column in Manage Servers (both editions).
  • Lite-style server card indicators back-ported to Full.

Dependency bumps

  • Microsoft.Data.SqlClient 6.1.4 → 7.0.1 (with new Extensions.Azure 1.0.0 for Entra)
  • ModelContextProtocol 0.7.0-preview.1 → 1.2.0 (off the preview tag)
  • DuckDB.NET 1.5.0 → 1.5.2 in Lite

See CHANGELOG.md for the full list.

v2.8.0 - Having A Nice Time©️

22 Apr 15:38
de610a1

Choose a tag to compare

Welcome friends to another release!

I do hope you're enjoying these as much as I am. Providing the SQL Server community with a high quality, free, and easy to use monitoring tool has not made me rich beyond my mildest dreams, but it has been fun.

The last week gave me an opportunity to add some new stuff, and scrutinize the code a little bit more closely for weird issues that I would occasionally notice. Hopefully never to be noticed again, and all that.

As always, if you run into anything, file an issue on GitHub.

Likewise, there are a few open issues that have the Help Wanted sign on them, if you feel like contributing code.

Highlights

Faster Dashboard grids on large installations

New nonclustered indexes on collect.query_stats, procedure_stats, and query_store_data eliminate the Eager Index Spool that previously formed against the entire table when Dashboard looked up query/procedure/plan details. On big installations that spool could take minutes. The upgrade script uses ONLINE = ON on Enterprise/Developer/Azure editions and falls back to offline on Standard/Web. (#835)

Memory Pressure Events in Lite

The memory pressure events collector, chart, and get_memory_pressure_events MCP tool that previously lived only in the Full Edition now ship in Lite. Same RING_BUFFER_RESOURCE_MONITOR data source, same interpretation guidance for LLMs, 5-minute default cadence. (#865)

Grid auto-scrolling

Lite and Dashboard grids now auto-scroll when the mouse approaches the edges during drag or scrub. Community contribution from @ClaudioESSilva. (#843)

Azure SQL DB collector hardening

Several fixes rolled up under #857 for Azure SQL Database targets:

  • Single-database fallback when master is inaccessible (elastic pools, contained users)
  • Query snapshots scoped to the current database
  • Snapshot requests pre-filtered into #temp before joining DMVs — works around Azure-specific plan blow-ups
  • Live query plans skipped gracefully instead of erroring
  • memory_stats collector drops sys.dm_os_schedulers which elastic-pool contained users cannot query
  • Non-transient permission denials now stop the collector retry loop instead of hammering forever

Webhook URL encryption (Dashboard)

Dashboard webhook URLs are now stored via DPAPI in Windows Credential Manager instead of plaintext settings. Existing plaintext entries are migrated on first Settings open. Lite webhook URLs remain in plaintext for now — parity port is tracked separately.

Performance polish

  • Query/Procedure/Query Store stats refactored to a phased DECOMPRESS approach and capped to TOP 500 results
  • Server tabs lazy-load — only the visible tab is populated at startup; others load on first open
  • DuckDB query paths parameterized, escape-hardened, and the IsArchiving race fixed
  • Lite chart axes and sub-tab styling polished, then ported to Dashboard

Other notable fixes

  • Memory Pressure Events chart filter no longer drops valid rows (#865)
  • FinOps recommendation severity sort order in Lite and Dashboard (#872)
  • Overview crosshair no longer disappears after tab switches or layout passes
  • Blocked process report plan lookup returns the correct plan (#867)
  • FinOps TDE recommendation no longer flagged on SQL Server 2019+ where TDE is free on Standard (#854)

See CHANGELOG.md for the complete list.

v2.7.0 - Stability Is A State Of Mind

15 Apr 13:36
82dc799

Choose a tag to compare

Notable New Features:

  • Host OS column in Server Inventory
  • Offline community script support for air-gapped installs
  • MultiSubnetFailover for Always On AG listeners

Notable Fixes

  • Dashboard UI hangs on auto-refresh
  • Deadlock count resets
  • Lite auto-refresh skipping
  • upgrade filter patch version handling
  • memory leaks on tab close
  • MCP query optimization for large databases
  • PlanAnalyzer sync from PerformanceStudio

What's Changed

Full Changelog: v2.6.0...v2.7.0

v2.6.0 - EGOT

08 Apr 14:02
cb47ba2

Choose a tag to compare

You Can't Beat Someone Who's Having Fun

The main goal of this release was to improve data presentation. Obviously some other stuff came up along the way, and thanks to everyone who submitted issues and ideas over the last week. I'm thrilled by the community response and feedback here.

Anyway, one of the big changes was to re-do some of the overview information in the dashboards so you can see all of what's going on across a variety of resources at once.

image

I've also added a compare button (not available in all tabs just yet) so you can see what things looked like at different intervals. You can use it on the above view, as well as the query views. It's not very interesting on my local test servers, but in testing it on client servers, it shows very interesting things.

image

There's also a query heatmap, which people seem to like. The resolution here looks a bit off because of how I'm remoting in, but you should get the idea:

image

Look, colors! How nice.

What's Changed

Full Changelog: v2.5.0...v2.6.0

v2.5.0 - Before The Fool's Day

31 Mar 01:14
e4580c7

Choose a tag to compare

Better Than Yours

Contributors: @tnguyen7s, @jakemorgangit, @kontrago, @dphugo, @HannahVernon

This release represents the most powerful and capable release since the last release. Game changer. Literally transformative. It will rock you to your very core.

Well but really, some fun things got added, some necessary things got fixed, and I have finally fully ascended to spiritual Product Manager enlightenment by killing a product (sort of).

The GUI installer has been removed as a standalone executable, and folded into the Full Dashboard. It makes more sense there. You go to add a server, and if the PerformanceMonitor database isn't there (or if it needs updating), you install/update from there. Having a whole separate thing to deal with was not fun, when I'm already juggling two dashboards that need maintaining. It also may not be totally clear to people that they need to run that to update the guts to use new Full Dashboard versions.

We now support Webhooks, thanks to @jakemorgangit! I don't have any webs to hook into, but Jake does. Now if you want to have this thing send send messages to things that accept hooking and webs, you can do that. I'm psyched on this, because it's a cool thing that a lot of people rely on for getting alerts. Email is so 2003.

Alerting got a whole lot more mute-able! thanks to @HannahVernon. Hannah has been working a ton on improving the alert system, and I appreciate it because it's the kind of thing I have a real hard time getting myself to sit down and test and whatnot.

So what did I do this time around? Well, @rferraton has been doing some incredible visual work on Performance Studio, and it has made quite an impression on me. I've been trying to get similarly helpful things added in here:

  1. Time slicers so you can easily filter grid results to resource spikes
  2. A heat map that shows you when queries really had a tough time
  3. Right click > Show Active Queries to charts and graphs (coverage is a WIP, but I'm getting there).

The goal here is to make this not only a monitoring tool, but a help-you-figure-out-problems tool. I'm going to build more on that over the next couple releases.

Anyway, that's enough.

What's Changed

New Contributors

Full Changelog: v2.4.1...v2.5.0

v2.4.1

23 Mar 23:42
129c830

Choose a tag to compare

v2.4.1

Patch release with UX improvements and a pipeline fix.

  • Check for Updates is now a proper button instead of a hyperlink in both Dashboard and Lite About windows
  • Collector health clears stale error counts when a server is removed — status bar no longer shows errors for deleted servers
  • Velopack pipeline split into separate upload steps so Dashboard and Lite artifacts don't conflict

v2.4.0

Contributors: @HannahVernon, @MisterZeus, @ad-mca-mk — thank you!

Highlights

🔄 Auto-Update (Windows) — Both Dashboard and Lite now support automatic updates via Velopack. Install once via Setup.exe, and future updates are detected on startup with one-click download + apply. Existing zip distribution continues to work. (#635)

📊 Per-Tab Time Range Slicers — Query tabs in both Dashboard and Lite now have interactive time range slicers. Narrow down to a specific window without changing the global time range. (#655, #662)

🕐 Time Display Picker — Toggle between Local, UTC, and Server time directly from the toolbar. (#646)

Important

  • Lite data directory moved: All data (config, DuckDB, archives, logs) now lives in %LOCALAPPDATA%\PerformanceMonitorLite\ instead of alongside the executable. This enables auto-update support. Users upgrading from the zip should use Import Settings + Import Data to bring over configuration and historical data.

Added

  • Velopack auto-update for Dashboard and Lite — startup notification, download + apply from About window with confirmation dialog (#635)
  • Per-tab time range slicers on Dashboard and Lite query tabs (#655, #662)
  • Time display picker (Local/UTC/Server) in toolbars (#646)
  • Import Settings — expanded from "Import Connections" to also copy alert thresholds, SMTP config, schedules, and wait exclusions
  • Alert muting improvements — pre-fill database, query, wait type, and job name from alert detail; configurable default expiration for new mute rules (@HannahVernon) (#642)
  • Missing date columns on Query Stats and Procedure Stats tabs (#649, #651, #654)
  • Trace pattern drill-down with CollectionTime and NtUserName columns (#663)
  • DataGrid sort preservation across auto-refresh (#659)
  • CLI installer: colored output and version check on startup
  • GUI installer: version check on startup
  • Growth rate and VLF count columns in Database Sizes (upgrade script for servers that missed it in 2.3.0) (#567)
  • llms.txt and CITATION.cff for discoverability (#630)

Changed

  • Lite data directory moved to %LOCALAPPDATA%\PerformanceMonitorLite\
  • Delta gap detection on all cumulative-counter collectors — prevents chart spikes after app restart (#633)
  • File I/O NULL fallbacks when sys.master_files is inaccessible — uses DB_NAME() and File_{id} (#633)
  • Running jobs collector skipped gracefully when login lacks msdb access (#656)
  • NuGet packages updated to latest minor versions (@MisterZeus) (#653)

Fixed

  • Installer reporting SUCCESS when files fail — removed false-positive workaround from both CLI and GUI
  • Query stats collector SQL dumps on passive mirror servers — removed dm_exec_plan_attributes, uses temp table of ONLINE database IDs (#632)
  • Trigger name extraction fails when comment contains " ON " (#666)
  • FinOps expensive queries DuckDB error for missing column
  • Imported parquet files not recognized by archive compaction

Download

File Description
PerformanceMonitorDashboard-dashboard-Setup.exe New! One-click Dashboard installer with auto-update
PerformanceMonitorLite-lite-Setup.exe New! One-click Lite installer with auto-update
PerformanceMonitorDashboard-2.4.1.zip Dashboard (portable zip)
PerformanceMonitorLite-2.4.1.zip Lite (portable zip)
PerformanceMonitorInstaller-2.4.1.zip SQL Server installer (CLI + GUI + scripts)

v2.4.0

23 Mar 23:20
3122122

Choose a tag to compare

Note: v2.4.1 is the recommended release. It includes a Check for Updates button fix, collector health cleanup, and a Velopack pipeline fix. Download v2.4.1 instead.

See CHANGELOG.md for the full 2.4.0 changelog.

v2.3.0

18 Mar 14:28
876dd0b

Choose a tag to compare

See CHANGELOG.md for full release notes.

Highlights

  • ErikAI analysis engine — rule-based inference for Lite and Dashboard with anomaly detection, bad actor scoring, and CPU spike detection
  • FinOps cost optimization — Phase 1-4 recommendations (enterprise feature audit, CPU/memory right-sizing, compression savings, VM right-sizing, reserved capacity)
  • Azure SQL DB fixes — all FinOps collectors now query each database individually
  • Server unreachable email alerts — tray + email on offline/online transitions
  • Lite data import from previous install for seamless upgrades
  • SQL Server version check in both installers (rejects 2014 and earlier)
  • 35 installer adversarial tests covering upgrade failures, data survival, idempotency
  • Full MCP tool coverage — Dashboard 57 tools, Lite 51 tools
  • Growth rate and VLF count columns in Database Sizes
  • Column filters on all FinOps DataGrids
  • Per-server Utility Database setting for community procs
  • Numerous bug fixes including the #538 installer data-loss fix