TOP書籍連動> 出力キャッシュの効果
まるごと PostgreSQL!
商用データベースに匹敵するWebシステム構築手法

第7回:クエリキャッシュとキャッシュの効果

著者:大垣靖男(OHGAKI, Yasuo)   2005/5/11
前のページ  1  2  3
出力キャッシュの効果

   リスト11は、その出力キャッシュのベンチマーク測定のテストスクリプトです。
リスト11:出力キャッシュのテストスクリプト
<?php
$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);

?>
<html>
<head><title>Simple Benchmark</title></head>
<body>
<table>
<?php
while ($row = pg_fetch_assoc($res)) {
echo '<tr><td>'.join('</td><td>', $row).'</td></tr>';
}
?>
</table>
</body>
</html>
<?php
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キャッシュの効果を測定します。

前のページ  1  2  3


大垣 靖男
著者プロフィール
大垣靖男(OHGAKI, Yasuo)
University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て、エレクトロニック・サービス・イニシアチブ有限会社を設立。Linuxはバージョン0.9xの黎明期から利用してるが、オープンソースシステム開発やコミュニティへの参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトのPostgreSQLモジュールのメンテナ、日本PostgreSQLユーザ会の四国地域での活動等を担当している。


INDEX
第7回:クエリキャッシュとキャッシュの効果
  クエリキャッシュ
  クエリキャッシュの効果
出力キャッシュの効果