Performance & Latency

p99 (99th Percentile)

Also known as: 99th percentile, p99 latency

Definition

p99 is the latency value below which 99% of requests complete — one request in a hundred is slower. It is the standard SLO target because it describes the experience of the unlucky tail rather than the typical case, and unlike the mean it cannot be dragged down by fast requests.

Last reviewed · Part of the Architecture Glossary

In practice

Two properties of percentiles that trip people up:

They do not average. The mean of three services' p99s is not the p99 of the composite. To combine percentiles you need the underlying distributions (or a histogram-based store like Prometheus, which is exactly why histogram_quantile exists rather than a p99 gauge).

They need volume. p99 over 100 requests is one data point — noise. A useful p99 needs at least a few thousand requests in the window; a low-traffic endpoint should be measured at p95 or over a longer window.

Which percentile to target:

PercentileReads as
p50The typical request — useless as an SLO, useful for regressions
p95Common target for internal services
p99Standard user-facing target
p99.9Meaningful only above ~100k requests/window; often dominated by GC and retries

When it matters

SLO definition, capacity planning, load-test acceptance criteria, and any latency alert that should page a human.

Common mistake

Measuring p99 client-side from a load generator with a fixed thread count. That produces coordinated omission: the slow requests hold back the very requests that would have shown the true tail, and the reported p99 can be off by an order of magnitude.

See also

Go deeper