[pgsql-jp: 33984] Re: pgpool でデッドロック?

Tatsuo Ishii t-ishii @ sra.co.jp
2004年 9月 14日 (火) 22:43:11 JST


石井です.

  実行したSQL文
  PostgreSQLのバージョン
  pgpoolのバージョン
  pgpoolの設定ファイルの中身

がわかって,かつ再現性があれば何か分かるかも知れません.

こちらでpgbenchでテストした程度では再現しないようなので...
--
Tatsuo Ishii

> 武部と申します。
> 
> Tomcat+PostgreSQLでアプリケーションを構築しており、
> 主にレプリケートの目的で、pgpoolを利用しようと考えていま
> すが、
> アプリケーションの負荷試験を行ったところ、
> pgpoolでレプリケートしていると、デッドロックのような
> 現象が発生し、更新処理が止まってしまいます。
> (replication_strictはtrueに設定しています。)
> 
> ロック状態を確認したところ以下のようになっており、
> slave側ではp2の方がSQLの実行としては後
> (postgreのlog_statement
> の出力から)
> なのですがトランザクションID 5417630ロックを先に取得して
> しまって
> いるように見えます。
> (p1,p2というのは同じSQLを実行するmasterとslaveのペアに同
> じ名前をつけています。)
> 
> master側---------------------------------
> p1(psで見るとidle in tranzaction状態)
>                     |          |     5417667 | 25384 |
> ExclusiveLock    | t
>  other_table        | db1      |             | 25384 |
> AccessShareLock  | t
>  other_table        | db1      |             | 25384 |
> RowShareLock     | t
>  TABLE_A            | db1      |             | 25384 |
> AccessShareLock  | t
>  TABLE_A            | db1      |             | 25384 |
> RowExclusiveLock | t
> 
> 
> p2 (psで見るとINSERT waiting状態)
>  pk_other_table     | db1      |             | 25382 |
> AccessShareLock  | t
>  TABLE_A            | db1      |             | 25382 |
> AccessShareLock  | t
>  TABLE_A            | db1      |             | 25382 |
> RowExclusiveLock | t
>                     |          |     5417667 | 25382 |
> ShareLock        | f
>                     |          |     5417693 | 25382 |
> ExclusiveLock    | t
>  other_table        | db1      |             | 25382 |
> AccessShareLock  | t
>  other_table        | db1      |             | 25382 |
> RowShareLock     | t
> 
> 
> slave側---------------------------------
> p1 (psで見るとINSERT waiting 状態)
>  pk_other_table     | db1      |             | 3389 |
> AccessShareLock  | t
>  other_table        | db1      |             | 3389 |
> AccessShareLock  | t
>  other_table        | db1      |             | 3389 |
> RowShareLock     | t
>                     |          |     5417630 | 3389 |
> ShareLock        | f
>  TABLE_A            | db1      |             | 3389 |
> AccessShareLock  | t
>  TABLE_A            | db1      |             | 3389 |
> RowExclusiveLock | t
>                     |          |     5417605 | 3389 |
> ExclusiveLock    | t
> 
> p2 idle (psで見るとidle in tranzaciton状態)
>  other_table        | db1      |             | 3387 |
> AccessShareLock  | t
>  other_table        | db1      |             | 3387 |
> RowShareLock     | t
>  TABLE_A            | db1      |             | 3387 |
> AccessShareLock  | t
>  TABLE_A            | db1      |             | 3387 |
> RowExclusiveLock | t
>                     |          |     5417630 | 3387 |
> ExclusiveLock    | t
> 
> 
> 現状、replication_strictがtrueですが、
> master側のSQLがロック待ちになっている状態でも
> salve側にSQLが実行されているという状況に見えるのですが、
> これは正しい状態なのでしょうか?
> 設定がうまくいっていないのでしょうか?
> 
> なにかアドバイスをいただければ幸いです。



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