[pgsql-jp: 35419] Re: pgpoolのデッドロック

Tatsuo Ishii t-ishii @ sra.co.jp
2005年 5月 26日 (木) 20:34:55 JST


石井です.

> 杉と申します。
> 
> 過去の話題にもありましたが、pgpoolのデッドロックで悩んでおります。
> ※【[pgsql-jp: 33983] pgpool でデッドロック?】
> 
> 以下のクエリを繰り返すJSPを、負荷ツールから何度も呼び出す方法でテストを行いました。
>   【JSP内で発行するクエリ】(AUTOCOMMITは'off'にしています。)
>    SELECT * FROM T_ TEST_TBL WHERE DAT_ID=10001 FOR UPDATE
>    commit
> 
> pgpool側の設定も変更しながら試してみましたが、デッドロックは解消されません。
> 例えば、
>   replication_strict = true
>   replication_mode = true
>   load_balance_mode = true
>   weight_master = 1
>   weight_secondary = 0
>   この場合、通常はweight_secondaryには問い合わせが行かないと解釈していますが・・・
> です。

この場合,問題の問い合わせは明示的なトランザクションの内側にあるので,
ロードバランスの対象になりません.したがって,weight_*は適用されず,マ
スタとセカンダリの両方に必ず問い合わせが送られます.

> master側及びslave側でのロック状況も確認しましたが、繰り返している内に先にslave側が
> 先にロックをかけているようです。(クエリの前に/*シリアル番号*/を入れて確認しました。)

V2.5.2より問い合わせが"SELECT"で始まっていたら(大文字小文字無視),たと
えstrictモードであってマスタの完了を待たずにセカンダリに問い合わせが発
行されます.
# この仕様自体バグっぽい
申し訳ないのですが,SELECTの前にSQLのコメントを入れて,

/*STRICT*/SELECT * FROM T_ TEST_TBL WHERE DAT_ID=10001 FOR UPDATE

として試していただけないでしょうか?
--
Tatsuo Ishii



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