Skip to content

Large traces and performance

Perseval is designed to keep trace size out of the UI’s retained-object count.

Perseval Full Trace timeline using a bounded loaded window while preserving chronological selection

  • run pages: at most 200 rows;
  • span pages: at most 500 rows;
  • cached pages: at most 8 per list;
  • UI delta application: at most 512 coalesced deltas per frame;
  • finalized topology: persisted once rather than reconstructed during queries;
  • child loading: lazy by direct parent;
  • payload display: explicit and bounded.

Selection uses stable identities rather than vector indices. Loading a new batch does not reload the complete trace.

The current development suite has streamed and explored deterministic 20,000- and 100,000-span fixtures without an observed crash or swap. In the recorded 100,000-span run, peak physical footprint was approximately 200 MiB and the UI retained about 1,001 visible/cached rows rather than all spans.

Recorded live release-profile ingestion on the qualification machine was approximately:

FixtureIngest and projection time
20,000 spans18.6 seconds
100,000 spans150.8 seconds

Warm summary and page queries remained within the development acceptance budget.

The scale fixtures are deterministic expansions of real agent-trace shapes. They qualify paging, topology, storage, and responsiveness. They do not prove production prevalence, every vendor mapping, broken-trace reconstruction quality, or SpanLink behavior at the same scale.

  • send retryable batches instead of one maximum-size request;
  • keep attributes bounded and externalize payload-like content;
  • preserve parent IDs and SpanLinks;
  • use explicit project/build/session identity;
  • watch queue, journal, projection, and analysis counters separately.

If a trace is slow to explore, narrow the active project/build/session scope, expand only relevant branches, and use search on loaded pages. Full Trace intentionally avoids an unbounded “load all spans” operation.