[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 メーリングリストの案内