ピーク時になると応答時間が急激に悪化したので、とりあえずCPUとメモリを倍増しておけば大丈夫かな……と勘に頼って対応し、ドツボにはまった経験、ありませんか? この連載では、インフラエンジニアなら最低限理解しておきたい性能問題の基礎を解説します。(編集部)
前回「性能対策、できてますか?」では「待ち行列の基本」を解説しました。公式を覚えるだけではなく、少し実践的な解説にしようと試みましたが、いかがでしたか?
今回のテーマは、「平均値」と「パーセンタイル値」という統計値についてです。数学の勉強みたいですが、前回同様、もう一歩だけ実践的にしてみたつもりです。
測定したデータを“正しく読めること”は、性能対策に取り組む際の必須スキルの1つです。「ツールを使えば、測定結果はツールが示してくれるから、特別なスキルは必要ない」と思うのは間違いです。今回もやはり、基礎の中の基礎から、つまり測定データを読むスキルのうち最も基本的な部分から説明していきます。
さて、今回の問題は以下のとおりです。
ある機能の応答時間を測定したところ、平均値が500ミリ秒、90パーセンタイル値が350ミリ秒でした。これからどのような性能問題が考えられるでしょうか?
まず、この問題を読んで「あれ、なんかおかしいぞ?」と思っていただけたでしょうか。問題文は極端にシンプルですが、性能対策に関連するいろんな課題を隠しています。
少々解説が長くなりますが、レベルを順次上げながら説明していきます。最も「性能問題らしい」部分は後述するレベル3(5番目)で出てきます。それまで少し腰を据えて読んでください。
まず、パーセンタイル値がどういうものかを知らないと、この設問がおかしいかどうかは分かりません。
“90パーセンタイル”とは、測定結果を並べたもののうち90%が合格になるラインのことです。言い方を変えると、結果のうち、悪いもの10%を除外した中の最悪値がそれに当たります。
例として、測定値が以下のように10個あるとします(本来ならば測定値が10個では少なすぎますが、説明の便宜上少なくしています)。
2.7, 3.0, 4.5, 5.0, 5.0, 5.1, 5.8, 5.9, 7.0, 9.9 [単位: 秒]
90パーセンタイルとは、この例では総数10個のうちの10%、つまり1個だけを除外し、残り9個が合格になるラインです。従ってここでは7.0秒が90パーセンタイル値となります。説明から想像できるとおり、90パーセンタイル値は一般的に、全体の中でもかなり大きい方の値になります。
次に平均値ですが、これは誰もが知っているとおり「だいたい真ん中あたりになるはず」の値です。ちなみに、上記の例で平均値を計算すると、Σx/10=5.39≒5.4となって、直感的に想像したあたりの数字となっていることが分かります。
では、例題に話を戻します。
パーセンタイル値の意味を知っていれば、「平均値<90パーセンタイル値となるはず」と思うでしょう。従って「この例題の値はおかしい。あり得ないデータになったということは、測定が失敗しているのでは?」と推測できるようになれば、基本的な理解はできているといえます。
実際、もしかするとこれも正解かもしれません。 特異な事象が発現したために測定ツールが計算を間違える(要はツールのバグ)こともあり得ないことではありません。実際、過去の筆者の経験では、ツールの表示結果にどう考えてもおかしい数値が表示されたこともありました。
しかしこのケースでは、測定自体は失敗していない、つまり測定値そのものは正しいと仮定しましょう。
でも、ツールが測定している値や、計算結果として表示された値をうのみにし過ぎない慎重さが必要なことも確かです。
測定結果は間違っておらず、もちろん問題文の書き間違えでもないとします。では「平均値>90パーセンタイル値」になるのは、いったいどんな場合でしょうか。
この例題の本質は、「当たり前すぎて疑うことがない“平均値”というものの脆(もろ)さ」にあります。
一般にわれわれが「平均値」と呼んでいるものは「相加平均」です。測定値“すべて”を加算して測定数で割ったものを指します。この相加平均の特徴として、「少数の極端に大きな値(または小さな値)に影響されやすい」という点があります。言い換えると、平均値が「集団の特徴を示すのにふさわしい平均的な値」ではなくなってしまうことがあるのです。
先の10個の数列で、最大値の「9.9秒」を「30秒」に置き換えて計算してみましょう。
2.7, 3.0, 4.5, 5.0, 5.0, 5.1, 5.8, 5.9, 7.0, 30.0 [単位: 秒]
このとき、90パーセンタイル値は変わらず7.0秒ですが、平均値は7.4秒になり、90パーセンタイル値と逆転します。
つまり、この例題の正解は「少数の極端に大きな値に影響されてしまって、平均値が90パーセンタイル値を超えてしまうのはどんなケースか」を具体的に説明できるものでなくてはなりません。
測定には測定誤差が付きものですし、多数の採取サンプルの中には、考慮に入れるにはふさわしくない異常値が紛れ込むことがあります。性能測定の準備を入念に行っても、数万件に1個などの割合で異常値が紛れ込む可能があります。
本当に間が悪く、テストショット中にその異常値が入ってしまった場合に、平均値の計算が狂います。10倍もの異常値が測定された場合でも、1万件中の1件ならば影響はたかが0.1%ですが、測定サンプルが10個しかなかったら、影響は100%(本来の値の2倍)にもなります。
少数の異常値の影響を少なくするには、例えば高負荷テストをする際には、測定時間をある程度長くするとよい検証ができます。
性能測定を短時間だけ、かつ、1発だけやって終わりにしてしまうなどというのは、テストの方法としてはかなり稚拙だといわざるを得ません。テストのシナリオに組み込んだ機能数(画面数)や予想する応答時間を考慮して、十分な実行時間を確保して実施するようにしないといけません。対象システムにもよりますが、少なくとも1回のテストショットで30分〜1時間くらいは継続する必要があるでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.