平均値は意味をなさない:レイテンシ問題をデバッグするデータ可視化
The mean means nothing: data visualization to debug a latency problem
平均値だけを見ればパフォーマンス改善は失敗に見えますが、中央値やパーセンタイルを分析すると真逆の結果が得られることがあります。私は累積分布関数(CDF)やリッジラインプロットなどの可視化手法を用いて、データの全体像を捉える重要性を説きます。単一の数値に頼らず、データの形状を直接見ることで、隠された回帰や複雑なパターンを正しく診断できるようになります。
2つの CDF が交差していることは、単一のパーセンタイルでは要約できない変化の明確な兆候です。なぜなら、その変化の正負は、あなたがどのパーセンタイルを問うかによって決まるからです。
HNでの議論
17- tzone
個人的な意見ですが、平均値は収集できる統計データの中で最も大きなマイナスになるものの一つです。平均値が役立つのはスループット合計を計算する場合だけなので、むしろそのスループット合計だけを収集する方がずっと良いです。平均値の統計データとは異なり、スループット合計は混乱や多数のミスを招くことがありません。
平均値の統計データには多くの問題があります。人々がよく誤解するという事実だけでなく、収集やグラフ化の過程でも、最終的に「平均値の平均値」のようなグラフになってしまうことが多く、それではさらに役に立たず、完全に意味をなさなくなります。
メトリクスや監視システムで適切な分布やパーセンタイルを収集・グラフ化できないのであれば、そのシステムを変えるべきです。
- danbruc
CDF(累積分布関数)そのものよりも、1 から CDF を引いた値、つまり任意の時点でまだ完了していないリクエストの割合を使うのが好きです。そうすれば、CDF では尾(テール)が本質的に 1 の水平線に隠れて見えない詳細部分を含め、尾全体をログ・ログプロットで表示できるようになります。
- jldugger
著者がパフォーマンス作業をしていたのに、すでに分布を比較していなかったことは少し驚きです。記事の残りの部分で説明されている通り、より多くのデータがあれば、より多くのことが学べます!
複雑ですが、リアルタイムのサービスデータ用のダッシュボードが欲しいなら、Prometheus と Grafana のヒートマップがどう組み合わさるかを学ぶのは本当に価値があります。分散システムで行われるあらゆるキャッシュを考えると、多峰分布はほぼ予想される結果です。