sql - pgbench 处理大量事务后数据库暂时断开连接

标签 sql database postgresql benchmarking postgresql-9.2

我正在使用 (PostgreSQL) 9.2.1 并使用 pgbench 测试数据库。

pgbench -h 192.168.39.38 -p 5433 -t 1000 -c 40 -j 8 -C -U admin testdb

当我使用-C参数(为每笔交易建立一个新的连接)时,交易总是在第16381次交易后丢失。

Connection to database "testdb" failed
could not connect to server: Can't assign requested address
    Is the server running on host "192.168.39.38" and accepting
    TCP/IP connections on port 5433?
Client 19 aborted in establishing connection.
Connection to database "testdb" failed
could not connect to server: Can't assign requested address
    Is the server running on host "192.168.39.38" and accepting
    TCP/IP connections on port 5433?
Client 19 aborted in establishing connection.
....

transaction type: TPC-B (sort of)
scaling factor: 30
query mode: simple
number of clients: 40
number of threads: 8
number of transactions per client: 1000
number of transactions actually processed: 16381/40000
tps = 1665.221801 (including connections establishing)
tps = 9487.779510 (excluding connections establishing)

并且每次测试中实际处理的交易数总是16381。 但是,pgbench 可以成功,所有交易都在

-C is not used

the total transactions are less than 16381

删除这些事务后,数据库可以在几秒钟内继续接受连接。 我想知道我是否错过了 PostgreSQL 的一些配置。

谢谢


编辑 我发现客户端被阻止连接几秒钟,但其他人仍然可以访问数据库。这是否意味着同一个客户端不能在短时间内发送太多交易?

最佳答案

我找到了它在大约 16000 次交易后失去连接的原因。 TCP wait_time 为这个错误负责。以下命令将显示 TCP 连接的状态:

$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

然而,它在 MAC OS X 中不显示 TIME_WAIT。因此我错过了它。通过以下命令调整 TCP wait_time 后,pgbench 可以正常工作。

$ sudo sysctl -w net.inet.tcp.msl=1500
net.inet.tcp.msl: 15000 -> 1500

感谢您的帮助。

关于sql - pgbench 处理大量事务后数据库暂时断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597251/

相关文章:

sql - 仅返回列中的数值 - Postgresql

sql - 在 SQL Server 存储过程中查找数据类型不匹配

php - 在 PHP 中通过引用传递数据库连接

mysql - 根据另一个表中的更改自动更新数据库行

java - Spring Boot - PostgreSQL 驱动程序无法位于类路径中

sql - 滚动总和直到达到某个值,加上计算的持续时间

sql - 大查询 : Computing aggregate over window of time for each person

java - 在 SQLite 数据库中搜索

用于检测累计值何时达到限制的 SQL 查询

sql - PostgreSQL 和时间点恢复