[pgcluster: 487] Re: 107av12リリースしました

Wataru Oguro oguro @ zenrin-datacom.net
2004年 8月 11日 (水) 12:15:47 JST


oguroです。

毎度すばやい対応ありがとうございます。
少々立て込んできたのでテストする機会がなくなってきましたが、ちょくちょく
とテスト報告をしていきたいと思いますのでよろしくお願いいたします。

・RedHatLinux7.3(クラスタサーバ2台、レプリケーションサーバ1台)
・PGCluster1.0.7av12


上記環境で早速テストしてみましたが、select for updateでのデッドロックの
件は完全に改善されてはいないようです。
2台のクラスタサーバから同時に発行した場合に、1台のクラスタサーバはクエ
リーが通るのですが、もう1台のクラスタサーバはそのまま固まってしまいます。

このとき何が起きているかpgreplicateのデバッグログを見ていたのですが、一
定の間隔で、固まっていないクラスタサーバからクエリーが投げ続けられていま
した。(ログから解釈しただけなので、見当違いかもしれませんが)

具体的な手順は以下の通りです。

1.DBへ接続(クラスタサーバ1、2)
 psql test

2.クエリーを発行(クラスタサーバ1、2)
 begin;
 select * from test where a = '111' for update;

 *Windows上でTeraTermにて2台のクラスタサーバへ接続し、
TeraTermProAssistantを利用して2台のクラスタサーバに同時にコマンドを発行
しています。

3.クラスタサーバ1のクエリーが終了
 クラスタサーバ2は、クラスタサーバ1で実行中のトランザクション終了待ち
に入ります。

4.commitを発行(クラスタサーバ1、2)
 commit;

 この時、クラスタサーバ1は正常にcommitが処理されますが、クラスタサーバ
2は待ち状態のままでした。
 *30分程度待っても一向に反応がありませんでした。

この状態でpgreplicateのデバッグログを見ていると、一定の間隔でクラスタ
サーバ1から2.で発行したselect for update クエリーが流れてきているよう
に見えます。

----- デバッグログ -----
DEBUG(PGRread_packet): query :: select * from test where a='111' for update
DEBUG(PGRreplicate_packet_send): cmdSts=T
DEBUG(PGRreplicate_packet_send): cmdType=S
DEBUG(PGRreplicate_packet_send): port=5432
DEBUG(PGRreplicate_packet_send): pid=20920
DEBUG(PGRreplicate_packet_send): from_host=db01
DEBUG(PGRreplicate_packet_send): dbName=test
DEBUG(PGRreplicate_packet_send): userName=postgres
DEBUG(PGRreplicate_packet_send): recieve sec=1092191390
DEBUG(PGRreplicate_packet_send): recieve usec=955309
DEBUG(PGRreplicate_packet_send): query_size=43
DEBUG(PGRreplicate_packet_send): query=select * from test where a='111'
for update
DEBUG(PGRreplicate_packet_send): useFlag[2]
DEBUG(is_need_response): sem_lock[1]

pgreplicateの停止を行うまで、上記のログが一定間隔で現れていました。
お忙しいところ申し訳ありませんが、ご確認いただけますでしょうか。




pgcluster メーリングリストの案内