Docs | Src |   A-  |  A+   | -/-

Metadata
sourcehttps://www.solarwinds.com/blog/why-percentiles-dont-work-the-way-you-think
created2026-05-06
byopenai:gpt-5.4
style번호식

(요약) Why Percentiles Don’t Work the Way You Think

  1. 고객들은 메트릭의 p99(99백분위수, 99th percentile)를 자주 요청함.
  2. 작성자는 Database Performance Monitor(DPM)에 이런 기능을 추가할 계획임.
  3. 그러나 많은 고객이 실제로 원하는 것은 메트릭의 99백분위수가 아니라, 99백분위수의 메트릭(metric of 99th percentile) 임.
  4. 이는 Graphite 같은 시스템에서 매우 흔한 방식임.
  5. 하지만 이 방식은 사람들이 흔히 기대하는 효과를 내지 못함.
  6. 이 글은 백분위수가 어떻게 사람을 속일 수 있는지, 그 오류나 문제의 정도가 어느 수준인지, 그리고 백분위수 메트릭이 맞지 않을 때 무엇을 할 수 있는지 설명함.

Away From Averages

  1. 지난 몇 년 동안 모니터링에서 평균(average)의 문제점이 많이 논의되기 시작했음.
  2. 이 주제가 널리 논의되는 것은 긍정적임.
  3. 오랫동안 평균은 깊은 검토 없이 받아들여졌음.
  4. 평균은 모니터링에서 도움이 되지 않을 수 있음.
  5. 평균만 보면 이상치(outlier)를 놓칠 수 있음.
  6. 그리고 이상치는 평균보다 훨씬 더 중요할 수 있음.
  7. 이상치가 있는 상황에서 평균에는 두 가지 문제가 있음.
  8. 첫째, 평균은 이상치를 가려서 보이지 않게 함.
  9. 둘째, 이상치는 평균을 왜곡하므로, 이상치가 있는 시스템에서 평균은 전형적 행동을 대표하지 못함.
  10. 따라서 불규칙한 동작을 하는 시스템의 메트릭을 평균내면 최악의 조합이 발생함.
  11. 즉, 전형적 행동도 보이지 않고 비정상적 행동도 보이지 않음.
  12. 그리고 대부분의 시스템에는 많은 이상치 데이터 포인트가 존재함.
  13. “롱테일(long tail)”의 극단값을 보는 것은 중요함.
  14. 이는 상황이 얼마나 나빠질 수 있는지를 보여주기 때문임.
  15. 평균에 의존하면 이런 점을 놓치게 됨.
  16. Amazon의 Werner Vogels는 AWS re:Invent 기조연설에서 평균이 말해주는 것은 고객의 절반이 더 나쁜 경험을 하고 있다는 것뿐이라고 말했음.
  17. 이 말은 취지상 맞지만 실무적으로 정확히 일치하지는 않음.
  18. 구체적으로는 중앙값(median), 즉 50백분위수(50th percentile)가 그런 성질을 제공함.
  19. Optimizely는 이 블로그 글에서 평균이 왜 역효과를 낼 수 있는지 잘 설명했음.
  20. 해당 글은 평균 응답시간을 보는 것은 병원의 평균 체온을 재는 것과 같다고 비유했음.
  21. 실제로 중요한 것은 각 환자의 체온이며, 특히 가장 도움이 필요한 환자들이라고 설명했음.
  22. Brendan Gregg도 평균은 실용적 용도는 많지만 분포(distribution)를 제대로 이해하는 데에는 적합하지 않다고 설명했음.

And Towards Percentiles

  1. 백분위수(percentiles), 더 넓게는 분위수(quantiles)는 평균의 근본적 문제를 우회하는 방법으로 자주 칭찬받음.
  2. 99백분위수의 개념은 데이터 집단(population)을 정렬한 뒤 최악의 1%를 버리고 남은 값 중 가장 큰 값을 보는 것임.
  3. 이 값에는 두 가지 중요한 성질이 있음.
  4. 첫째, 이는 99%의 시간에 발생하는 값 중 가장 큰 값임.
  5. 예를 들어 웹페이지 로드 시간이라면 방문자의 99%가 겪는 최악의 경험을 나타냄.
  6. 둘째, 이는 진짜 극단적 이상치에 대해 강건함.
  7. 이런 이상치는 측정 오류 등 다양한 원인에서 발생함.
  8. 꼭 99%를 선택할 필요는 없음.
  9. 흔한 대안으로는 90백분위수, 95백분위수, 99.9백분위수 등이 있음.
  10. 이 지점에서 많은 사람은 평균은 나쁘고 백분위수는 좋으니 백분위수 메트릭을 계산해 시계열 데이터베이스(time series database)에 넣으면 된다고 생각함.
  11. 그러나 그렇게 단순하지 않음.

How Time Series Databases Store and Transform Metrics

  1. 대부분의 시계열 데이터와 백분위수 사이에는 큰 문제가 존재함.
  2. 시계열 데이터베이스는 원래 측정된 전체 이벤트 집단(full population)이 아니라, 시간 구간별 집계 메트릭(aggregate metrics)을 저장하는 경우가 거의 전부임.
  3. 그리고 시계열 데이터베이스는 여러 방식으로 이 메트릭들을 다시 평균냄.
  4. 가장 중요한 첫 번째 경우는, 저장된 해상도와 다른 시간 해상도로 조회할 때 데이터를 평균내는 것임.
  5. 예를 들어 하루치 메트릭을 600px 너비 차트로 그리면 각 픽셀은 144초의 데이터를 나타냄.
  6. 이 평균 과정은 암묵적으로 일어나며 사용자에게 공개되지 않음.
  7. 작성자는 여기에 경고 문구라도 붙여야 한다고 말함.
  8. 두 번째 경우는 장기 저장을 위해 더 낮은 해상도로 아카이브할 때 데이터를 평균내는 것임.
  9. 거의 모든 시계열 데이터베이스가 이렇게 함.
  10. 따라서 여전히 어떤 형태로든 평균을 다루고 있는 셈임.
  11. 그리고 백분위수의 평균은 작동하지 않음.
  12. 백분위수를 계산하려면 원래 이벤트 집단이 필요하기 때문임.
  13. 수학 자체가 성립하지 않음.
  14. 백분위수의 평균은 무의미함.
  15. 다만 그 결과가 낳는 영향은 상황에 따라 다름.
  16. 많은 모니터링 소프트웨어는 저장된 백분위수 메트릭과 리샘플링(resampling)된 백분위수 메트릭 사용을 장려함.
  17. 예를 들어 StatsD는 원하는 백분위수에 대한 메트릭을 계산하게 해줌.
  18. 그리고 foo.upper_99 같은 이름의 메트릭을 생성해 주기적으로 내보내 Graphite에 저장하게 함.
  19. 원하는 시간 해상도가 절대 리샘플링되지 않는다면 괜찮음.
  20. 그러나 실제로는 그렇지 않음.
  21. 이런 계산 방식에 대한 혼란은 매우 널리 퍼져 있음.
  22. StatsD GitHub 이슈의 관련 댓글을 보면 이를 잘 알 수 있음.
  23. 그중 일부는 사실과 맞지 않는 말을 하고 있음.
  24. 이 문제를 가장 간결하게 표현하면 다음과 같음.
  25. 백분위수는 데이터 집단으로부터 계산되며, 집단 즉 시간 구간이 바뀔 때마다 다시 계산되어야 함.
  26. 전통적인 메트릭을 저장하는 시계열 데이터베이스에는 원래 데이터 집단이 없음.

Alternative Ways To Compute Percentiles

  1. 웹페이지 로드 시간처럼 개별 이벤트의 원래 집단이 필요하다면 큰 문제가 생김.
  2. 이는 정확히 말해 빅데이터(Big Data) 문제임.
  3. 백분위수는 이런 이유로 계산 비용이 매우 큰 것으로 악명 높음.
  4. 하지만 전체 집단을 보관하고 정렬하는 것에 거의 준하는 수준의 근사 백분위수(approximate percentiles) 계산 방법이 많이 존재함.
  5. 관련 학술 연구도 매우 많음.
  6. 한 방법은 히스토그램(histograms)임.
  7. 히스토그램은 값을 범위 또는 빈(bin)으로 나누고 각 범위에 얼마나 많이 속하는지 셈함.
  8. 또 다른 방법은 근사 스트리밍 데이터 구조와 알고리즘(sketches)임.
  9. 또 다른 방법은 집단에서 샘플링하여 빠른 근사 답을 제공하는 데이터베이스임.
  10. 시간, 공간, 또는 둘 다에 제한을 둔 해법도 존재함.
  11. 이런 해법들의 핵심은 대체로 집단의 분포(distribution)를 어떤 방식으로든 근사하는 것임.
  12. 분포로부터 근사 백분위수뿐 아니라 다른 흥미로운 정보도 계산할 수 있음.
  13. Optimizely 블로그 글에는 응답시간 분포와 평균, 99백분위수를 보여주는 좋은 예시가 있음.
  14. 근사 분포를 계산하고 저장하는 방법은 많음.
  15. 그중 히스토그램은 상대적으로 단순해서 인기 있음.
  16. 일부 모니터링 솔루션은 실제로 히스토그램을 지원함.
  17. 예를 들어 Circonus가 그러함.
  18. Circonus CEO Theo Schlossnagle는 히스토그램의 장점을 자주 설명함.
  19. 궁극적으로 원래 집단의 분포를 가진다는 것은 백분위수 계산 이상의 의미가 있음.
  20. 분포는 백분위수보다 훨씬 더 많은 것을 드러냄.
  21. 백분위수는 결국 많은 정보를 대표하려는 하나의 숫자일 뿐임.
  22. 작성자는 Theo가 트윗에서 “99th percentile is as bad as an average”라고 말한 정도까지는 동의하지 않음.
  23. 작성자는 백분위수 지지자들처럼, 백분위수가 평균보다 원래 집단의 중요한 특성을 더 잘 대표한다고 봄.
  24. 그러나 히스토그램만큼 잘 대표하지는 못함.
  25. 히스토그램은 훨씬 더 세밀함.
  26. 위의 Optimizely 차트는 어떤 단일 숫자보다 훨씬 많은 정보를 담고 있음.

Percentiles Done Better in Time Series Databases

  1. 시계열 데이터베이스에서 백분위수를 더 잘 계산하는 방법은 밴드형 메트릭(banded metrics)을 수집하는 것임.
  2. 이 설명은 많은 시계열 데이터베이스가 히스토그램을 저장할 능력이 없는, 이름 붙은 값의 정렬된 타임스탬프 집합일 뿐이라는 가정 위에 있음.
  3. 밴드형 메트릭은 시간에 따른 일련의 히스토그램과 같은 효과를 제공함.
  4. 방법은 값의 공간을 여러 범위 또는 밴드로 나누는 경계를 선택하는 것임.
  5. 그리고 각 밴드에 대해 시간에 따라 메트릭을 계산하고 저장함.
  6. 이 메트릭은 히스토그램과 마찬가지로 해당 범위에 속하는 관측치 수(count)임.
  7. 적절한 범위를 고르는 것은 일반적으로 어려운 문제임.
  8. 흔한 해법으로는 로그 스케일 범위(logarithmic ranges)가 있음.
  9. 또는 일정한 유효 자릿수(significant digits)를 제공하는 범위가 있음.
  10. 이런 방식은 균일하게 증가하지 않는 대신 계산이 더 빠를 수 있음.
  11. 균등 분할(even divisions)은 좋은 선택이 아닌 경우가 드묾.
  12. 이 주제에 대해서는 Brendan Gregg의 훌륭한 글을 읽어볼 것을 권함.
  13. 근본적인 긴장은 보존되는 데이터 양과 해상도의 세밀함 사이에 있음.
  14. 그러나 거친 밴딩(coarse banding)만으로도 단순 평균보다 더 많은 것을 보여줄 수 있음.
  15. 예를 들어 Phusion Passenger Union Station은 11개 밴드를 사용해 요청 지연시간(latency)의 밴드형 메트릭을 보여줌.
  16. 작성자는 그 시각화가 가장 효과적이라고 생각하지 않음.
  17. y축의 의미가 혼란스럽고, 본질적으로 3차원 차트를 비선형 방식으로 2차원에 매핑한 형태라고 봄.
  18. 그럼에도 불구하고 평균보다 더 많은 세부 정보를 보여줌.
  19. 이를 인기 있는 오픈소스 시계열 도구로 구현하려면 범위를 정의하고 예시와 같은 누적 차트(stacked charts)를 만들어야 함.
  20. 여기서 백분위수를 계산하는 것은 훨씬 더 어려움.
  21. 가장 큰 밴드부터 가장 작은 밴드까지 역순으로 순회하며 누적합을 계산해야 함.
  22. 누적합이 전체의 1%를 넘지 않는 지점에 도달하면 그 밴드가 99백분위수를 포함함.
  23. 여기에는 많은 미묘한 사항이 존재함.
  24. 예를 들어 엄격 부등식 처리, 경계 사례(edge cases) 처리, 백분위수 값으로 무엇을 사용할지 등이 있음.
  25. 상한 빈 경계(upper bin limit)를 쓸지, 하한을 쓸지, 중간값을 쓸지, 가중치를 둘지 등을 결정해야 함.
  26. 수학도 혼란스러울 수 있음.
  27. 예를 들어 99백분위수를 계산하려면 최소 100개 밴드가 필요하다고 생각할 수 있음.
  28. 그러나 실제로는 경우에 따라 다름.
  29. 두 개의 밴드만 있어도, 상위 밴드에 전체 값의 1%가 들어 있다면 이미 99백분위수를 구한 셈임.
  30. 이것이 직관에 반한다면 분위수(quantiles)를 깊이 생각해볼 가치가 있다고 작성자는 말함.
  31. 따라서 이 문제는 복잡함.
  32. 추상적으로는 가능함.
  33. 하지만 대체로 데이터베이스의 질의 언어(query language)가 근사 백분위수를 구하는 데 필요한 계산을 지원하는지에 달려 있음.
  34. 작성자는 이것이 확실히 가능한 시스템이 있다면 댓글로 알려달라고 말함.
  35. Graphite처럼 모든 메트릭이 자유롭게 평균 및 리샘플링 가능하다고 순진하게 가정하는 시스템에서는 밴드형 메트릭의 장점이 있음.
  36. 밴드형 메트릭은 이런 변환에 강건함.
  37. 계산이 모든 시간 구간에 대해 교환법칙(commutative)을 만족하기 때문에 올바른 답을 얻을 수 있음.

Beyond Percentiles: Heatmaps

  1. 백분위수는 평균과 마찬가지로 여전히 하나의 숫자임.
  2. 평균은 집단의 무게중심(center of gravity)을 보여준다고 할 수 있음.
  3. 백분위수는 집단의 일정 부분에 대한 고수위선(high-water mark)을 보여줌.
  4. 작성자는 백분위수를 해변의 파도 자국(wave marks)에 비유함.
  5. 이는 평균처럼 중심 경향만이 아니라 집단의 경계를 드러내기는 함.
  6. 그러나 여전히 전체 집단의 형태(shape)를 보여주는 분포만큼 설명력이 높지 않음.
  7. 이 지점에서 히트맵(heatmaps)이 등장함.
  8. 히트맵은 본질적으로 히스토그램을 옆으로 눕혀 쌓고, 이를 시간에 따라 수집하며, 색의 진하기로 시각화한 3차원 차트와 같은 것임.
  9. 다시 말해 Circonus는 히트맵 시각화의 훌륭한 예를 제공함.
  10. 반면 작성자가 알기로 Graphite는 밴드형 메트릭으로 히트맵을 만드는 능력이 없음.
  11. 만약 영리한 방법으로 가능하다면 알려달라고 작성자는 말함.
  12. 히트맵은 특히 지연시간의 형태와 밀도(density)를 시각화하는 데 훌륭함.
  13. 또 다른 예로 Fastly의 스트리밍 대시보드가 있음.
  14. 심지어 원시적으로 보일 수 있는 오래된 도구도 히트맵을 만들 수 있음.
  15. 예를 들어 Smokeping은 음영(shading)을 사용해 값의 범위를 보여줌.
  16. 그중 밝은 초록색은 평균을 나타냄.

How Bad Is It To Store Metrics Of Percentiles?

  1. 이런 복잡성과 미묘함을 본 뒤에는 StatsD의 upper_99 같은 백분위수 메트릭도 그렇게 나쁘지 않아 보일 수 있음.
  2. 이런 방식은 단순하고 효율적이며 즉시 사용 가능한(turnkey) 해법임.
  3. 그렇다면 실제로 얼마나 나쁜지가 문제임.
  4. 답은 상황에 따라 다름.
  5. 많은 목적에서는 이런 방식으로도 전혀 괜찮음.
  6. 물론 백분위수 자체가 단독으로는 설명력이 높지 않다는 한계는 여전히 있음.
  7. 그러나 그 점을 감수할 수 있다면, 남는 가장 큰 문제는 리샘플링 과정에서 값이 훼손되어 결국 틀린 데이터를 보게 된다는 점임.
  8. 하지만 모든 측정은 틀리다는 말도 있음.
  9. 그리고 많은 틀린 측정값도 여전히 유용함.
  10. 예를 들어 작성자는 사람들이 모니터링 시스템에서 쓰는 메트릭의 절반은 이미 의도적으로 변형된 값이라고 봄.
  11. 부하 평균(load average)이 그 예임.
  12. 부하 평균은 매우 유용함.
  13. 그러나 그 내부 계산 방식을 알게 되면 처음엔 꽤 놀랄 수 있음.
  14. 비슷하게 널리 사용되는 많은 시스템은 성능에 대한 부분적으로 가공된 메트릭을 보고함.
  15. Cassandra의 여러 메트릭은 Coda Hale의 Metrics 라이브러리 출력값임.
  16. 그리고 이것들은 시간 감쇠 평균(time-decayed averages), 즉 지수 가중 이동 평균(exponentially weighted moving averages)임.
  17. 어떤 사람들은 이런 방식에 강한 거부감을 보임.
  18. 다시 백분위수 메트릭으로 돌아오면, p99 메트릭을 저장한 뒤 확대를 풀어 긴 시간 범위의 평균 버전을 보게 되면 그것은 “올바른” 값이 아닐 수 있음.
  19. 그리고 실제 99백분위수와 꽤 다를 수도 있음.
  20. 그러나 그 값이 틀린 방식이 반드시 목적에 부적합하게 만들지는 않음.
  21. 여기서 목적이란 대다수 사용자가 애플리케이션에서 겪는 최악의 경험을 이해하는 것임.
  22. 정확한 값이나 오차와 무관하게, 백분위수 메트릭은 대체로 두 가지 성질을 가짐.
  23. 첫째, 이상 행동(outlying behavior)을 보여줌.
  24. 둘째, 이상 행동이 더 나빠질수록 값도 더 커짐.
  25. 이는 매우 유용함.
  26. 따라서 다시 말해 상황에 따라 다름.
  27. 백분위수의 작동 방식과 백분위수 평균이 틀렸다는 사실을 이해하고도 괜찮다면, 백분위수 메트릭을 저장하는 것이 여전히 유용할 수 있음.
  28. 그러나 이는 일종의 도덕적 해이(moral hazard)를 도입함.
  29. 자신이 무엇을 했는지 모르는 사람들, 특히 동료들을 깊이 혼란스럽게 만들 수 있기 때문임.
  30. StatsD 이슈의 댓글만 다시 봐도 그 혼란이 분명함.
  31. 작성자는 나쁜 비유 하나를 제시함.
  32. 작성자는 냉장고 안의 어떤 음식과 음료는 자신은 먹고 마셔도 남에게는 주지 않는다고 말함.
  33. 병에 “alcohol”이라고 적혀 있는데 실제로 메탄올(methanol)이 들어 있다면 어떤 사람은 마시고 실명할 수도 있음.
  34. 다른 사람은 병 안에 어떤 종류의 알코올이 들어 있는지 물을 것임.
  35. 이런 위험에 대한 책임을 져야 한다는 뜻임.

What Does DPM Do?

  1. 글 작성 시점 기준으로 DPM의 시계열 데이터베이스는 히스토그램을 지원하지 않음.
  2. 그리고 백분위수 메트릭을 계산해 저장하지도 않음.
  3. 다만 원한다면 사용자 정의 메트릭(custom metrics)을 쉽게 보낼 수 있음.
  4. 향후에는 고해상도, 즉 많은 밴드를 가진 밴드형 메트릭을 저장할 계획임.
  5. 대부분의 밴드는 아마 비어 있을 것이며, DPM의 시계열 데이터베이스는 희소 데이터(sparse data)를 효율적으로 처리할 수 있기 때문에 이것이 가능함.
  6. 이는 본질적으로 초당 한 번의 히스토그램을 제공하게 됨.
  7. DPM의 모든 시계열 데이터는 1초 단위 세분성(granularity)을 가짐.
  8. 기본적으로 3일인 설정 가능한 보존 기간이 지난 뒤에는 데이터를 1분 단위 세분성으로 다운샘플링함.
  9. 밴드형 메트릭은 어떤 수학적 이상 현상 없이 1분 단위 히스토그램으로 다운샘플링될 것임.
  10. 최종적으로 이 밴드형 메트릭으로부터 원하는 어떤 백분위수도 계산할 수 있게 될 것임.
  11. 그리고 값의 추정 오차를 표시할 수 있게 될 것임.
  12. 히트맵도 보여줄 수 있게 될 것임.
  13. 분포의 형태도 보여줄 수 있게 될 것임.
  14. 이는 빠르게 끝날 프로젝트가 아님.
  15. 많은 시스템 전반에 걸친 대규모 엔지니어링이 필요함.
  16. 그러나 기반은 이미 존재함.
  17. 시스템도 결국 이를 지원하도록 설계되었음.
  18. 언제 구현될지는 약속할 수 없음.
  19. 다만 장기적인 방향성을 알리는 것이 유익할 것이라고 작성자는 생각함.

Conclusions

  1. 작성자는 이 글이 예상보다 길어졌고 많은 주제를 다뤘다고 말함.
  2. 이 글이 도움이 되었기를 바란다고 말함.
  3. 작성자 Baron은 성능(performance)과 확장성(scalability) 전문가임.
  4. 그는 다양한 데이터베이스, 오픈소스, 분산 시스템 커뮤니티에 참여함.
  5. 그리고 많은 대규모 시스템의 구축과 확장을 도운 경력이 있음.