sql – pgbench进行大量事务后,数据库暂时断开连接

我正在使用(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

谢谢你的帮助.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...