Hsi*_*iao 7 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
Run Code Online (Sandbox Code Playgroud)
当我使用-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)
Run Code Online (Sandbox Code Playgroud)
并且每次测试中实际处理的事务数总是16381.但是,pgbench可以成功并且在所有情况下处理所有事务
-C未使用
要么
总交易量小于16381
删除这些事务后,数据库可以在几秒钟内继续接受连接.我想知道我是否错过了PostgreSQL的一些配置.
谢谢
编辑我发现客户端被阻止连接几秒钟,但其他人仍然可以访问数据库.这是否意味着同一客户端不能在短时间内发送太多交易?
我找到了大约 16000 笔交易后失去连接的原因。TCP wait_time 承担了这个错误的责任。以下命令将显示 TCP 连接的状态:
$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
Run Code Online (Sandbox Code Playgroud)
然而,它在 MAC OS X 中不显示 TIME_WAIT。因此我错过了它。我通过以下命令调整 TCP wait_time 后,pgbench 工作正常。
$ sudo sysctl -w net.inet.tcp.msl=1500
net.inet.tcp.msl: 15000 -> 1500
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |