标签: pgbouncer

使用pgbouncer进行事务池有什么好处?

我很难找到使用pgbouncer进行事务池与会话池的优点/缺点的总结.

这是否意味着交易繁重的工作负载在某种程度上更好地负载平衡?是否要防止从pgbouncer连接到数据库需要多少连接?

postgresql pgbouncer

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

pgBouncer如何帮助加速Django

我有一些基于gevent的管理命令.由于我的管理命令使成千上万的请求,我可以使用Gevent将所有套接字调用转换为非阻塞调用.这真的加快了我的应用程序,因为我可以同时提出请求.

目前我应用程序的瓶颈似乎是Postgres.这似乎是因为用于连接Django的Psycopg库是用C语言编写的,不支持异步连接.

我还读到使用pgBouncer可以将Postgres加速2倍.这听起来不错,但如果有人能解释pgBouncer如何工作和帮助会很棒吗?

谢谢

python django postgresql connection-pooling pgbouncer

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

使用Django的CONN_MAX_AGE进行pgbouncer的理想设置

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

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

Django 1.6设置:

DATABASES['default'] = {
    'ENGINE':   'django.db.backends.postgresql_psycopg2',

     ....

    'PORT': '6432'
    'OPTIONS': {'autocommit': True,},
    'CONN_MAX_AGE': 300,
}

ATOMIC_REQUESTS = False   # default
Run Code Online (Sandbox Code Playgroud)

Postgres的:

max_connections = 100
Run Code Online (Sandbox Code Playgroud)

PgBouncer:

pool_mode = session     # Can this be transaction?
max_client_conn = 400   # Should this match postgres max_connections?
default_pool_size = 20
reserve_pool_size = 5
Run Code Online (Sandbox Code Playgroud)

django connection-pooling pgbouncer

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

Postgres - 错误:准备好的声明"S_1"已经存在

通过JDBC执行批量查询到pgbouncer时,我收到以下错误:

org.postgresql.util.PSQLException: ERROR: prepared statement "S_1" already exists
Run Code Online (Sandbox Code Playgroud)

我在网上发现了bug报告,但它们似乎都处理Postgres 8.3或更低版本,而我们正在使用Postgres 9.

这是触发错误的代码:

this.getJdbcTemplate().update("delete from xx where username = ?", username);

this.getJdbcTemplate().batchUpdate( "INSERT INTO xx(a, b, c, d, e) " + 
                "VALUES (?, ?, ?, ?, ?)", new BatchPreparedStatementSetter() {
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        ps.setString(1, value1);
        ps.setString(2, value2);
        ps.setString(3, value3);
        ps.setString(4, value4);
        ps.setBoolean(5, value5);
    }
    @Override
    public int getBatchSize() {
        return something();
    }
});
Run Code Online (Sandbox Code Playgroud)

有人见过这个吗?

编辑1:

这被证明是在使用会话池以外的任何东西时发生的pgBouncer问题.我们使用的是事务池,显然不支持预准备语句.通过切换到会话池,我们解决了这个问题.

不幸的是,这不是我们用例的好方法.我们对pgBouncer有两个单独的用途:我们系统的一部分进行批量更新,这些更新作为预处理语句最有效,另一部分需要非常快速连续的许多连接.由于pgBouncer不允许在会话池 …

java postgresql jdbc pgbouncer

17
推荐指数
3
解决办法
9030
查看次数

JDBC和pgbouncer可以与createStatement一起使用

我了解到JDBC PreparedStatement和PGBouncer无法一起工作,因为PreparedStatement使用会话池并且是预编译的,PGbouncer使用事务级别池.

我的问题是可以createStatement和PGBouncer一起使用,因为它没有预编译?如果没有,有人可以指向另一个可以连接到数据库并可以使用PGbouncer的Java API吗?

java jdbc prepared-statement pgbouncer

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

django 1.7和连接池到PostgreSQL?

django应用程序(Django-PostgresPool,djorm-ext-pool,django-db-pool)和PG Bouncer或PG Pool之间有什么区别?

应用程序是否使用最后两个包中的一个?

本文中,作者说有一个以django 1.6开头的补丁.这是否意味着我们不再需要使用任何这些解决方案,既不是应用程序,也不是PG Bouncer或PG Pool包?

django connection-pooling pgpool pgbouncer django-1.7

13
推荐指数
2
解决办法
5146
查看次数

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

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

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

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

对于同一套交易(通过pgbench)

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

  • pgbouncer connection => 3k(tps)appx

pgbouncer中是否有任何配置需要调整才能获得更好的性能?

我知道pgbouncer是一个单线程应用程序,但是想把它调整到最好.以下是我的pgbouncer配置:

pgbouncer.ini

pool_mode = transaction
server_reset_query =

# Time outs
server_lifetime=6000
server_idle_timeout=0
server_connect_timeout=30


#pool configuration
max_client_conn=10000
default_pool_size=500
pool_size=500

##other
pkt_buf=4096
server_login_retry=2
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

在执行测试时:

cpu利用率:30%appx

磁盘利用率:40%appx

观察:许多交易处于"闲置"状态

测试细节:

10个机器充当客户端向DB服务器运行pgbench触发请求.

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

pgbench_SchemaScript.sql

\setrandom delta 0 100000
insert into t1.emplog values(nextval('t1.employeeSeq'),:delta);
Run Code Online (Sandbox Code Playgroud)

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

postgresql pgbouncer

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

pgbouncer - 关闭因为:每个连接上都有不洁净的服务器

我正在使用PostgreSQL 9.1/PostGIS 1.5,psycopg2 2.4.2和pgbouncer 1.4.2运行Django 1.3.

在与数据库的每个连接上,我在pgbouncer.log中获得一个日志条目:

2011-11-20 02:15:25.027 29538 LOG S-0x96c2200:app_db/postgres@192.168.171.185:5432关闭因为:unclean server(age = 0).

我找不到任何解决这个问题的方法 - 任何人都知道为什么?我已经尝试重新配置pgbouncer(会话/事务模式,不同的超时等),但无济于事.

django postgresql psycopg2 pgbouncer

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

Pgbouncer在大客户端连接上

我需要配置我的pgbouncer用于超过2000个客户端连接的工作,我正在阅读有关如何使用最大连接的一些信息,然后我已经理解了我必须在pgbouncer上做max_client_con = 2000,但是default_pool_size,它们是什么,不仅仅是要问一些支持,以便了解在大型客户端连接上配置pgbouncer的正确方法

postgres.conf

port = 5432                             # (change requires restart)
max_connections = 100                   # (change requires restart)
unix_socket_directory = '/var/run/postgresql'           # (change requires restart)
Run Code Online (Sandbox Code Playgroud)

pgbouncer.ini

[pgbouncer]
logfile = /var/log/postgresql/pgbouncer.log
pidfile = /var/run/postgresql/pgbouncer.pid
listen_addr = 127.0.0.1
listen_port = 6432
unix_socket_dir = /var/run/postgresql
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
admin_users = carlos
pool_mode = statement
server_reset_query = DISCARD ALL
max_client_conn = 100
default_pool_size = 20
Run Code Online (Sandbox Code Playgroud)

postgresql pgbouncer

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

Pgbouncer - 管理动态数据库设置

我们正在考虑在我们的项目中使用 pgbouncer,其中包括动态数据库创建(即添加的每个租户 - 创建一个新数据库)

据我了解,pgbouncer 采用一个映射数据库的配置文件。

问题是 - 有没有办法在不重新启动的情况下向 pgbouncer 添加新数据库?(在 config.ini 文件中添加新的 db 行)

postgresql pgbouncer

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