[pgsql-jp: 32613] Re: pgpool 1.0 alpha1リリース

Tatsuo Ishii t-ishii @ sra.co.jp
2004年 3月 29日 (月) 18:20:58 JST


石井です.

>   わ〜!、pgpoolがこういう方向に進んでいるとはびっくりしました。いいですね
>>   不意なダウンさえ避けられれば十分という場面も多いので、個人的には期待大で
> す。
>   ちょうどいい環境があるので、テストしたいと思います。

済みません.出鼻をくじくようで恐縮ですが,さっそくバグがありまして,
inet domain socket経由でfrontend->pgpoolがつながらないことがわかりまし
た(unix domain socketはOK).パッチを付けておきます.また,
pgpool.conf.sampleにreplplication_modeディレクティブを追加するのも忘れ
ていたので,併せてパッチにしました(子プロセスの数も16から32に増やして
います).

ところで,RH9/P4 2.4GHz/Mem 1GBのマシンを4台使って軽く性能測定をしてみ
ました.pgbenchで10万件のデータを作り,SELECT onlyで走らせました.
(pgbench -S -c 10 -t 100)もちろんreplication modeで走らせています.

マシンA: pgbench
マシンB: pgpool
マシンC: DB master
マシンD: DB secondary

A->Cでpgbenchをすると,3870TPS位出ます.ところが,pgpoolを経由すると
249TPSとがっくり.しかも,

ERROR: pid 17699: accept() failed. reason: Resource temporarily
unavailable

が出ます.そこで,

マシンA: pgbench, pgpool
マシンC: DB master
マシンD: DB secondary

にしてみたところ(つまり,pgbench->pgpoolはunix domain socket)にすると,
3800TPSに回復.エラーも出ません.うーん,改良の余地があちこちにありそ
う...
--
Tatsuo Ishii

diff -c -r1.4 pgpool.conf.sample
*** pgpool.conf.sample	28 Feb 2004 14:06:22 -0000	1.4
--- pgpool.conf.sample	29 Mar 2004 04:06:29 -0000
***************
*** 30,36 ****
  secondary_backend_port = 0
  
  # number of pre-forked child process
! num_init_children = 16
  
  # numer of connection pool allowed for a child process.
  max_pool = 4
--- 30,36 ----
  secondary_backend_port = 0
  
  # number of pre-forked child process
! num_init_children = 32
  
  # numer of connection pool allowed for a child process.
  max_pool = 4
***************
*** 45,47 ****
--- 45,49 ----
  # logging directory
  logdir = '/tmp'
  
+ # replication mode
+ replication_mode = false
Index: pool_connection_pool.c
===================================================================
RCS file: /home/t-ishii/repository/pgpool/pool_connection_pool.c,v
retrieving revision 1.11
diff -c -r1.11 pool_connection_pool.c
*** pool_connection_pool.c	29 Mar 2004 03:42:02 -0000	1.11
--- pool_connection_pool.c	29 Mar 2004 08:41:58 -0000
***************
*** 269,274 ****
--- 269,276 ----
  	memset((char *) &addr, 0, sizeof(addr));
  	((struct sockaddr *)&addr)->sa_family = AF_INET;
  
+ 	host = secondary_backend?pool_config.secondary_backend_host_name:pool_config.current_backend_host_name;
+ 
  	port = secondary_backend?pool_config.secondary_backend_port:pool_config.current_backend_port;
  	addr.sin_port = htons(port);
  	len = sizeof(struct sockaddr_in);
***************
*** 276,282 ****
  	hp = gethostbyname(host);
  	if ((hp == NULL) || (hp->h_addrtype != AF_INET))
  	{
! 		pool_error("connect_inet_domain_socket: gethostbyname() failed: %s",strerror(errno));
  		close(fd);
  		return -1;
  	}
--- 278,284 ----
  	hp = gethostbyname(host);
  	if ((hp == NULL) || (hp->h_addrtype != AF_INET))
  	{
! 		pool_error("connect_inet_domain_socket: gethostbyname() failed: %s host: %s", strerror(errno), host);
  		close(fd);
  		return -1;
  	}




pgsql-jp メーリングリストの案内