tl; dr: 为什么从EC2获取请求时,从RDS获取10000次SELECT语句的结果时间如此不均匀?
用小型和中型RDS服务器的结果更新了问题
在尝试使用AWS来检查获取SQL查询结果所花费的时间时,我得到了以下非常不均匀的结果:
我写了一个PHP代码来向我报告从服务器获取n次SELECT查询所需的时间。
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 (全部秒)
为什么RDS在SELECT语句的10,000个循环testing中花费的时间如此不均匀? 为什么它比EC2服务器高呢?
[我不认为它是由networking引起的,因为当我用较小的循环(1000个循环)进行实验时,EC2-> RDS的读数是4,5,5,
当我logging每个提取请求的时间时,我注意到以下内容:
平均时间每个查询采取:0.015419
查询数量超过了10000:1644的平均时间
查询所花费的时间总计超过平均时间:119.364(总时间的78%)
平均时间每个查询采取:0.063605
查询数量超过了10000:8629的平均时间
查询花费的平均时间:628.6426(占总时间的98.8%)
我logging每个抓取请求在10,000 req周期的时间我注意到,在一些请求后,每个请求的时间增加到〜0.07(从〜0.003)秒。 但是这个增加发生在随机数的请求之后。 就像有时在〜8000个请求之后,有时在〜3000个req之后。 可能是什么原因? 另外,当10,000 req需要约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一样,微型实例的devise也是经济实惠的,但是以性能为代价。 也就是说,加载这些types的服务器与正常实例相比,性能会差得多,因为与其他共享相同硬件的实例相比,CPU时间赋予实例“最后”。
为了certificate这一点,再次对db.medium实例运行你的testing,你会发现它更一致。