[pgsql-jp: 33983] pgpool でデッドロック?
    Mana Takebe
    takebemana @ yahoo.co.jp
       
    2004年 9月 14日 (火) 20:14:38 JST
    
    
  
武部と申します。
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が実行されているという状況に見えるのですが、
これは正しい状態なのでしょうか?
設定がうまくいっていないのでしょうか?
なにかアドバイスをいただければ幸いです。
__________________________________
Do You Yahoo!?
http://bb.yahoo.co.jp/
    
    
pgsql-jp メーリングリストの案内