【发布时间】:2016-09-22 00:38:02
【问题描述】:
我们正在尝试在我们的应用程序中评估 PostgreSQL DB 作为 Oracle 数据库的替代品。我们使用 PostgreSQL 9.5,它安装在具有 128 GB 内存、32 个 CPU 内核和 SSD 存储的 Linux 机器上。连接池和分布式事务由 JBoss 7 应用服务器管理,SQL 查询由 Hibernate 4 生成/执行。大多数表有数千万行,其中一张有数亿行。总共有大约 3,000 个数据库连接(它们由应用程序服务器汇集)处于活动状态并同时使用。我们修改了一些查询,为慢查询创建了索引,根据文档调整了数据库和操作系统设置等。但是,吞吐量慢了几倍,最终数据库响应时间增加了 10-20 倍。
我进行了一些谷歌搜索,但找不到其他人 (ab) 以相同方式使用 PostgreSQL DB 的信息:
- 使用数千个活动数据库连接
- 使用如此大量的分布式事务(PREPARED TRANSACTIONS)
- 在一张表中存储数十亿行
Oracle 在处理更高的负载时没有任何问题。非常感谢您分享您的经验、建议、链接等。
谢谢
【问题讨论】:
-
Zalando 使用 Postgres,它们同时为大量客户提供服务。所以它不像引擎很麻烦我可以告诉你:) 处理大表分区很方便。这个问题很宽泛,我猜你不会得到你期望的答案。
-
感谢您的评论。但是根据他们的 GIT 存储库 (github.com/zalando/patroni/search?utf8=%E2%9C%93&q=prepared),他们不使用分布式事务:max_prepared_transactions=0 另外 max_connections 的默认值为 100。我知道生产价值可能会有所不同。
-
您有自己的事务管理器吗?您是否使用分布式事务来允许跨集群上不同数据库的全局事务?您是否考虑过赔偿?
-
"数以千计的活动数据库连接" 是你的问题。您应该使用连接池将其降至“数百”
-
我认为您必须尝试找出问题所在。是数据量吗(尝试归档/清除)。真的是并发连接吗(如果你只用一百个连接进行测试,你会得到你想要的响应时间吗?)。尝试使用 JMeter 或类似工具进行测试,确定问题,然后寻找解决方案。您是否修改了 PostgreSQL 的默认参数设置?当我们进行性能测试时,我已经迁移了一个有几百 GB(我猜它按照你的标准是很小的)和几百个并发用户的 Oracle 数据库,并且得到了相同/相似的响应时间。
标签: postgresql hibernate jboss7.x