tl; dr:EC2から要求されたときにRDSからSELECTステートメントの結果を10,000回フェッチするのにかかる時間が非常に不均一なのはなぜですか?
中小規模のRDSサーバーの結果で質問を更新しました
SQLクエリの結果をフェッチするのにかかる時間をチェックするためにAWSを実験していると、次の非常に不均一な結果が得られました。
私はPHPコードを記述して、SELECTクエリの要求をn回フェッチするのにかかった時間を報告しました。サーバー。
while($flag<n)
{
$t=microtime(true);
$result=$con->query($q);
$t=microtime(true)-$t;
$total+=$t;
$flag++;
}
5回の試行の結果は次のとおりです:20、21、20、20、21(すべて秒単位)
5回の試行の結果は次のとおりです:33、33、33、33、3(すべて秒単位)
11回の試行の結果は次のとおりです。272、709、49、48、711、593、47、316、153、47、636(すべて秒単位)
5回の試行の結果は次のとおりです。53、54、53、158、698(すべて秒単位)
5回の試行の結果は次のとおりです。96、123、579、252(すべて秒単位)
SELECTステートメントの10,000ループのテストでRDSにかかる時間が非常に不均一なのはなぜですか?また、EC2サーバーよりも長いのはなぜですか?
[ネットワークが原因ではないと思います。より少ないループ(1000ループ)で実験を行ったとき、EC2-> RDSの読み取り値は4、5、5、5、4でした。 。]
各フェッチ要求の時間を記録すると、次のことに気付きました。
各クエリにかかった平均時間:0.015419
クエリの数が10000:1644から平均時間を超えました
完了までに平均時間を超えたクエリにかかった合計時間:119.364(合計時間の78%)
各クエリにかかった平均時間:0.063605
クエリの数が10000:8629から平均時間を超えました
完了までに平均時間を超えたクエリにかかった合計時間:628.6426(合計時間の98.8%)
10,000 reqのサイクルで各フェッチ要求の時間を記録しました。いくつかの要求の後、各reqの時間が〜0.07(〜0.003)秒に増加することに気付きました。ただし、この増加は、ランダムな数の要求の後に発生します。同様に、場合によっては〜8000リクエストの後、場合によっては〜3000リクエストの後。理由は何でしょうか?また、10,000リクエストに約45秒かかる場合、RDSのCPU使用率は約5%です。 100秒を超えると、CPUは約10〜15%になります。
RDSサーバーをt2.microからt2.smallにアップグレードし、さらにt2.mediumにアップグレードしました。ここでも、パフォーマンスは不均一でした。
5回の試行の結果は次のとおりです:53、54、53、158、698(すべて秒単位)
5回の試行の結果は次のとおりです:96、123、579、252(すべて秒単位)
RDSを別のゾーンに切り替えました。現在、測定値は一貫しているようです。問題は、ノイズの多い隣人によるCPUの盗難であった可能性があります。
5回の試行の結果は次のとおりです:156、151、151、151、151、302(すべて秒単位)
db.micro
インスタンスを使用していることに気づきました。 EC2と同様に、マイクロインスタンスは予算にやさしいように設計されていますが、パフォーマンスが犠牲になります。とは言うものの、CPU時間がインスタンスに与えられるため、通常のインスタンスと比較して、これらのタイプのサーバーをロードすると、はるかにパフォーマンスが低下します。 「同じハードウェアを共有する他のインスタンスと比較して。
ポイントを証明するために、db.medium
インスタンスに対してテストを再実行すると、一貫性が大幅に向上します。