Terms like — p95, p90, p99, etc. — refer to percentiles in a dataset.

Here’s what they mean simply:

TermMeaningExample (Response Time ms)Interpretation
p5050th percentile (median)200 ms50% of requests are faster than 200 ms
p9090th percentile400 ms90% of requests are faster than 400 ms (10% are slower)
p9595th percentile500 ms95% of requests are faster than 500 ms (5% are slower)
p9999th percentile900 ms99% of requests are faster than 900 ms (1% are very slow)

💡 In performance monitoring

Percentiles are used to understand tail latency or worst-case behavior — not just the average.

For example:

  • Average (mean) latency might be 200 ms,
  • But p95 = 600 ms → means 5% of users experience much slower responses.

🧠 Quick takeaway

  • p50 → typical user experience
  • p90/p95 → “almost all” users’ experience
  • p99 → rare but important slow cases

For example, here are the core web vitals

Here is a typical Azure AppInsights KQL query for Web Vitals

customMetrics
| where name in ("WebVital_TTFB", "WebVital_LCP", "WebVital_FID", "WebVital_INP", "WebVital_CLS")
| summarize
    p50 = round(percentile(value, 50), 0),
    p75 = round(percentile(value, 75), 0),
    p90 = round(percentile(value, 90), 0),
    p95 = round(percentile(value, 95), 0),
    p99 = round(percentile(value, 99), 0)
    by name