先週、合計40万行、約220 MBのmysqlサーバーで大きな問題が発生したため、memcacheの使用を開始することにしました。スクリプト全体を変更する前に、テストページが準備され、apacheベンチマークでテストされています(テストする正しい方法かどうかはわかりません)
ab -n 50000 -c 150 http://192.168.1.5/test.php
上記のコマンドを使用してさらに多くのリクエストをテストすると、25000リクエスト後にmemcacheが切断を開始します。
これがtest.phpのサンプルコードです
<?php
global $memcache;
$memcache = new Memcache();
//$memcache->flush();
$memcache->connect("127.0.0.1", "11211");
$key = "10";
$cache_result = $memcache->get($key);
if($cache_result) {
$data = $cache_result;
echo "<h1>cache data</h1>";
} else {
mysql_connect("localhost", "root", "root") or die(mysql_error());
mysql_select_db("newstest");
mysql_set_charset("utf8");
$q = mysql_query("SELECT * `news`, `categories` WHERE `publish_area` LIKE 'headline' AND `published`='1' AND `category_parent`=`category_id` AND `publish_date` <= '".date("Y-m-d H:i:s")."' ORDER BY publish_date DESC LIMIT 0,15");
while($o = mysql_fetch_object($q)) {
$data[] = $o;
}
$memcache->set($key, $data);
echo "<h1>mysql data</h1>";
mysql_close();
}
foreach($data as $o) {
print_r($o);
}
?>
MySQLから取得したデータは約120KBです
memcached cachesize=1024も2048で試行されました
memcached maxconn = 4096
mysqlサーバーのトラフィックが多いために発生する問題は、memcacheの後で修正されるようですが、memcacheの切断が現在の問題です。今回はmysqlサーバーは機能するようですが、memcacheは切断されます。
どんなアイデアでも役に立ちます。ありがとう。