現在のサイトを移行する目的で、多数のサーバーのベンチマークを行っています。
mysqlslap テストを使用し、テーブルで同じデータを使用して SQL クエリを実行し、php マイクロタイムを使用して測定することにより、現在のセットアップに対して 2 つの構成をテストしました。mysqlslap テストは次のとおりです。
- 現在: 4.977 秒
- 構成 1: 2.988 秒
- 構成 2: 1.786 秒
ただし、現在のサーバーは 1 つを除くすべてのテストで最速であるため、マイクロタイムの結果の結果に困惑しています。現在のサーバーは、小さなクエリを実行すると高速になり、大きなクエリを実行すると遅くなります。これは、ベンチマーク ケースの 1 つの例です (私が何かばかげたことをしている場合に備えて!):
$t1 = microtime(TRUE);
for($i=1; $i<10; $i++)
{
$sql = 'SELECT a.ref, a.code, a.expiry
FROM payment a
WHERE a.Amount >0
AND a.type = "card"
AND a.user_id = '.$i.'
AND a.result = "success"
AND a.amount > 0
AND a.code = (SELECT b.code
FROM payment b
WHERE b.user_id = a.user_id
AND b.type="Card"
AND b.amount > 0
ORDER BY date DESC LIMIT 1
)
ORDER BY a.date DESC LIMIT 1';
mysql_query($sql);
}
$t2 = microtime(TRUE);
$t = $t2-$t1;
echo $t.'s';
だから私は2つの質問があります:
- これらは期待される結果ですか?現在のサーバーは、マイクロタイム テストでトップ (クエリが小さいほど速く、クエリが大きいほど遅い) ですが、mysqlslap テストでは最下位です。
- 現在のサーバーにインストールできない (sysbench) 以外に、サーバーをベンチマークする他の方法を提案できますか?
更新: マイクロタイム テストで使用したものと同じ SQL クエリを mysqlslap を介してカスタム クエリとして実行したところ、新しい構成は全体的にはるかに高速になりました。マイクロタイム テストを実行するとき、ライブ データベースを使用して一般的なリクエストをチェックしていました。結果が既にメモリにある可能性はありますか?