我应该为postgres实例规划什么类型的资源?

时间:2013-11-12 21:23:16

标签: sql postgresql

所以我正在研究由Heroku托管的生产postgres驱动的应用程序,我不知道我的数据需要什么类型的资源。

关于我的数据

我有4张桌子 帐户

的ID

地址

Affils

帐户有很多ID,帐户有很多地址,帐户有很多帐号。

大致会有:

1000万+账户

1400万+地址

700万+ ID

和1500万+关联。

对此进行的查询将始终使用帐户上的名称进行过滤,但它将使用DMETAPHONE或LEVENSHTEIN进行匹配。我打算按名字索引。

查询可能如下所示:

SELECT(rows)FROM accounts WHERE DMETAPHONE(name)='example'AND id IN(SELECT accountID FROM addresses WHERE(conditions))AND id IN(SELECT accountID FROM IDs WHERE(conditions))。

对于这些类型的操作,我需要什么类型的资源才能获得良好的性能。我应该为数据库查看2 GB的缓存,还是应该看7.5GB,或者更多?感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  • DB总是可以从更多的I / O中获利。如果您可以获得多个文件系统(位于不同的物理磁盘上,不知道如何在Heroku上继续执行此操作),则可以使用tablespaces分发数据库对象。尝试将表及其索引放在分离的磁盘上,或者将一个磁盘放在例如磁盘上。帐户+索引和另一个地址+索引。
  • 正如foibs所提到的,function results can be indexed,这可以为您的用例提供巨大的推动力
  • Postgres将充分利用你给它的所有记忆(直到你进入超大的领域),把你能做的任何事情都放到shared_buffers并确保你的work_mem很大足以使典型查询不必使用磁盘文件。
  • 如果查询速度很慢,分析SQL并对其进行优化通常比仅仅针对问题投入硬件和资金要高效得多。 EXPLAIN ANALYZEthe pretty printer by Mr. "Depesz"是您的朋友。