KDOC 622: 全体計測してから内訳に進む
この文書のステータス
- 作成
- 2026-09-18 貴島
- レビュー
- 2026-09-18 貴島
概要
前提。
- 巨大なデータが流れる非同期サーバがある
- ジョブ1つ1つは任意の長さの配列を持ち、長い場合も短い場合もある。また、配列の要素は複数の種別がありうる。種別によって処理が異なる
自分は1つの種別を取り上げて、処理の内訳を計測してボトルネックを確認し、最適化を行った。テスト環境でのその種別のスループットは大きく改善し、最適化はうまくいったように見えた。
しかし、後で本番環境のデータを確認したところ、種別ごとの要素数に偏りがあると判明した。最適化に取り組んだ要素はデータ全体の3%しかなく、本番環境での効果はテスト環境ほどなかった。
大事なことは、内訳へ入る前に全体の分布を正しく把握しておくことだと考えた。
関連
抽象。
- 部分の改善は、その部分が全体に占める割合までしか効かない
- 試験の環境と本番で分布が違うと、効果の見積もりがずれる
関連。
- 対比: KDOC 277: パッケージマネージャの依存関係解決には計算コストがかかる。遅さが一つの工程に集中していれば、そこだけの改良で全体が顕著に速くなる、という逆の場合
- 補足: KDOC 576: 『ザ・ゴール』。全体の能力はボトルネックで決まり、ほかを個別に最大化しても全体は良くならないという考え方
- 類似: KDOC 580: 複合インデックスは等価条件、範囲条件の順にすると速い。支配的なコストが別にあると、一部を改善しても全体の時間が変わらない例