2016-09-22 63 views
6

我们试图在我们的应用程序中评估PostgreSQL数据库作为Oracle数据库的替代品。我们使用PostgreSQL 9.5,它安装在具有128 GB内存,32个CPU内核和SSD存储的Linux机器上。连接池和分布式事务由JBoss 7应用程序服务器管理,SQL查询由Hibernate 4生成/执行。大多数表拥有数千万行,其中一行具有数亿行。总共大约3,000个数据库连接(它们由应用程序服务器汇集)是活动的并且同时使用。我们修改了一些查询,创建了缓慢的索引,根据文档等调整了数据库和操作系统设置。但是,吞吐量要慢几倍,最终DB响应时间增加10-20倍。数千个连接和分布式事务的PostgreSQL数据库性能问题

我做了一些谷歌上搜索,我找不到任何关于使用PostgreSQL数据库以同样的方式别人(AB)的信息:

  • 使用使用这种大量的活动数据库连接
  • 十万分布式事务(预备事务)
  • 存储数十亿列在一个表中

Oracle没有处理更高的负载任何问题。我希望分享你的经验,建议,链接等

感谢

+2

Zalando使用Postgres,他们同时为很多客户提供服务。所以它不像引擎笨重我可以告诉你:)对于处理大型表分区派上用场。这个问题相当广泛,但我猜你不会得到你期望的答案。 –

+0

感谢您的评论。 但基于他们的GIT repo(https://github.com/zalando/patroni/search?utf8=%E2%9C%93&q=prepared),他们不使用分布式事务:max_prepared_transactions = 0 默认值对于max_connections是100.我的确知道生产值可能会有所不同。 –

+1

你有你自己的交易经理吗?您是否正在使用分布式事务来允许跨群集中不同数据库的全局事务?你是否考虑过补偿? –

回答

0

该解决方案是升级Linux内核并将我们的Java连接池中的数据库连接数从3000减少到300.在此更改之后,我们可以像使用Oracle DB一样处理相同的流量。

无意间我发现的信息珍贵的一件从而导致解决问题的意见节由罗伯特·哈斯 (VP,首席架构师,数据库服务器@的EnterpriseDB,PostgreSQL的主要贡献者和提交者)写的帖子Did I Say 32 Cores? How about 64?

不,我要说的是,要在64核心服务器上获得良好性能,您需要PostgreSQL> = 9.2 Linux> = 3.2。大部分改变实际上都在PostgreSQL端,但Linux内核中的lseek缩放比例也很重要。

-1

Approprite设置应该在postgresql.conf文件提供给处理大量连接。另外它可以通过pgpool2进行复制和负载平衡。我们在集群环境中使用Postgres,它运行良好。

+0

您是否拥有数千个并发活动连接,使用分布式事务,拥有数百万条记录? –

+0

是的,有多个服务器,多个应用程序,大量的用户并发连接 – Sri

+0

您可以定义'大量的用户'吗?数百或数千个同时存在ACTIVE查询? –