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