问题标签 [pgbouncer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1077 浏览

postgresql - 多进程 pgbouncer 池:可用连接不足

我的设置: postgresql.conf: max_connections = 100

pgbouncer 配置:

我从 django 应用程序(不仅是站点应用程序,还有高负载多线程解析机制)中使用它和一堆 django 管理命令(作为单独的进程运行),它工作正常(虽然,几乎总是,不是当我有活动突然飞溅),当我只运行一个命令时,当我一次运行两个命令时引发很多“连接不足”错误。

该怎么办?

0 投票
1 回答
3552 浏览

postgresql - 如何配置 postgres+pgbouncer 以允许大量连接

我正在对 5000 个连接的 pgbouncer 进行压力测试。测试的目的是使用 pgbouncer 多路复用连接,即 5000 个客户端连接到 500 个 db 连接。

但是,我无法实现主动 500 连接标记的目标。

我的设置非常简单

(客户端使用 pgbench 设置)----->pgbouncer + psql

|______多个盒子______||______1个盒子_________|

pgbouncer 和 postgres 出现在同一个框中。

pgbouncer = 1 个核心(预期)

postgres = 15 个核心(预期)

  • 机器配置

    16核

    ulimit -n 10000

  • Postgres 配置

    最大连接数 = 500

    shared_buffers = 1GB

    work_mem = 100kB

  • pgbouncer 配置

    pool_mode = 交易

    server_lifetime=6000

    server_idle_timeout=2000

    server_connect_timeout=30

    default_pool_size=500

    池大小=500

    pkt_buf=4096

    server_login_retry=2

  • 客户端配置(8个盒子,每个8核):

    每个客户端框模拟为一组使用 pgbench 的客户端对于一个 8 核框,我设置了 16 个线程来触发查询

    pgbench -h -p 6541 -c -j 16 -d -f pgbench_Script.sql -T 360 -U postgres 测试

    pgbench_Script.sql

    \setrandom delta 0 100000 插入到 t4.emplog values(nextval('t4.employeeSeq'),:delta);

postgres 上的主动查询:

我的期望是通过连接池有接近 500 个活动连接到数据库。 问题:我只看到少数连接 ~ 40 个活动连接

观察: 我看到多个 postgres 进程处于“空闲”状态,尽管 pgbouncer 已经为所有客户端提供服务。提示 pgbouncer 无法发挥到最佳。但是,我无法确定确切的瓶颈是什么。

潜在瓶颈:

客户端请求: pgbench 使每个线程成为连接集合的主人。如何模拟大量活动的并发连接?

pgbouncer:我的 pgbouncer 配置有缺陷吗?

postgres:我的 postgres 配置是否无法处理大型连接?

0 投票
2 回答
5907 浏览

postgresql - 如何增加 pgbouncer 的连接吞吐量?

我在事务模式下使用 pgbouncer 并试图允许接近 500 个活动事务。目的只是对设置进行压力测试

当前设置:[ 'n' 个客户端 --->1 pgbouncer ----> 1 postgres ]

我注意到当我使用 pgbouncer 而不是直接连接到 postgres 时,我的事务/秒 (tps) 显着降低。

对于同一组事务(通过 pgbench)

  • 直接连接 => 10k (tps) appx

  • pgbouncer 连接 => 3k (tps) appx

pgbouncer 中是否有任何配置需要调整以提供更好的性能?

我了解 pgbouncer 是一个单线程应用程序,但希望将其调优至最佳状态。以下是我的 pgbouncer 配置:

弹跳器.ini

我能看到的唯一应用是使用多个 pgbouncers 指向同一个数据库服务器。

更新

在执行测试时:

cpu 利用率:30% appx

磁盘利用率:40% appx

观察:许多交易处于“空闲”状态

测试细节:

10 台机器作为客户端向 DB 服务器运行 pgbench 触发请求。

命令:pgbench -h -p 6541 -c 512 -j 16 -f pgbench_SchemaScript.sql -T 360 -U postgres 测试

pgbench_SchemaScript.sql

1 个安装了 pgbouncer 的数据库服务器(16 核,24 Gb RAM)

0 投票
1 回答
6881 浏览

django - 带有 Django 的 CONN_MAX_AGE 的 pgbouncer 的理想设置

我正在运行一个多租户网站,我想减少为每个请求创建 PostgreSQL 连接的开销。Django 的 CONN_MAX_AGE 允许这样做,但代价是创建大量到 PostgreSQL 的开放空闲连接(8 个工作线程 * 20 个线程 = 160 个连接)。每个连接 10MB,这会消耗大量内存。

主要目的是减少连接时间开销。因此我的问题是:

Django 1.6 设置:

Postgres:

PgBouncer:

0 投票
1 回答
2418 浏览

postgresql - 无法连接使用 docker 运行的 pgbouncer 和 postgres

所以这里是启动数据库的命令

这是 pgbouncer 的 dockerfile

这是 pgbouncer 的设置

用户列表.txt

“用户密码”

所以图像构建良好。

我用这个命令启动它,我知道 pgbouncer 正在工作,因为 pgadmin 试图连接到数据库。

pgbouncer 给了我这个输出(由于某种原因,它没有说明 pgbouncer 是否连接到数据库)。

这是我在 pgadmin 中可以看到的

0 投票
4 回答
2291 浏览

java - 为什么 PostgreSQL JDBC 驱动程序在身份验证期间向服务器发送错误的数据包头?

重要提示——最后在编辑#2 中取得了突破,所以请务必阅读。

我在 clojure 中,试图使用 JDBC 连接到我们公司的 PostgreSQL 服务器。服务器正在使用 pgBouncer。

这是我的项目依赖项:

这是我的代码:

当我运行此代码时,我得到以下三个结果之一:

  1. org.postgresql.util.PSQLException:连接尝试失败。
  2. org.postgresql.util.PSQLException:错误:错误的数据包头:'70'
  3. 非常罕见(现在三次,在数百次尝试中),它实际上会起作用!它返回({:?column? 5})

 

到底是怎么回事?为什么这有时有效,但几乎从不

 

我的设置

  • OS X Yosemite(但我也无法在我的 Ubuntu 虚拟机上运行它。)
  • lein repl :headless :port 2358其次是cider-connect在emacs中。
  • 服务器是 postgres 9.1.12

编辑#2

刚刚了解了这个:loglevel 2选项。这将其设置为“调试”级别的输出,并且我收集了一些更有趣的数据。这是输出:

然后它给出以下堆栈跟踪:

但随后它给出了这个错误代码!

根据本网站,这意味着“违反协议”。

我在 google 上搜索了 08P01 协议违规,并在 GitHub 上找到了一个完全不相关的项目的错误报告,标题为“'08P01 PROTOCOL VIOLATION',当尝试将编码的 unicode 字符写入字符串字段时”。

那么让我们看看我们发送的内容:

  • StartupPacket(user=my-username, database=db-name, client_encoding=UTF8, DateStyle=ISO, TimeZone=America/Denver, extra_float_digits=2) . 请注意,我们的编码是 UTF8。
  • 然后,我们发送Password(md5digest=md52e3d9f29d44d48ab19ef3469d54d50d1) ,立即得到“bad packet header '70'”异常。

UTF8 又要毁了我的生活吗?我以为我们早就把这些糟糕的日子抛在脑后了。

所以现在我想知道是否有办法改变客户端编码。或者可能更改正在使用的身份验证方法。

0 投票
2 回答
4893 浏览

spring - 在 dbcp+spring+hibernate+jdbc 中禁用准备好的语句?

我目前正在增强一个使用 spring 和 hibernate 的应用程序。有多个实例,应用程序通过准备好的语句与 db (postgres) 通信。到目前为止,该应用程序通过 dbcp 与 postgres 通信。

更改:应用程序现在通过 pgbouncer 与 postgres 通信。

即:应用程序-> dbcp-> pgbouncer-> postgres

我知道这不是最理想的解决方案,即:拥有 2 个池。但是由于当前的架构,我们需要它们两者。

要求:pgbouncer 不支持事务模式下的准备好的语句,因此必须被淘汰。

更改以消除准备好的语句。

1) psql: 版本 = 9.2.6

没变

2)pgbouncer:在配置文件中设置以下属性

3) jdbc : 准备好的阈值已相应设置。IE :jdbc:postgresql://localhost:6541/postgres?prepareThreshold=0

4) dbcp : poolPreparedStatements = false maxOpenPreparedStatements = 0

5)休眠:没有变化

6)弹簧:没有变化

问题:

尽管发生了所有这些变化,我仍然看到准备好的语句试图创建并且交易因此而失败。

“错误:准备好的语句“S_21”不存在;嵌套异常是 org.postgresql.util.PSQLException:错误:准备好的语句“S_21”不存在”

我已经删除了所有使用准备好的语句的逻辑更改。

如何防止创建其他准备好的语句?spring 或 hibernate 是否在内部为其使用创建准备好的语句?如果是,我该如何禁用它们?

0 投票
1 回答
3210 浏览

c# - Postgres ignoring search_path parameter

I have a C# app connecting to a postgres database, through pg_bouncer, using Npgsql. In my connection string, I include SearchPath. Npgsql picks this up and sets the search_path parameter in the startup packet.

Pg_bouncer seems to not like that search_path parameter, which would cause the initial connection to fail (Unsupported startup parameter: search_path). To get around this, we listed it in the ignore_startup_parameters list for pg_bouncer.

The connection now gets through to the database fine, but totally ignores any SearchPath declared in the connection string. Every query now, instead of hitting the correct schema, selects out of the Public schema.

How can I get Postgres to respect the SearchPath again?

0 投票
1 回答
2317 浏览

postgresql - 如何使用 unix 套接字配置 postgresql / pgbouncer?

无法pgbouncer / postgresql使用默认的 unix 套接字使最简单的组合工作。

以 身份登录foo,并使用现有数据库(由 创建foobar。这些工作正常:

/etc/pgbouncer/userlist.txt

/etc/pgbouncer/pgbouncer.ini

当我尝试使用psql -p 6432 mydb或登录时psql -p 6432 mydb --password,输入密码后,我得到

0 投票
2 回答
484 浏览

postgresql - 教义。关闭准备语句

我在我的项目中使用 symfony2 和学说。

如何关闭每个 sql 查询的准备语句?

我需要它,因为我使用 pgbouncer for PostgreSQL 连接和准备语句不支持。