我有一个带有单个表的本地数据库,该表有大约550万条记录.我在Heroku Postgres上创建了一个新数据库(基本计划),并将本地转储恢复到其中.启动psql并进行一些查询我注意到速度明显低于本地速度.然后,我使用Crane计划配置了另一个数据库,数字同样不好.
这里有一些数字:
select count(*) from table;
当地:1216.744 ms
Heroku(基础):4697.073 ms
Heroku(Crane):2972.302 ms
select column from table where id = 123456;
当地:0.249毫秒
Heroku(基础):127.557毫秒
Heroku(Crane):137.617毫秒
这些巨大的差异如何可能?这可能与硬件差异完全相关吗?有没有简单的方法来提高吞吐量?
单行选择的120-130ms可能表示网络延迟,正如Lukos建议的那样,您可以通过在数据库服务器附近运行查询来减少这种情况.但是,2-3秒的延迟更可能与数据库速度有关 - 特别是I/O吞吐量.这就是为什么Heroku强调数据库产品的差异与缓存大小有关.
Heroku Postgres将您的数据存储在Amazon EBS上.(这在事故报告中显示,并且偶然也会解释1 TB限制.)EBS表现有点像过山车; 比本地磁盘更多.有些读取速度很快,而其他读取速度很慢.有时整个卷降至100 KB/s,有时会使互连最大化.
根据我在EC2中托管数据库的经验,我发现在EBS上运行RAID 10可以平滑性能差异.我不相信Heroku这样做,因为它会大大增加高于数据库计划价格点的成本.AWS最近宣布为EBS配置IOPS,允许您支付专用容量,进一步提高可预测性,但也增加了成本.
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |