Dev Study
← 研修トップ

性能分析の土台

その数字は、何を測ったことになっているのか。平均は実在の1回を指さず、使用率は占有率でしかなく、測ること自体に費用がかかります。観測器が現象より粗ければ、起きていることが「無い」ように見える。道具の使い方ではなく、出てきた数字をどう疑うかを、一次ソースと実測から積み上げます。

  1. 1
    速いとは何か — 3つ目の量
    レイテンシとスループットの2つだけでは、性能の状態を言い当てられません。スループットが同じでレイテンシが7倍違う状態が、実際に作れます。
    約 9 分
  2. 2
    平均は、誰のことも指していない
    平均は計算で作られた値なので、実在の1回と一致する保証がありません。パーセンタイルは並べて何本目かを取る値なので、必ず実在の1回を指します。
    約 9 分
  3. 3
    測ることが、対象を変える
    観測にはかならず費用がかかります。その費用が測りたい現象より大きいと、出てきた数字はもう元の処理の性質ではありません。
    約 9 分
  4. 4
    余力は、待ち時間の購入代金
    1件あたりの仕事を増やさなくても、到着を増やすだけで応答時間は伸びます。増えたぶんは全部が「待ち」です。
    約 9 分
  5. 5
    写っていないことは、起きていない証拠ではない
    サンプリング型のプロファイラは一定の間隔で覗くだけなので、間隔より短い事象は確率でしか写りません。名前が出ない関数は、速いのではなく、覗いた瞬間に走っていなかっただけかもしれません。
    約 9 分
  6. 6
    ボトルネックは、1つずつしか見つからない
    直列につながった経路では、全体の時間は各段の足し算です。だから効くのは最大の項だけで、小さい項をどれだけ削っても全体はほとんど動きません。
    約 9 分
  7. 7
    使用率は、占有率でしかない
    使用率が答えているのは「その期間のうち、何割の時間ふさがっていたか」だけで、「あとどれだけ入るか」は答えていません。
    約 9 分
  8. 8
    時間はどこで消えたのか — 段ごとに測る
    所要時間は段ごとに分けないと「どこで消えたか」が分かりません。ただし段ごとの数字を出す道具は、区間ではなく開始からの累積を返すことがあります。
    約 9 分
  9. 9
    実行計画は、見積もりである
    実行計画に並ぶ数字は統計情報からの推定であって、実測ではありません。PostgreSQL 公式は、推定が的中した例の直後に but that's quite unusual in practice と書いています。
    約 9 分
  10. 10
    壊れる前に、何を測っておくか
    事故のあとに見えるのは、事故の前に残すと決めた数字だけです。Prometheus 公式は summary について you cannot "recalculate" the quantiles later と書きます。
    約 9 分