2011年12月22日

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

石井です。

> こんにちは、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


投稿者 xml-rpc : 2011年12月22日 19:27
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/107805
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。