Repository navigation
Say where the data starts on every time-ranged tab, in Lite and both Darling viewers #4966
Description
What happens
When a time range starts before a server's data coverage, most tabs draw the shorter range with no notice. Coverage starts at the later of the server's first collection by the table's collector and the table's retention edge. Retention or a newly added server can put it after the range's start. A reader can take the missing span for a quiet period.
#4953 adds a "where the data starts" notice to Custom Views panels, and to Active Queries and Current Waits in Lite and the Darling viewer. The Queries tab and its MCP tools already had one. This issue covers every other time-ranged surface.
Lite: 48 surfaces
The list comes from #4958. Each table's retention and read shape was not checked. (seen: the list)
- Overview and Wait Stats.
- Queries: Performance Trends, Plan Corrections and Query Heatmap.
- CPU, Memory (4 sub-tabs), File I/O (2), tempdb, Perfmon, Running Jobs, Daily Summary, Latches and Spinlocks, CPU Scheduler, Plan Cache and Session Stats.
- Blocking: Trends, Blocked Process Reports, Deadlocks and Blocking Stats.
- Collection Health (3), System Events (11), Config Changes (3) and Long Queries.
- Configuration (6 sub-tabs). These may read only the newest snapshot, which needs no notice. (inferred)
- The other MCP tools that take a time range.
Darling desktop viewer
Tabs over tables that keep 30 days can show a custom range past 30 days with no notice. A new server's short history shows the same way. Only Active Queries, Current Waits and the Queries tab carry the banner. (inferred until each tab is checked)
Darling web viewer
The server page offers ranges up to 7 days. It shows a notice when a read's own limit narrows the window (keptWindowStrip in util.js). The query trend panel also notes window_truncated. No other panel says where the stored rows start. So a server added 2 days ago shows 2 days under "last 7 days" with no notice. (inferred from the page code)
How
The parts exist already:
- The notice keys on where collection or retention starts, not on the oldest stored row. A sparse table can hold no row near the range's start though the store covered it, and that is no reason for a notice.
- Lite:
GetQueryWindowFloorAsynctakes a closed set of views (QueryWindowRelation). For a coverage view, the collector's runs inv_collection_logcount as well as rows. Each new surface needs an enum member, its view and the collector it reads coverage from. It also needs a banner, and a call at each read path throughApplyWindowFloorToBanner. - Darling:
DataWindowFloorprobes any collector table whose index leads with(server_id, <time>). Coverage starts at the later of the registry'screated_dateand the purge edge from the fleet schedule. A table the schedule gives no edge keeps its oldest row. The viewer and the web runner already call it. - Check each surface first. A tab that reads only the newest snapshot needs no notice. A chart whose time axis spans the asked range already shows the empty span. A grid or a list hides it.
Done when
- Each surface in the three lists has a result: a notice, or the reason it needs none.
- Each surface that gets a notice has a test that stores rows starting inside the range and reads the notice back.
- Each one also has a quiet-start test: the store covered the whole range, but its first row comes late. It shows no notice.
Activity
Lite: the System Events and Default Trace banners name the oldest eve…
Lite: the Default Trace banner reads the server's wall-clock event ti…
Desktop viewer: a grid whose read hit its row cap says its data start…
Desktop viewer: data-start probes for the System Events and Default T…
Desktop viewer: the System Events and Default Trace grids say where t…
Tests for the heatmap's empty columns, a capped grid's banner, the Me…
The heatmap draws a column for every bucket of the asked range, a cap…
Web server page: a capped Waiting Tasks grid names the oldest row it …
The Query Heatmap's columns start at its data-start notice's time whe…
Desktop viewer: store-backed tests for the System Events, Default Tra…
Desktop viewer: the Long Queries data-start probe, its row cap and th…
Desktop viewer: the Long Queries grid says where its data starts (#4966)
Plan Corrections: a row cap pinned to its LIMIT and a data-start prob…
Plan Corrections: the grid raises the Showing since banner from its p…
126 remaining items
Fit the window-keys sentence in the Darling instructions budget; upda…
Keep each empty answer's factual sentence on a cut window and replace…
MCP: seventeen Darling PostgreSQL tools say where their data starts, …
MCP: get_store_query_history reads the Darling store's hourly stateme…
Web: the system-health, Blocking, Deadlocks and PostgreSQL event pane…
Lite.Tests: seed the #4966 window-notice classes in one transaction p…
MCP: quiet and all-clear messages no longer contradict a cut window (…
Cut-window empty answers: switch session states and index usage, make…
MCP: stop calling a cut window quiet on eight more PostgreSQL empty a…
erikdarlingdata commentedon Oct 5, 2026
Closing this issue. #5285, the last code PR for it, landed on dev in e19984d.
These reads were checked, and each one deliberately gets no data-start notice:
None of these needs a code change.
WEB: Memory Grants, Resource Semaphore, Plan Corrections and the Quer…
Release 3.10.0 (#5645)