From 8b2703d4cd87100606a63df82c8544ac459531e6 Mon Sep 17 00:00:00 2001 From: Erik Darling <2136037+erikdarlingdata@users.noreply.github.com> Date: Wed, 18 Mar 2026 00:18:05 -0400 Subject: [PATCH] Add 2.3.0 changelog entry Co-Authored-By: Claude Opus 4.6 (1M context) --- CHANGELOG.md | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05c8696..42d7bf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,87 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.3.0] - 2026-03-18 + +### Important + +- **Schema upgrade**: Six columns widened across three tables (`query_stats`, `cpu_scheduler_stats`, `waiting_tasks`, `database_size_stats`) to match DMV documentation types. These are in-place ALTER COLUMN operations — fast on any table size, no data migration. Upgrade scripts run automatically via the CLI/GUI installer. +- **SQL Server version check**: Both installers now reject SQL Server 2014 and earlier before running any scripts, with a clear error message. Azure MI (EngineEdition 8) is always accepted. ([#543]) +- **Installer adversarial tests**: 35 automated tests covering upgrade failures, data survival, idempotency, version detection fallback, file filtering, restricted permissions, and more. These run as part of pre-release validation. ([#543]) + +### Added + +- **ErikAI analysis engine** — rule-based inference engine for Lite that scores server health across wait stats, CPU, memory, I/O, blocking, tempdb, and query performance. Surfaces actionable findings with severity, detail, and recommended actions. Includes anomaly detection (baseline comparison for acute deviations), bad actor detection (per-query scoring for consistently terrible queries), and CPU spike detection for bursty workloads. ([#589], [#593]) +- **ErikAI Dashboard port** — full analysis engine ported to Dashboard with SQL Server backend ([#590]) +- **FinOps cost optimization recommendations** — Phase 1-4 checks: enterprise feature audit, CPU/memory right-sizing, compression savings estimator, unused index cost quantification, dormant database detection, dev/test workload detection, VM right-sizing, storage tier optimization, reserved capacity candidates ([#564]) +- **FinOps High Impact Queries** — 80/20 analysis showing which queries consume the most resources across all dimensions ([#564]) +- **FinOps dollar-denominated cost attribution** — per-server monthly cost setting with proportional database-level breakdown ([#564]) +- **On-demand plan fetch** for bad actor and analysis findings — click to retrieve execution plans for flagged queries ([#604]) +- **Plan analysis integration** — findings include execution plan analysis when plans are available ([#594]) +- **Server unreachable email alerts** — Dashboard sends email (not just tray notification) when a monitored server goes offline or comes back online ([#529]) +- **Column filters on all FinOps DataGrids** — filter funnel icons on every column header across all 7 FinOps grids in Lite and Dashboard ([#562]) +- **Column filters on Dashboard** IdleDatabases, TempDB, and Index Analysis grids +- **Lite data import** — "Import Data" button brings in monitoring history from a previous Lite install via parquet files, preserving trend data across version upgrades ([#566]) +- **Per-server Utility Database setting** — Lite can call community stored procedures (sp_IndexCleanup) from a database other than master ([#555]) +- **SQL Server version check** in both CLI and GUI installers — rejects 2014 and earlier with a clear message ([#543]) +- **Execution plan analysis MCP tools** for both Dashboard and Lite +- **Full MCP tool coverage** — Dashboard expanded from 28 to 57 tools, Lite from 32 to 51 tools ([#576], [#577]) +- **Self-sufficient analyze_server drill-down** — MCP tool returns complete analysis, not breadcrumb trail ([#578]) +- **NuGet package dependency licenses** in THIRD_PARTY_NOTICES.md + +### Changed + +- **Azure SQL DB FinOps** — all collectors (database sizes, query stats, file I/O) now connect to each database individually instead of only querying master. Server Inventory uses dynamic SQL to avoid `sys.master_files` dependency. ([#557]) +- **Index Analysis scroll fix** — both summary and detail grids now use proportional heights instead of Auto, so they scroll independently with large result sets ([#554]) +- **Dashboard Add Server dialog** — increased MaxHeight from 700 to 850px so buttons are visible when SQL auth fields are shown +- **GUI installer** — Uninstall button now correctly enables after a successful install +- **GUI installer** — fixed encryption mapping and history logging ([#612]) +- **Dashboard visible sub-tab only refresh** on auto-refresh ticks ([#528]) +- Analysis engine decouples data maturity check from analysis window + +### Fixed + +- **Installer dropping database on every upgrade** — `00_uninstall.sql` excluded from install file list, installer aborts on upgrade failure, version detection fallback returns "1.0.0" instead of null ([#538], [#539]) +- **SQL dumps on mirroring passive servers** from FinOps collectors ([#535]) +- **RetrievedFromCache** always showing False ([#536]) +- **Arithmetic overflow** in query_stats collector for dop/thread columns ([#547]) +- **Lite perfmon chart bugs** and Dashboard ScottPlot crash handling ([#544], [#545]) +- **PLE=0 scoring bug** — was scored as harmless, now correctly flagged ([#543]) +- **PercentRank >1.0** bug in HealthCalculator +- **6 verified Lite bugs** from code review ([#611]) +- **Enterprise feature audit text** — partitioning is not Enterprise-only +- **FinOps collector scheduling**, server switch, and utilization bugs +- **Dashboard drill-down** Unicode arrow in story path split +- **Empty DataGrid scrollbar artifacts** — hide grids when empty across all FinOps tabs +- **Query preview** — truncated in row, full text in tooltip + +[#529]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/529 +[#535]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/535 +[#536]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/536 +[#538]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/538 +[#539]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/539 +[#543]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/543 +[#544]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/544 +[#545]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/545 +[#547]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/547 +[#554]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/554 +[#555]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/555 +[#557]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/557 +[#562]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/562 +[#564]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/564 +[#566]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/566 +[#576]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/576 +[#577]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/577 +[#578]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/578 +[#528]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/528 +[#589]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/589 +[#590]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/590 +[#593]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/593 +[#594]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/594 +[#604]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/604 +[#611]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/611 +[#612]: https://github.com/erikdarlingdata/PerformanceMonitor/issues/612 + ## [2.2.0] - 2026-03-11 **Contributors:** [@HannahVernon](https://github.com/HannahVernon), [@ClaudioESSilva](https://github.com/ClaudioESSilva), [@dphugo](https://github.com/dphugo), [@Orestes](https://github.com/Orestes) — thank you!