Skip to content
Nuvyntra Labs

Documentation

Request timeline

Wall-clock shares, overlapping calls counted once, and the possible-N+1 heuristic.

What a request stores

Each completed request keeps method, route, status code, trace id, exception type name, duration, and the operations recorded while that request was active.

OperationNameExtra
EndpointThe request itselfWall-clock duration of the middleware
DatabaseSQLRedacted command text in Development, duration, parameter count
HTTPDestination hostDuration and status code. Query string is omitted

The route is the endpoint pattern when ASP.NET Core assigned a RouteEndpoint. Otherwise it is the request path. Query strings are not part of the route.

Explain percentages

Explain percentages are a share of wall-clock time. Middleware, the endpoint, EF Core, and HTTP are nested, so adding their durations would count the same milliseconds more than once.

Overlapping calls are counted once, on the longer call. The timeline still lists every call with its own duration. Time that no database or HTTP call covers is attributed to Application.

The primary latency source is the contributor with the largest attributed duration. A request is slow when its duration is longer than SlowRequestThreshold (default 500 ms).

Possible N+1

N+1 is a heuristic. The same redacted SQL shape, repeated at least NPlusOneRepeatThreshold times in one request, is reported as a possible N+1. The default threshold is 8. Estimated unnecessary queries are count - 1.

The finding is a repeated shape, not a proven missing Include. Development may show the redacted command text, truncated to 160 characters. Production still counts the shape and then drops the text.

  • Duration exceeds the slow-request threshold, when it does.
  • Primary latency source and its share of this request.
  • Concurrent time that was counted once.
  • Each possible N+1, with the repeat count and the estimated unnecessary queries.

Discussion

Comment on ApiLens. The thread lives on this component's GitHub repository. Sign in with GitHub — Giscus uses Discussions, Utterances uses Issues.

Issues are not enabled on this repository

Open the conversation on GitHub, or use the Giscus tab if Discussions are available.