[pgpool-general-jp: 301] Re: Pgpoolのパフォーマンスについて

Yoshiyuki Asaba y-asaba @ sraoss.co.jp
2007年 11月 29日 (木) 10:15:39 JST


浅羽です。

From: Nobuaki Inamura <inamuran36 @ mahikari.or.jp>
Subject: [pgpool-general-jp: 300] Re: Pgpoolのパフォーマンスについて
Date: Wed, 28 Nov 2007 20:59:37 +0900

> Yoshiyuki Asaba さんは書きました:
> > 確認ですが、クライアント、pgpool、PostgreSQL はすべて異なるマシンに配
> > 置されているのでしょうか?それとも pgpool がクライアントマシン、もしく
> > は PostgreSQL マシンと同居しているのでしょうか?
> 
> pgooolとPostgresが同一マシンで、クライアントは同一ネットワーク上の別PCです。

情報ありがとうございます。

改善されるかわからないですが、バッファリングしているところで気になると
ころがあったので、添付のパッチを適用するといかがでしょうか?

よろしくお願いします。
--
Yoshiyuki Asaba
y-asaba @ sraoss.co.jp
-------------- next part --------------
Index: pool_stream.c
===================================================================
RCS file: /cvsroot/pgpool/pgpool/pool_stream.c,v
retrieving revision 1.10
diff -c -r1.10 pool_stream.c
*** pool_stream.c	11 Jul 2007 01:40:17 -0000	1.10
--- pool_stream.c	29 Nov 2007 01:11:21 -0000
***************
*** 324,331 ****
  */
  int pool_write(POOL_CONNECTION *cp, void *buf, int len)
  {
- 	int reqlen;
- 
  	if (len < 0)
  	{
  		pool_error("pool_write: invalid request size: %d", len);
--- 324,329 ----
***************
*** 335,360 ****
  	if (cp->no_forward)
  		return 0;
  
! 	/* check buffer size */
! 	reqlen = cp->wbufpo + len;
! 
! 	if (reqlen > cp->wbufsz)
  	{
! 		char *p;
  
! 		reqlen = (reqlen/WRITEBUFSZ+1)*WRITEBUFSZ;
! 		p = realloc(cp->wbuf, reqlen);
! 		if (p == NULL)
  		{
! 			pool_error("pool_write: realloc failed");
! 			return -1;
  		}
- 		cp->wbuf = p;
- 		cp->wbufsz = reqlen;
- 	}
  
! 	memcpy(cp->wbuf+cp->wbufpo, buf, len);
! 	cp->wbufpo += len;
  
  	return 0;
  }
--- 333,363 ----
  	if (cp->no_forward)
  		return 0;
  
! 	while (len > 0)
  	{
! 		int remainder = cp->wbufsz - cp->wbufpo;
  
! 		if (remainder <= 0)
  		{
! 			/*
! 			 * Write buffer is full. so flush buffer.
! 			 * wbufpo is reset in pool_flush_it().
! 			 */
! 			pool_flush_it(cp);
! 			remainder = WRITEBUFSZ;
  		}
  
! 		/* check buffer size */
! 		if (remainder >= len)
! 		{
! 			/* OK, buffer size is enough. */
! 			remainder = len;
! 		}
! 		memcpy(cp->wbuf+cp->wbufpo, buf, remainder);
! 		cp->wbufpo += remainder;
! 		buf += remainder;
! 		len -= remainder;
! 	}
  
  	return 0;
  }


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