[pgsql-jp: 41010] Re: pgpool-II 3.1 系 parallel_mode - 子プロセスハングアップ

Tatsuo Ishii ishii @ sraoss.co.jp
2011年 12月 22日 (木) 19:27:34 JST


石井です。

> こんにちは、sho と申します。
> 
> pgpool-II 3.1 および 3.1.1 で parallel_mode をテストしているのですが、
> たまに反応が帰ってこなくなるときがあります。
> (特定のSQLを何度か繰り返すと発生するのですが、簡単・確実に再現する
> SQL が見つけられませんでした)
> 状態としては、CPU 利用率がほぼ 100 %で、その子プロセスを gdb でみたところ、
> 
> pool_process_query in pool_process_query.c:
> 内の for 文を抜け出せないようです。
> gdb で next を繰り返すと、以下のコードのところをずーとループしているようです。
> 
>          if (state == 0 && reset_request)
>          check_stop_request();
>          if (*InRecovery > 0 && pool_config->client_idle_limit_in_recovery == -1)
>          if (is_cache_empty(frontend, backend) && !pool_is_query_in_progress())
>                  if (!pool_read_buffer_is_empty(frontend) && !pool_is_query_in_progress())
>                  if (!pool_read_buffer_is_empty(MASTER(backend)) || pool_is_query_in_progress()) <--※1
>          if (got_sighup)
> 
> 問題がないときは、※1 内の処理に入るようですが、問題が出ているときはこの処理に入りません。
> pool_read_buffer_is_empty(MASTER(backend)) が真になっているようです。
> MASTER にあたる connection データの len だけ 0 で他のノードはまだ len > 0 に
> なっていました。
> もしかしたら、pool_is_query_in_progress 側の問題かもしれませんが、よくわかりませんでした。

ちょうど同じ問題が英語のメーリングリストで提起され、パッチを作ってみま
した。よろしかったらお試しください。

http://www.pgpool.net/pipermail/pgpool-general/2011-December/000099.html

> なお、2.3.2.2 では上記のような現象はでません。

pgpool-II 3.0以降で、このあたり、大きなコードの変更があったので、その影
響かもしれません。
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp


> 情報が不足してるとは思いますが、なにかわかりますでしょうか?
> 以上、よろしくお願いします。
> 
> -- sho


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