小编jay*_*h88的帖子

如何增加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
查看次数

使用多个线程编写文件

我试图使用多个线程在Java中编写一个巨大的文件.

我在Java中尝试了两个FileWriterbufferedWriter类.

正在写入的内容实际上是使用CopyManager和写入的整个表(Postgres).文件中的每一行都是表格中的一个元组,我一次写入100行.

写作方法:

在追加模式下,多个线程打开单个待写文件.之后每个线程都尝试写入文件文件.

以下是我面临的问题:

  • 有一段时间,文件的内容会被覆盖,即:一行保持不完整,下一行从那里开始.我的假设是,编写器的缓冲区已经满了.这会强制编写器立即将数据写入文件.写入的数据可能不是一个完整的行,在它可以写入余数之前,下一个线程将其内容写入文件.
  • 使用时Filewriter,我会在文件中看到一条黑线.

有什么建议,如何避免这种数据完整性问题?

java postgresql file-io multithreading bufferedwriter

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

在dbcp + spring + hibernate + jdbc中禁用预准备语句?

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

更改:应用程序现在通过pgbouncer传达给postgres.

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

我知道这不是最理想的解决方案,即:有两个普通人.但由于目前的架构,我们需要它们.

要求:pgbouncer不支持事务模式中的预准备语句,因此必须将其删除.

更改以消除准备好的声明.

1)psql:VERSION = 9.2.6

没变

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

  ignore_startup_parameters=extra_float_digits
  pool_mode=transaction
  server_reset_query=
Run Code Online (Sandbox Code Playgroud)

3)jdbc:已相应地设置准备的阈值.即:jdbc:postgresql://localhost:6541/postgres?prepareThreshold=0

 JAVA VERSION = 1.7.0_51

 JDBC DRIVER  = postgresql-9.3-1102.jdbc41-3.jar
Run Code Online (Sandbox Code Playgroud)

4)dbcp:poolPreparedStatements = false maxOpenPreparedStatements = 0

5)休眠:没有变化

6)春天:没有变化

问题:

尽管所有这些变化,我仍然看到准备好的陈述试图创建和交易失败的原因.

"错误:预处理语句"S_21"不存在;嵌套异常是org.postgresql.util.PSQLException:错误:预处理语句"S_21"不存在"

我删除了使用预准备语句的所有逻辑更改.

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

spring hibernate jdbc prepared-statement pgbouncer

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