商用データベースに匹敵するWebシステム構築手法 7

出力キャッシュの効果

出力キャッシュの効果

   リスト11は、その出力キャッシュのベンチマーク測定のテストスクリプトです。


リスト11:出力キャッシュのテストスクリプト

$sql = "SELECT * FROM zipcode WHERE zip like '100%'";

if (empty($_GET['nocache'])) {
header('Cache-Control: public, max-age=6000');
}
if (empty($_GET['nopagecache'])) {
$cp = '/tmp/'.md5($sql);
// ファイルの更新時間を比較して新しければキャッシュを送信
if (file_exists($cp) && filemtime($cp) > time()-600) {
readfile($cp);
exit;
}

ob_start();
}

$conn = pg_pconnect('host=sena dbname=zipcode user=yohgaki');
$res = pg_query($conn, $sql);

?>

Simple Benchmark


while ($row = pg_fetch_assoc($res)) {
echo '';
}
?>
'.join(' ', $row).'



if (empty($_GET['nopagecache'])) {
$contents = ob_get_clean();
$fp = fopen($cp,'w');
fwrite($fp,$contents);
echo $contents;
}
?>

   郵便番号データベースから、上3桁が100番の番号を検索し、表として出力した場合のベンチマークは図24のとおりです。なお、上3桁が100の郵便番号は194件ありました。

ab -c 100 -n 10000 http://dev/~ohgaki/zip.php?nopagecache=1
 
Requests per second: 91.84 [#/sec] (mean)
Time per request: 1088.800 [ms] (mean)
Time per request: 10.888 [ms] (mean, across all concurrent requests)
Transfer rate: 4856.60 [Kbytes/sec] received
図24:出力キャッシュベンチマークの結果(出力キャッシュなし)

 

ab -c 100 -n 10000 http://dev/~ohgaki/zip.php
 
Requests per second: 217.00 [#/sec] (mean)
Time per request: 460.830 [ms] (mean)
Time per request: 4.608 [ms] (mean, across all concurrent requests)
Transfer rate: 11486.59 [Kbytes/sec] received
図24:出力キャッシュベンチマークの結果(出力キャッシュあり)


   出力キャッシュの有無では、2倍強の高速化しか達成できませんでした。しかし、 Transfer rateを見ると、テストスクリプトが単純であったため、100MbpsのLANがボトルネックになっていることがわかります。より複雑なスクリプトであ ればさらにはっきりとした差を確認できるはずです。

   データベースサーバーへの負荷ですが、出力キャッシュを使用していない方ではデータベースサーバーが同じレコードを繰り返し検索して、100%近く CPU時間を使用していました。それに比べて、出力キャッシュを使用しているケースは、負荷がほとんどない状態(CPU時間が10〜15%)においては、 当然ですが、データベースへのアクセスは0でした。

   次回はHTTPキャッシュの効果を測定します。

 

?>

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る