Sum*_*nha 4 mysql latency amazon-ec2 amazon-web-services amazon-rds
tl;dr:为什么当从 EC2 请求时从 RDS 获取 SELECT 语句的结果 10,000 次所花费的时间如此不均匀?
用中小型RDS服务器的结果更新问题
在尝试使用 AWS 检查获取 SQL 查询结果所花费的时间时,我得到了以下非常不均匀的结果:
我写了一个 PHP 代码来报告我从服务器获取n次SELECT 查询的结果所花费的时间。
while($flag<n)
{
$t=microtime(true);
$result=$con->query($q);
$t=microtime(true)-$t;
$total+=$t;
$flag++;
}
Run Code Online (Sandbox Code Playgroud)
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(全部在秒内)
为什么RDS在SELECT语句的10000次循环测试中所用的时间如此参差不齐?为什么它比 EC2 服务器高?
[我不认为这是由于网络造成的,因为当我用较少的循环(1000 次循环)进行实验时,EC2 -> RDS 的读数为 4、5、5、5、4。]
当我为每个 fetch 请求记录时间时,我注意到以下几点:
每个查询花费的平均时间:0.015419
查询次数超过 10000 次的平均时间:1644
超过平均完成时间的查询所花费的总时间:119.364(总时间的 78%)
每个查询花费的平均时间:0.063605
查询次数超过 10000 次的平均时间:8629
超过平均完成时间的查询所花费的总时间:628.6426(总时间的 98.8%)
我在 10,000 req 的周期中记录了每个 fetch 请求的时间,我注意到在一些请求之后,每个 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实例再次运行你的测试,你会发现它更加一致。
| 归档时间: |
|
| 查看次数: |
3092 次 |
| 最近记录: |