postgresql - Amazon RDS 实例类型 (PostgreSQL) 之间的实际差异
问题描述
我对设置一般的 PostgreSQL 数据库和 AWS 比较陌生。
我试图弄清楚Amazon RDS Instance Types之间的实际区别是什么。关于我的组织和用例的一些上下文:
- 我们主要是一个由数据分析师/数据科学家组成的小团队(少于 5 个用户)
- 我们不需要 100% 的正常运行时间。我可能会在正常工作时间内打开数据库,然后再关闭。我们的用例主要用于分析/数据科学目的,不会在其上运行实时应用程序。
- 我们现在需要 1 个数据库。
- 该数据库将包含大约 300 - 500 GB 的数据。大多数表都很小(小于 1 GB)。但是,有几张桌子很大。最大的表将有 80GB 左右,并且会被频繁查询。还有一些其他大约 10 GB 的表。
我现在开始使用免费层db.t2.micro
只是为了获得一些经验、开发和测试我需要的东西。但是,我很难理解这与其他实例相比如何。我们的团队现在也非常注重预算,所以我试图在提倡升级之前确定这一点。
我正在尝试执行的示例操作
- 从 CSV 加载表:我们在磁盘上有很多 CSV,我将它们加载到 PostgreSQL 数据库中。我现在刚刚测试了一个,创建了一个表,然后将 CSV 加载到
\copy
一个 11 GB 文件(35,401,551 行和 40 列)的表中(使用)大约需要 27 分钟。升级实例会对此有所帮助吗?如果是这样,我不确定我想升级到什么? - 该表中的 A
select count(*)
大约需要 15 分钟(第一次运行;第二次运行大约需要 3 分钟,可能是因为它正在缓存统计信息?3 分钟对我来说似乎仍然很慢。)。同样,不确定升级实例是否会对此有所帮助?我还应该注意,我没有添加主键或索引。那么可能有其他方法可以在不升级实例的情况下优化性能吗?例如,分区可能会有所帮助:https ://www.postgresql.org/docs/10/ddl-partitioning.html 。该表有一个state
列,该列通常是用户使用的第一个过滤器之一,因为用户通常只想查看一个或一组特定状态。- 一个简单的查询分组:
select ColA, count(*) group by ColA
大约需要 2.5 分钟
- 一个简单的查询分组:
编辑 只是注意到我发现的一些其他有用的资源:
- https://www.apptio.com/blog/ec2-m5-vs-t3/在 m5 与 t3 之间进行选择
解决方案
主要是 RDS 中的实例类型,主要区别如下:
- 有效内存
- 可用 CPU
- 最大网络吞吐量
- 可突发与不可突发(
T
实例系列使用可突发积分,一旦耗尽,您的 CPU 就会受到限制)。
当您使用 aT2.micro
时,您只有一个可用的 CPU。一旦积分用尽,您的 CPU 上限也将上限为 20%,这将限制您的能力。
我还要指出,如果您能够在 AWS 平台上投入更多资金,那么有一个专门用于分析的数据仓库解决方案是Redshift,这可能会表现得更好,但成本会更高,它也是来自 Postgres 的分支。
如果您希望在 RDS 中坚持使用 Postgres,您还应该考虑Aurora Postgres,它通常提供 2-3 倍于 RDS 上的常规 Postgres 的性能。
推荐阅读
- python - Python 类 - 在一行中调用多个类方法
- .net - ML .Net 算法用于预测一组短文本与另一组短文本之间的对应关系
- javascript - 向 Javacript 添加多个属性
- html - 如何将表格列中的圆圈向左对齐?
- java - Hibernate 阻止我登录只读 Postgresql 数据库
- python - 我如何为 client = discord.Client() 使用 discordpy 冷却命令
- cmake - 在 Dockerfile 安装中的 Cmake 步骤中出现错误
- c++ - 在向量中搜索一个字符串,然后在c++中找到该字符串的位置
- postgresql - 与 JSONB 列上的 GIN INDEX 的搜索性能类似
- c++ - 对 `__gnu_cxx::__exchange_and_add(int*, int)' 的未定义引用