具有数千个连接和分布式事务的 PostgreSQL DB 性能问题
PostgreSQL DB performance issues with thousands of connections and distributed transactions
我们正在尝试评估 PostgreSQL 数据库作为我们应用程序中 Oracle 数据库的替代品。我们使用安装在 Linux 机器上的 PostgreSQL 9.5,该机器具有 128 GB 内存、32 CPU 内核和 SSD 存储。连接池和分布式事务由 JBoss 7 应用程序服务器管理,SQL 查询由 Hibernate 4 generated/executed 管理。大多数 table 有数千万行,其中一个有数百行数百万行。总共大约有 3,000 个数据库连接(它们由应用程序服务器合并)处于活动状态并同时使用。我们修改了一些查询,为慢速查询创建了索引,根据文档调整了数据库和 OS 设置等。但是,吞吐量慢了几倍,最终数据库响应时间增加了 10-20 倍。
我已经进行了一些谷歌搜索,但我无法找到有关其他人(ab)以相同方式使用 PostgreSQL 数据库的信息:
- 使用数千个活动数据库连接
- 使用如此多的分布式事务(PREPARED TRANSACTIONS)
- 将数十亿行存储在一个 table
Oracle 在处理更高负载时没有任何问题。我很乐意分享您的经验、建议、链接等。
谢谢
应在 postgresql.conf 文件中提供适当的设置以处理大量连接。它也可以被 pgpool2 前端用于复制和负载平衡。我们在集群环境中使用 Postgres,它运行良好。
解决方案是升级 Linux 内核,并将 Java 连接池中的数据库连接数从 3000 减少到 300。此更改后,我们可以处理与之前相同的流量甲骨文数据库。
我偶然发现了一条宝贵的信息,可以在 Robert Haas 撰写的 post Did I Say 32 Cores? How about 64? 的评论部分解决问题
(副总裁,首席架构师,数据库服务器 @ EnterpriseDB,PostgreSQL 主要贡献者和提交者):
No, I'm saying that to get good performance on a 64-core server, you're going to need PostgreSQL >= 9.2 and Linux >= 3.2. Most of the changes are actually on the PostgreSQL side, but the lseek scaling stuff in the Linux kernel was important, too.
我们正在尝试评估 PostgreSQL 数据库作为我们应用程序中 Oracle 数据库的替代品。我们使用安装在 Linux 机器上的 PostgreSQL 9.5,该机器具有 128 GB 内存、32 CPU 内核和 SSD 存储。连接池和分布式事务由 JBoss 7 应用程序服务器管理,SQL 查询由 Hibernate 4 generated/executed 管理。大多数 table 有数千万行,其中一个有数百行数百万行。总共大约有 3,000 个数据库连接(它们由应用程序服务器合并)处于活动状态并同时使用。我们修改了一些查询,为慢速查询创建了索引,根据文档调整了数据库和 OS 设置等。但是,吞吐量慢了几倍,最终数据库响应时间增加了 10-20 倍。
我已经进行了一些谷歌搜索,但我无法找到有关其他人(ab)以相同方式使用 PostgreSQL 数据库的信息:
- 使用数千个活动数据库连接
- 使用如此多的分布式事务(PREPARED TRANSACTIONS)
- 将数十亿行存储在一个 table
Oracle 在处理更高负载时没有任何问题。我很乐意分享您的经验、建议、链接等。
谢谢
应在 postgresql.conf 文件中提供适当的设置以处理大量连接。它也可以被 pgpool2 前端用于复制和负载平衡。我们在集群环境中使用 Postgres,它运行良好。
解决方案是升级 Linux 内核,并将 Java 连接池中的数据库连接数从 3000 减少到 300。此更改后,我们可以处理与之前相同的流量甲骨文数据库。
我偶然发现了一条宝贵的信息,可以在 Robert Haas 撰写的 post Did I Say 32 Cores? How about 64? 的评论部分解决问题 (副总裁,首席架构师,数据库服务器 @ EnterpriseDB,PostgreSQL 主要贡献者和提交者):
No, I'm saying that to get good performance on a 64-core server, you're going to need PostgreSQL >= 9.2 and Linux >= 3.2. Most of the changes are actually on the PostgreSQL side, but the lseek scaling stuff in the Linux kernel was important, too.