【发布时间】:2012-11-28 03:22:32
【问题描述】:
我正在使用 (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 不使用
或
总交易量小于 16381
删除这些事务后,数据库可以在几秒钟内继续接受连接。 我想知道我是否遗漏了一些 PostgreSQL 的配置。
谢谢
编辑 我发现客户端被阻止连接几秒钟,但其他人仍然可以访问数据库。这是否意味着同一个客户端不能在短时间内发送太多交易?
【问题讨论】:
-
顺便说一句,我在 postgresql.conf 中尝试了以下参数。但是在这种情况下它们是没用的。
wal_bufferscheckpoint_segmentsmax_connectionswal_writer_delay和shared_buffers -
可能是套接字 TIME_WAIT3 的事情。 netstat 说什么?如果通过 unix-domeain 套接字连接会发生什么?
-
顺便说一句:客户端和服务器之间是否有路由器/防火墙/NAT-box?
标签: sql database postgresql benchmarking postgresql-9.2