标签: pgbouncer

我真的需要 Postgres 中的空闲连接吗?

我在 Spring Boot (1.5.1.RELEASE) 中有一个使用 Postgres DB (9.1-901-1) 的项目。

当我在生产中运行这个应用程序时,它会在数据库中创建多达 100 个空闲连接。

所以我覆盖了默认配置来控制创建“N”个空闲连接。请检查以下配置:

datasource:
  driverClassName: org.postgresql.Driver
  url: jdbc:postgresql://localhost:5432/db_name
  username: root
  password: root
  tomcat:
  # default value is 100 but postgres' default is 100 as well. To prevent "PSQLException: FATAL: sorry, too many
  # clients already", we decrease the max-active value here. Which should be sufficient, by the way
    max-active: 10
    max-idle: 10
    min-idle: 5
    max-wait: 30000
    time-between-eviction-runs-millis: 5000
    min-evictable-idle-time-millis: 60000
    jmx-enabled: true
Run Code Online (Sandbox Code Playgroud)

现在它创建了 5 个与 DB 的空闲连接。

我正在通过执行以下查询来验证这一点。

select * …
Run Code Online (Sandbox Code Playgroud)

database postgresql pgbouncer postgresql-9.1 spring-boot

3
推荐指数
1
解决办法
4123
查看次数

PgBouncer 和 PgPool II 的其他中间件替代品是什么?

我试图找到可用于 Postgres DB 的不同中间件。每个人都在推荐 PgBouncer 和 PgPool II。我可以使用的其他中间件列表是什么。

postgresql benchmarking connection-pooling pgpool pgbouncer

3
推荐指数
1
解决办法
3005
查看次数

在 Rails 中禁用连接池以使用 PgBouncer

我们有一个 Ruby on Rails 4.2.8 项目,可以访问大型 PostgreSQL 数据库。我们将使用 PgBouncer 添加一个新的连接池服务器。

由于 PgBouncer 将处理数据库连接池,我们是否需要关闭 Rails 自动连接池?我们的database.yml 中没有配置任何内容,因此我认为正在使用默认值(池)5。

  1. 添加 PgBouncer 是否意味着我们应该关闭 Rails 连接池?
  2. 如果是这样,它是如何工作的,我们是否只需在database.yml中将Pool设置为0?

谢谢

postgresql ruby-on-rails pgbouncer

3
推荐指数
1
解决办法
3087
查看次数

Rails、PgBouncer 和 DigitalOcean — 如何使用数据库连接池?

最近在 DigitalOcean 有机会创建数据库。这有点像基于通常的 Droplet 的交钥匙解决方案,带有一堆附加的数据库功能。

这些附加功能之一 - 连接池。据我了解,这是一个 PgBouncer。

如果我以通常的方式(直接)将数据库连接到 Rails 5.2 应用程序,那么一切都很好。

但是如果我通过“连接池”使用连接,我会得到一个错误:

ActiveRecord::StatementInvalid: PG::DuplicatePstatement: 错误: 准备好的语句“a1”已经存在

当从数据库接收到任何数据时,就会发生这种情况。

请告诉我,如何使它全部工作?

postgresql ruby-on-rails pgbouncer digital-ocean

3
推荐指数
1
解决办法
921
查看次数

Kubernetes 上的 Npgsql 和 Pgbouncer - 池化和 keepalives

我正在寻找更详细的指导/其他人在 Pgbouncer 的生产中使用 Npgsql 的经验。

基本上,我们使用 GKE 和 Google Cloud SQL 进行了以下设置:

在此输入图像描述

现在 - 我已经使用本地连接池配置了 npgsql,就好像 pgbouncer 没有就位一样。我已将 pgbouncer 添加为我的 GKE 集群中的部署,因为 Google SQL 的最大连接限制非常低 - 并且为了能够在 Kubernetes 内水平扩展我的应用程序,我需要防止其不堪重负。

我的问题之一是当其中一个 pgbouncer pod 死亡时(由于节点故障或当我向上/向下扩展时),可靠性问题之一。

发生这种情况时 (1) 应用程序 pod 中客户端连接池中的所有现有打开连接不会立即关闭 (2) - 并且基本上会导致我的应用程序在尝试执行命令时出现异常。不理想!

据我所知(并查看 中的建议https://www.npgsql.org/doc/compatibility.html),我有三个选择。

  1. 接受它,并在我的应用程序中处理 SQL 命令的重试。可能,但似乎需要付出很大的努力,如果我弄错了,就会产生很多可能的错误。

  2. 打开 keepalives 并让 npgsql 本身在坏连接失败时相对较快地“失败”。我什至不确定这是否有效或者是否会导致进一步的问题。

  3. 完全关闭客户端连接池。这似乎是官方建议,但出于性能原因我不愿意这样做,对于 Npgsql 来说,必须为每个会话打开到 pgbouncer 的连接似乎非常浪费 - 并且与我使用其他 RDBMS(如 SQL)的所有经验背道而驰服务器。

我的这些选择之一是否走在正确的轨道上?或者我错过了什么?

postgresql npgsql pgbouncer kubernetes asp.net-core

3
推荐指数
1
解决办法
1642
查看次数

当连接数增加时 PgBouncer 性能下降

我有一个专用的 PostgreSQL 服务器和一个 pgBouncer 服务器。所有连接都是通过 pgBouncer 建立的。我使用 Apache JMeter 和 PHP 测试了系统。结果很奇怪。500 个连接的吞吐量还不错,但当我使用更多连接进行测试时,吞吐量会下降。

这是测试结果:

在此输入图像描述

pgbouncer 配置:

[databases]

maindb = host=212.212.322.323 port=5432 user=myuser dbname=mydb pool_size=1000 pool_mode=transaction

[pgbouncer]

logfile = /var/log/postgresql/pgbouncer.log
pidfile = /var/run/postgresql/pgbouncer.pid

listen_addr = *
listen_port = 6432

auth_type = trust
auth_file = /etc/pgbouncer/userlist.txt

pool_mode = session
max_client_conn = 1000
default_pool_size = 20
Run Code Online (Sandbox Code Playgroud)

postgresql connection-pooling throughput pgbouncer

3
推荐指数
1
解决办法
2914
查看次数

是否需要在函数中设置statement_timeout?

当我的网络用户突然飙升时,一些语句会无限期地开始排队,即使我设置的超时时间如下:

SET STATEMENT_TIMEOUT TO 5000; SELECT get_user_properties(12345);
Run Code Online (Sandbox Code Playgroud)

如果没有在函数体中设置,函数会忽略statement_timeout吗?

我正在使用postgresql 9.2和pg_bouncer与会话池.

postgresql pgbouncer

2
推荐指数
1
解决办法
4471
查看次数

如何在heroku上使用rails设置pgbouncer?

Heroku最近减少了与生产数据库的可用连接数(从500到60).打开的连接消耗大量内存并导致问题,因此这似乎是朝着正确方向迈出的一步.

我的应用程序有超过100个并发进程,它们同时访问数据库.Heroku建议使用https://github.com/gregburek/heroku-buildpack-pgbouncer来解决此问题.

我无法找到关于如何做到这一点的适当指南.我能够安装并启用buildpack,但我不知道这些配置变量的作用以及它们如何工作.使用默认配置,我会遇到大量ActiveRecord::ConnectionTimeoutError错误.

有没有人有这方面的经验,如果可以请提供有关如何正确执行此操作以及如何配置需要配置的所有内容的分步指南?

postgresql ruby-on-rails heroku pgbouncer heroku-postgres

2
推荐指数
1
解决办法
1890
查看次数

PostgreSQL性能调优和最大连接(实际上)

在过去的几周里,我一直在调整和搞乱PostgreSQL,我将在下一个项目中使用它.

我的规格是:

  • DigitalOcean 8核心16GB SSD x2(一个用于DB,另一个用于Web)
  • Centos 7
  • PHP5,Nginx

我试过的事情:

  1. Pgtune

  2. PgBouncer&Pgpool(连接池和负载平衡)

  3. 调整php-fpm和nginx(worker_processes,worker_connections,pm.max_children等)

  4. Linux文件句柄限制和套接字调整.

我正在测试它通过使用ApacheBench调用网页来插入.这是实用的吗?

ab -n 17500 -c 1750 -r http://example.com/insert.php
Run Code Online (Sandbox Code Playgroud)

到目前为止,我只能同时处理1700-2000连接而不丢弃任何事务(通常在nginx错误日志中过早关闭连接资源暂时不可用抱歉, PostgreSQL 已经返回太多客户端).

我为php-fpm尝试了TCP/IP和unix socket,而TCP/IP似乎比unix socket更具可扩展性.

PHP可以使用连接池吗?因为我从Web服务器调用数据库的方式仍然相同(对pgpool或pgbouncer进行了大量的单独连接).

我的目标是同时处理至少10,000个事务.决定因素是什么?它是web服务器与db(php-fpm)或PostgreSQL本身之间的瓶颈吗?通常,大公司(PHP Web应用程序)如何处理这样的卷?

sockets postgresql nginx pgpool pgbouncer

2
推荐指数
1
解决办法
1138
查看次数

pgbouncer 无法连接到本地 postgresql 数据库(超时)

我试图让 pgbouncer 在我的独立 postgresql 服务器上工作,但是当我尝试使用 pgbouncer 端口连接到数据库时,出现超时错误。

PostgreSQL: 9.1.8

pgBouncer:1.4.2

操作系统:Ubuntu 12.04.2 LTS (GNU/Linux 3.8.4-x86_64-linode31 x86_64)

这是我的 conf 文件:

[databases]
postgres = host=127.0.0.1 port=5432 dbname=postgres
mydb = host=127.0.0.1 port=5432 dbname=mydb

[pgbouncer]
logfile = /home/username/pg_log/pgbouncer.log
pidfile = /tmp/pgbouncer.pid
listen_addr = xxx.xxx.xxx.xxx
listen_port = 6432
unix_socket_dir = /var/run/postgresql
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
admin_users = postgres
stats_users = stats, root
user = postgres
pool_mode = session
server_reset_query = DISCARD ALL
max_client_conn = 1000
default_pool_size = 20
log_connections = 1
log_disconnections = …
Run Code Online (Sandbox Code Playgroud)

postgresql pgbouncer

1
推荐指数
1
解决办法
2万
查看次数

Pgbouncer 超时

我尝试使用 pgBouncer 来消除短暂的网络断开连接。我做了一个测试,我有 Clinet->pgBouncer->Postgresql。当从客户端建立连接时,我断开网络电缆,如果我以比大约 15 秒更快的速度重新连接它,它仍然可以工作。如果没有,我就完全断开连接,并且 pgBouncer 记录:

db/user@server.address.com:5432 关闭,因为:服务器连接崩溃?db/user@127.0.0.1:49837 关闭,因为:服务器连接崩溃?db/user@127.0.0.1:49837 池错误:服务器连接崩溃?

我如何控制超时?

PS:在我的pglib客户端,连接字符串超时设置为 60 秒。

卢卡斯

postgresql timeout pgbouncer

1
推荐指数
1
解决办法
1万
查看次数

Postgresql - 准备好的语句与连接池 - 这是一个权衡吗?

据我了解,您可以在 Postgresql 中使用准备好的语句或连接池(使用 pgPool/pgBouncer 等工具),但同时只能从其中之一中受益(至少使用 .NET 的 Npgsql 驱动程序,加上库作者建议关闭客户端)使用 PgBouncer 时的侧连接池)。我对吗?
如果是这样 - 对于其他运行时和语言(例如 Java、Python、Go)也是如此吗?或者这是一个特定于实施的问题?

postgresql connection-pooling prepared-statement npgsql pgbouncer

1
推荐指数
1
解决办法
3710
查看次数

SSH 到 AWS RDS Postgres 实例

我想在我的 postgres rds 中安装 pgbouncer,但我无法访问该实例,就像我们访问 ec2 实例一样。那么有没有一种方法可以让我通过 ssh 连接到机器(不是 psql,它工作正常)。

postgresql rds amazon-web-services pgbouncer

0
推荐指数
1
解决办法
2288
查看次数