Skip to content

Issue #281 Gaps 1+2: Memory grant charts + File I/O throughput/latency/queued overlay#285

Merged
erikdarlingdata merged 2 commits into
devfrom
feature/issue-281-memory-grant-charts
Feb 25, 2026
Merged

Issue #281 Gaps 1+2: Memory grant charts + File I/O throughput/latency/queued overlay#285
erikdarlingdata merged 2 commits into
devfrom
feature/issue-281-memory-grant-charts

Conversation

@erikdarlingdata
Copy link
Copy Markdown
Owner

Closes #281 (Gaps 1 and 2)

Summary

  • Gap 1 (memory_grant_stats): Add memory grant stats charts to both apps — active grants, queued, memory pressure trend
  • Gap 2 (file_io_stats): Add File I/O throughput charts, switch Lite latency to file-level, add queued I/O overlay

Changes

Both apps

  • Add "File I/O Throughput" sub-tab with read/write MB/s charts per file (top 10 by bytes)
  • Restructure "File I/O" tab into "File I/O Latency" and "File I/O Throughput" sub-tabs
  • Add queued I/O overlay (dashed lines) on latency charts showing OS queue wait time

Lite-specific

  • Memory grants tab with active grants, queued requests, and memory grant trend charts
  • Switch File I/O latency charts from database-level to file-level (top 10 by I/O activity)
  • Collect io_stall_queued_read/write_ms from sys.dm_io_virtual_file_stats
  • DuckDB schema v15 migration adds queued stall columns to file_io_stats
  • Use DuckDB LAG() window function for throughput MB/s interval calculation

Dashboard-specific

  • Memory grants trend chart added to Resource Metrics tab
  • Fix double-brace interpolation bug in GetFileIoThroughputTimeSeriesAsync that caused empty throughput charts

CI fix

  • Update 50_configuration_issues_analyzer.sql and 97_test_procedures.sql to remove references to warning columns dropped from collect.memory_grant_stats in Gap 1

Test plan

  • Dashboard: Resource Metrics → File I/O → "File I/O Latency" sub-tab shows per-file latency with queued I/O dashed overlay
  • Dashboard: Resource Metrics → File I/O → "File I/O Throughput" sub-tab shows read/write MB/s per file
  • Lite: File I/O → "File I/O Latency" sub-tab shows per-file (not per-database) latency with queued overlay
  • Lite: File I/O → "File I/O Throughput" sub-tab shows read/write MB/s per file
  • CI passes (configuration issues analyzer + test procedures use updated column references)

🤖 Generated with Claude Code

erikdarlingdata and others added 2 commits February 25, 2026 12:00
…ued I/O overlay

**New features (both apps):**
- Add "File I/O Throughput" sub-tab with read/write MB/s charts per file
- Restructure "File I/O" tab into "File I/O Latency" and "File I/O Throughput" sub-tabs
- Add queued I/O overlay (dashed lines) to latency charts showing OS queue wait time

**Lite-specific:**
- Switch File I/O latency charts from database-level to file-level (top 10 by activity)
- Add io_stall_queued_read/write columns to DuckDB schema (v15 migration)
- Update collector to collect queued stall data from sys.dm_io_virtual_file_stats
- Use DuckDB LAG() window function for throughput MB/s interval calculation

**Dashboard-specific:**
- Fix double-brace interpolation bug in GetFileIoThroughputTimeSeriesAsync
  ({{dbFilter}}/{{dateFilter}} produced literal text instead of interpolating variables)

**CI fix:**
- Update 50_configuration_issues_analyzer.sql and 97_test_procedures.sql to remove
  references to warning columns dropped from collect.memory_grant_stats in Gap 1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove collect.session_wait_stats entirely — table, collector procedure,
reporting view, schedule entries, schema metadata, CI checks, and all
references. This collector had 12 columns and zero UI in either app.

Adds cleanup DROPs to 02_create_tables.sql so existing installations
get cleaned up on upgrade (drops view, procedure, table, schedule row).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@erikdarlingdata erikdarlingdata merged commit 4bdbc6d into dev Feb 25, 2026
7 checks passed
pull Bot pushed a commit to ehtick/PerformanceMonitor that referenced this pull request Apr 29, 2026
…manceStudio

Ports PerformanceStudio PRs erikdarlingdata#285 and erikdarlingdata#288 (net result; the temporary R/D/G
overlay from erikdarlingdata#285 was replaced by real icons in erikdarlingdata#288).

PlanIconMapper.GetIconName now takes optional storageType and logicalOp:
- Columnstore scans (Clustered/Index Scan with Storage="ColumnStore" on the
  Object element) route to the columnstore_index_* icons. Covers both CCI
  and NCCI for scan/delete/insert/update/merge.
- The three Parallelism subtypes (Repartition/Distribute/Gather Streams)
  route to their own icons instead of all sharing parallelism.png.

ShowPlanParser: the IconName assignment moves from immediately after PhysicalOp
parsing to after StorageType and LogicalOp are populated, so the new routing
has the inputs it needs.

Three new icons (MIT-licensed contribution from @rferraton via PS erikdarlingdata#288) added
to both Dashboard and Lite Resources/PlanIcons. The existing Resource glob
in each csproj picks them up automatically.

Last upstream sync from PerformanceStudio was 2026-04-16 (erikdarlingdata#856), scoped to
PlanAnalyzer + BenefitScorer. This is a follow-up scoped to plan-viewer
icon routing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant