[pgsql-jp: 37840] Re: kind mismatch between backends

Tatsuo Ishii ishii @ sraoss.co.jp
2006年 12月 22日 (金) 15:06:26 JST


石井です.

> 中井です。
> 
> ありがとうございます。

どういたしまして.

> Tatsuo Ishii wrote:
> > とりあえずエラーが発生したときのpgpoolのエラーログを見せていただけます
> > か?  また,同じテーブルに関する他の種類のSELECT文ではエラーは出ないの
> > でしょうか?
> 
> 必ずエラーが出るわけではないです。
> 
> 2006-12-22 08:31:00 LOG:   pid 22580: statement: show pool_status
> ;
> 2006-12-22 08:31:01 LOG:   pid 22930: statement:  RESET ALL
> 2006-12-22 08:31:01 LOG:   pid 22930: statement:  SET SESSION
> AUTHORIZATION DEFAULT
> 2006-12-22 08:31:01 LOG:   pid 22930: statement: DEALLOCATE "S_1"
> 2006-12-22 08:31:01 LOG:   pid 22930: statement: DEALLOCATE "S_2"
> 2006-12-22 08:31:14 LOG:   pid 22930: statement:  RESET ALL
> 2006-12-22 08:31:14 LOG:   pid 22930: statement:  SET SESSION
> AUTHORIZATION DEFAULT
> 2006-12-22 08:31:14 LOG:   pid 22930: statement: DEALLOCATE "S_1"
> 2006-12-22 08:31:14 LOG:   pid 22930: statement: DEALLOCATE "S_2"
> 2006-12-22 08:31:22 LOG:   pid 22930: statement:  RESET ALL
> 2006-12-22 08:31:22 LOG:   pid 22930: statement:  SET SESSION
> AUTHORIZATION DEFAULT
> 2006-12-22 08:31:22 LOG:   pid 22930: statement: DEALLOCATE "S_1"
> 2006-12-22 08:31:22 LOG:   pid 22930: statement: DEALLOCATE "S_2"
> 2006-12-22 08:31:39 LOG:   pid 22580: statement:  RESET ALL
> 2006-12-22 08:31:39 LOG:   pid 22580: statement:  SET SESSION
> AUTHORIZATION DEFAULT
> 2006-12-22 08:32:12 ERROR: pid 22580: read_kind: kind does not match
> between backends master(82) secondary(69)
> 2006-12-22 08:32:46 LOG:   pid 22580: statement: select * from workflow
> 2006-12-22 08:33:14 LOG:   pid 22580: statement:  RESET ALL
> 2006-12-22 08:33:14 LOG:   pid 22580: statement:  SET SESSION
> AUTHORIZATION DEFAULT
> 2006-12-22 08:33:36 LOG:   pid 22580: statement: select * from workflow
> 2006-12-22 08:33:36 LOG:   pid 22580: statement:  RESET ALL
> 2006-12-22 08:33:36 LOG:   pid 22580: statement:  SET SESSION
> AUTHORIZATION DEFAULT
> 2006-12-22 08:34:18 LOG:   pid 22930: statement: select * from workflow
> 2006-12-22 08:35:46 ERROR: pid 22930: ProcessFrontendResponse: failed to
> read kind from frontend. fronend abnormally exited
> 2006-12-22 08:35:46 LOG:   pid 22930: do_child: exits with status 1 due
> to error
> 2006-12-22 08:37:00 LOG:   pid 22580: statement:  RESET ALL
> 2006-12-22 08:37:00 LOG:   pid 22580: statement:  SET SESSION
> AUTHORIZATION DEFAULT
> 2006-12-22 08:37:00 LOG:   pid 22580: statement: DEALLOCATE "S_1"
> 2006-12-22 08:37:00 LOG:   pid 22580: statement: DEALLOCATE "S_2"
> 2006-12-22 08:39:02 ERROR: pid 22580: pool_check_fd: data is not ready
> tp->tv_sec 5 tp->tp_usec 5000000
> 2006-12-22 08:39:02 ERROR: pid 22580: pool_process_query: secondary data
> is not ready at synchronous point. abort this session
> 2006-12-22 08:39:02 ERROR: pid 22580: pool_process_query: kind does not
> match between backends master(E) secondary( (~'@)
> 2006-12-22 08:39:02 ERROR: pid 22580: health check failed during write.
> master  at port 9999 is down
> 2006-12-22 08:39:02 LOG:   pid 22580: notice_backend_error: master: 1
> fail over request from pid 22580
> 2006-12-22 08:39:02 LOG:   pid 12091: starting degeneration. shutdown
> master host (9999)
> 2006-12-22 08:39:02 LOG:   pid 12091: degeneration done. shutdown master
> host (9999)
> 
> pid 22580 は、ssh で入って psql でデータベースを検査していた
> ところです。show pool_status; の結果は正常でした。
> 動作チェックで select * を行う前に、最初のエラーメッセージが
> 出ています。でも画面(psql)では、エラーがでませんでした。

これですね.

> 2006-12-22 08:32:12 ERROR: pid 22580: read_kind: kind does not match
> between backends master(82) secondary(69)

82は"R"で,認証要求のパケットです.なのでたぶんこれは正常.secondaryの
69("i")が変ですね.これは"Empty Query Response"で,空のクエリを送った
ときの応答です.なぜこんなものが返ってくるのか...調べてみます.

ところで,

> 2006-12-22 08:37:00 LOG:   pid 22580: statement: DEALLOCATE "S_1"
> 2006-12-22 08:37:00 LOG:   pid 22580: statement: DEALLOCATE "S_2"

というのがあります.pid 22580はpsqlで接続しているんですよね?このメッセー
ジはprepared queryが使われたことを示していますが,実際使ってますか?

> 何回かやっているうちにハングしてしまいました。

これですね.

> 2006-12-22 08:39:02 ERROR: pid 22580: pool_process_query: secondary data
> is not ready at synchronous point. abort this session
> 2006-12-22 08:39:02 ERROR: pid 22580: pool_process_query: kind does not
> match between backends master(E) secondary( (~'@)

これは,secondaryから応答が返ってこなくなり,タイムアウトしたことを示
しています.確認ですが,secondaryのpostmasterをshutdownするとか,そう
いう操作はされていないですよね?

> 従って、この時点では、データベースに異常があったとはわかりません
> でした。
> # 変ですね。
> 
> エラー行 08:39:02 の secondary の kind は化けています。
> この時点でアプリケーションがエラーを返し、アプリケーションのログに
> kind does not smatch が残りました。
> このあとしばらくたってから、エラーメッセージ(08:39:02のもの)メールが
> 届いて気づきました。縮退運転に入るとメールを飛ばすようにしてあるのです。
> 08:32:12の時点では、縮退運転に入っていませんでした。
> # これも変ですね。

これですね.

> 2006-12-22 08:39:02 ERROR: pid 22580: health check failed during write.
> master  at port 9999 is down

pgpoolから見ると,masterのhealth checkに失敗しているように見えます.
ログだけ見ると,postmasterをshutdownしているように見えるのですが...

> 宜しくお願いします。
> 
> 追伸:エラーログファイルはopenしぱなっしなんですね。logrotateしようと
>    しましたが、rotateした最新ファイルは空でした。あせりました。

はい,さすがにログに書きにいくたびにopenしたのでは遅すぎますので.
HUPシグナルか何かでcloseするようなことを考えてみます.
--
Tatsuo Ishii
SRA OSS, Inc. Japan



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